Mit der Entwicklung von Computern nehmen die Komplexität und das Datenvolumen von Softwareanwendungen zu und auch die Anforderungen an den Systemspeicher werden immer höher. Als Linux-Systemadministrator ist es wichtig zu verstehen, wie man Speicherressourcen richtig verwaltet und zuweist. Dieser Artikel führt Sie in die Grundkenntnisse der Linux-Systemspeicherverwaltung ein.
Frühe Programme wurden direkt auf der physischen Adresse ausgeführt, was bedeutet, dass der vom Programm benötigte Speicherplatz den physischen Speicher der Maschine nicht übersteigt und es kein Problem gibt. In tatsächlichen Szenarien sind sie jedoch alle Multitasking-fähig Multiprozess. Es ist unzuverlässig, dass für jeden Prozess physische Adressen reserviert werden.
Zum Beispiel: Wenn es drei Programme a, b, c gibt, a benötigt 10 MB, b benötigt 100 MB und c benötigt 20 MB, beträgt der Gesamtspeicher 120 MB. Gemäß der vorherigen Zuweisungsmethode werden die ersten 10 MB an a vergeben , und 10M-110M werden an b vergeben. Das System hat noch 10M, aber c benötigt offensichtlich 20M. was zu tun?
Warum Speicherverwaltung erforderlich ist:
1. Effizienzprobleme
Sie können darüber nachdenken, die Daten von Programm b auf die Festplatte zu schreiben, wenn Programm c ausgeführt wird, und die Daten dann von der Festplatte zurückzuschreiben, wenn Programm b ausgeführt wird. Ganz zu schweigen davon, dass es die Anforderungen der parallelen Ausführung von Programm b nicht erfüllen kann und c, auch wenn dies häufig der Fall ist Die zeitaufwändigen Probleme, die durch IO-Vorgänge verursacht werden, sind ebenfalls inakzeptabel.
2. Prozessadressisolationsproblem
Zusätzlich zu Effizienzproblemen stürzt der für den Prozess reservierte Speicherplatz ab, wenn andere Prozesse darauf zugreifen müssen. Beispielsweise beträgt der Speicherplatz, auf den Prozess a zugreift, die ersten 10 MB. Wenn jedoch ein Codeabschnitt in Programm a vorhanden ist, der auf 10 bis 110 MB zugreift, kann dies zum Absturz von Programm b führen. Daher müssen die Adressräume von Prozessen isoliert werden gegenseitig.
3.Umzugsproblem
In realen Szenarien ist es unmöglich, dass eine einzelne Aufgabe im zugewiesenen Speicher ausgeführt wird. Wenn mehrere Aufgaben parallel ausgeführt werden, ist es möglich, Adressen in anderen Prozessen zu beantragen, wenn sie zu diesem Zeitpunkt dynamisch angewendet werden muss an eine neue Adresse verlegt werden.
Speicherverwaltung ist nichts anderes als die Suche nach Möglichkeiten zur Lösung der oben genannten drei Probleme. Wie kann die Effizienz der Speichernutzung verbessert werden? Wie isoliert man den Adressraum eines Prozesses? Wie kann das Verschiebungsproblem gelöst werden, wenn das Programm ausgeführt wird?
Wie die Speicherverwaltung virtuelle Adressen auf physische Adressen abbildet:
Der Prozess der Speicherverwaltungszuordnung von virtuellen Adressen zu physischen Adressen ist auch der Prozess zur Lösung der oben genannten drei Probleme. Die Speicherverwaltung verwendet einen Segmentierungsmechanismus und einen Paging-Mechanismus, um die oben genannten drei Probleme zu lösen. Der ungefähre Prozess ist wie folgt:
Segmentierungsmechanismus:
Solange das Programm in Segmente unterteilt ist und das gesamte Segment an eine beliebige Position verschoben wird, bleibt die Adresse innerhalb des Segments relativ zur Segment-Basisadresse unverändert, solange die Segment-Offset-Adresse lautet gegeben ist, kann die CPU darauf zugreifen. Kopieren Sie daher beim Laden eines Benutzerprogramms einfach den Inhalt des gesamten Segments an einen neuen Speicherort und ändern Sie dann die Adresse im Segmentbasisadressregister auf diese Adresse. Das Programm kann genau ausgeführt werden, da die Intra-Segment-Offset-Adresse verwendet wird Im Programm ist der Inhalt an der Offset-Adresse relativ zur neuen Segment-Basisadresse immer noch derselbe.
Es ist ersichtlich, dass der Segmentierungsmechanismus die Probleme der Isolierung und Verlagerung zwischen Prozessen löst. Diese Aktion wird in Hardware ausgeführt, einige Hardware verfügt jedoch nicht über einen Segmentierungsmechanismus. Als plattformübergreifendes System verwendet Linux einen vielseitigeren Paging-Mechanismus, um die Konvertierung von linearer Adresse in virtuelle Adresse in physische Adresse zu lösen.
Paging-Mechanismus:
Sie können sich auf „Wie greift die CPU auf den Speicher zu?“ beziehen. 》Verstehen Sie das Konzept der einstufigen Seitentabelle, um mit 32-Bit und 64-Bit kompatibel zu sein. Linux verwendet normalerweise vierstufige Seitentabellen, globale Seitenverzeichnisse, übergeordnete Seitenverzeichnisse, Seitenzwischenverzeichnisse und Seitentabellen:
Dies ist keine detaillierte Erklärung, wie Linux vierstufige Seitentabellen verwendet, um lineare Adressen (virtuelle Adressen) in physische Adressen umzuwandeln.
Wenn der Prozess wechselt, findet er das pgd-Feld in mm_struct gemäß task_struct, ruft das globale Seitenverzeichnis des neuen Prozesses ab und füllt es dann in das CR3-Register, um den Seitenwechsel abzuschließen.
Werfen wir einen Blick auf den Prozess des MMU-Pagings und der Adressierung:
Code hochladen:
Es ist ersichtlich, dass die physische Adresse, die der virtuellen Adresse ffff99b488d48000 entspricht, 80000000c8d48000 ist. Dieser Prozess ist auch der Prozess von mmu.
Durch die Einleitung dieses Artikels haben wir die Grundkenntnisse der Linux-Systemspeicherverwaltung erlernt, einschließlich Speicherpartitionen, virtuellem Speicher, Swap-Bereich usw. Bei der tatsächlichen Arbeit kann eine korrekte Speicherverwaltung die Stabilität und Leistung des Systems verbessern und unerwartete Ausfälle aufgrund von Speicherproblemen vermeiden. Ich hoffe, dass die Einführung in diesem Artikel Ihnen dabei helfen kann, die Prinzipien und Methoden der Linux-Systemspeicherverwaltung besser zu verstehen, sodass Sie verschiedene Speicherverwaltungsprobleme problemlos lösen können.
Das obige ist der detaillierte Inhalt vonSie müssen sich keine Sorgen mehr über Speicherprobleme machen – eine Einführung in die Speicherverwaltung von Linux-Systemen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!