Heim > Artikel > System-Tutorial > Hören Sie auf zu sagen, dass Sie die Linux-Speicherverwaltung nicht verstehen, 10 Bilder werden es Ihnen klar machen!
Heute werden wir Linux
s Gedächtnismanagement untersuchen.
Für BWL-Studenten, die sich mit CURD
auskennen, scheint das Gedächtnismanagement weit von uns entfernt zu sein. Obwohl dieser Wissenspunkt nicht beliebt ist (es wird geschätzt, dass viele Menschen ihn nach dem Erlernen überhaupt nicht mehr verwenden), ist er definitiv die Grundlage der Grundlage.
Das ist wie das innere Krafttraining in Kampfkunstromanen. Sie werden keine unmittelbaren Ergebnisse sehen, nachdem Sie es gelernt haben, aber es wird für Ihre zukünftige Entwicklungsarbeit von großem Nutzen sein, weil Sie größer werden.
Alle Beispielbilder im Artikel sind von mir gezeichnet. Das Zeichnen von Bildern nimmt mehr Zeit in Anspruch als das Codieren, aber jeder versteht es intuitiver, wenn er sich Bilder ansieht als Worte, also zeichne ich sie immer noch. Für Studierende, die hochauflösende Beispielbilder benötigen, gibt es am Ende des Artikels Möglichkeiten, diese zu erhalten.
Um es nützlicher auszudrücken: Wenn Sie während des Interviews versehentlich offenbaren, dass Sie dieses Wissen verstehen und es im Detail darlegen können, kann dies das Interesse des Interviewers an Ihnen steigern und Sie können möglicherweise eine Beförderung, eine Gehaltserhöhung usw. erhalten. und starte dein Leben. Der Höhepunkt ist einen Schritt näher.
Prämissenvereinbarung: Die Prämisse des in diesem Artikel besprochenen technischen Inhalts ist, dass die Betriebssystemumgebung x86
32-Bit-x86
架构的 32 位 Linux
-System.
Selbst in modernen Betriebssystemen ist der Speicher immer noch eine äußerst wertvolle Ressource in Ihrem Computer. Schauen Sie sich einfach die Größe des Solid-State-Laufwerks Ihres Computers und dann die Speichergröße an.
Um die Systemspeicherressourcen vollständig zu nutzen und zu verwalten, verwendet Linux die virtuelle Speicherverwaltungstechnologie. Mithilfe der virtuellen Speichertechnologie verfügt jeder Prozess über einen virtuellen Adressraum von 4 GB, der sich gegenseitig nicht beeinträchtigt.
Zuweisung und Betrieb der Prozessinitialisierung basieren auf dieser „virtuellen Adresse“. Erst wenn der Prozess tatsächlich auf Speicherressourcen zugreifen muss, wird die Zuordnung zwischen der virtuellen Adresse und der physischen Adresse hergestellt und die physische Speicherseite übertragen.
Um eine unangemessene Analogie zu geben: Dieses Prinzip ist tatsächlich das gleiche wie bei der aktuellen XX-Netzwerkfestplatte. Wenn Ihr Netzwerkspeicherplatz 1 TB beträgt, glauben Sie dann wirklich, dass Ihnen so viel Speicherplatz auf einmal zur Verfügung gestellt wird? Das ist noch zu jung. Der Platz wird Ihnen nur zugewiesen, wenn Sie Dinge hineinlegen. Ihnen wird so viel Platz zugewiesen, wie Sie tatsächlich hineingelegt haben. Aber es sieht so aus, als hätten Sie und Ihr Freund beide 1 TB Speicherplatz.
Der virtuelle Adressraum des 4-GB-Prozesses ist in zwei Teile unterteilt: „Benutzerraum“ und „Kernelraum“.
Benutzerbereich Kernelbereich
Im obigen Kapitel wissen wir bereits, dass die verwendeten Adressen virtuelle Adressen sind, unabhängig davon, ob es sich um Benutzerraum oder Kernelraum handelt. Wenn der Prozess tatsächlich auf den Speicher zugreifen muss, wird durch die „Anfrage“ des Kernels eine „Seitenfehlerausnahme“ generiert Paging-Mechanismus“ und wird an die physikalische Adresse übertragen. Speicherseite.
Konvertieren Sie die virtuelle Adresse in die physische Adresse des Speichers. Dazu müssen Sie die MMU
Speicherverwaltungseinheit verwenden, um die Adresskonvertierung der virtuellen Adresse (Segmentseitentyp) zu segmentieren und zu paginieren. Auf den spezifischen Prozess der Segmentierung und Paging werden wir nicht eingehen Weitere Einzelheiten finden Sie in einem beliebigen Lehrbuch über Computerkompositionsprinzipien.
Adresskonvertierung für die Segmentseitenspeicherverwaltung
Linux
Der Kernel unterteilt den physischen Speicher in drei Verwaltungsbereiche:
DMA
内存区域。包含0MB~16MB之间的内存页框,可以由老式基于ISA
的设备通过DMA
Wird verwendet und direkt dem Adressraum des Kernels zugeordnet.
Normaler Speicherbereich. Enthält Speicherseitenrahmen zwischen 16 MB und 896 MB, normale Seitenrahmen, die direkt dem Adressraum des Kernels zugeordnet sind.
High-End-Speicherbereich. Enthält Speicherseitenrahmen über 896 MB, die nicht direkt zugeordnet sind. Auf diesen Teil des Speicherseitenrahmens kann durch permanente Zuordnung und temporäre Zuordnung zugegriffen werden.
Aufteilung des physischen Speicherbereichs
Auf den Benutzerprozess zugreifen kann, ist „Benutzerbereich“. Jeder Prozess verfügt über einen eigenen unabhängigen Benutzerbereich und der virtuelle Adressbereich beträgt 0x00000000
至 0xBFFFFFFF
Die Gesamtkapazität beträgt 3G.
Benutzerprozesse können normalerweise nur auf virtuelle Adressen im Benutzerbereich zugreifen und können nur auf den Kernelbereich zugreifen, wenn sie Inline-Operationen oder Systemaufrufe ausführen.
Der vom Prozess (ausgeführte Programm) belegte Benutzerraum wird nach dem Prinzip „Adressräume mit konsistenten Zugriffsattributen werden zusammen gespeichert“ in 5
verschiedene Speicherbereiche unterteilt. Zugriffseigenschaften beziehen sich auf „lesbar, beschreibbar, ausführbar usw.“
Codeausschnitt
Das Codesegment wird verwendet, um die Betriebsanweisungen der ausführbaren Datei und das Bild des ausführbaren Programms im Speicher zu speichern. Das Codesegment muss zur Laufzeit vor illegalen Änderungen geschützt werden, sodass nur Lesevorgänge zulässig sind und es nicht beschreibbar ist.
Datensegment
Das Datensegment wird zum Speichern initialisierter globaler Variablen in der ausführbaren Datei verwendet. Mit anderen Worten: Es speichert Variablen und globale Variablen, die vom Programm statisch zugewiesen werden.
BSS-Bereich
BSS
段包含了程序中未初始化的全局变量,在内存中 bss
Alle Segmente auf Null setzen.
Haufen heap
Der Heap wird zum Speichern von Speichersegmenten verwendet, die während der Ausführung des Prozesses dynamisch zugewiesen werden. Seine Größe ist nicht festgelegt und kann dynamisch erweitert oder reduziert werden. Wenn ein Prozess eine Funktion wie malloc aufruft, um Speicher zuzuweisen, wird der neu zugewiesene Speicher dynamisch zum Heap hinzugefügt (der Heap wird erweitert); wenn eine Funktion wie free zum Freigeben von Speicher verwendet wird, wird der freigegebene Speicher aus dem Heap entfernt (Der Haufen wird reduziert).
stack
deklarierten Variablen, statisch bedeutet, Variablen im Datensegment zu speichern). Darüber hinaus werden beim Aufruf einer Funktion auch deren Parameter auf den Stapel des Prozesses verschoben, der den Aufruf initiiert hat, und nach Abschluss des Aufrufs wird auch der Rückgabewert der Funktion wieder auf dem Stapel gespeichert. Aufgrund der First-In-Last-Out-Funktion des Stacks eignet sich der Stack besonders gut zum Speichern/Wiederherstellen der Anrufszene. In diesem Sinne können wir uns den Stapel als einen Speicherbereich vorstellen, der temporäre Daten speichert und austauscht. static
in der Architektur dehnt sich der Stapel nach unten und der Heap nach oben aus, die relativ zueinander sind. BSS
段、堆通常是被连续存储在内存中,在位置上是连续的,而代码段和栈往往会被独立存放。堆和栈两个区域在 i386
verwenden, um die Größe jedes Speicherbereichs des kompilierten Programms zu überprüfen: size
[lemon ~]# size /usr/local/sbin/sshd text data bss dec hexfilename 1924532 12412 4268962363840 2411c0/usr/local/sbin/sshd
umfasst Kernel-Image, physische Seitentabelle, Treiber usw., die im Kernel-Bereich ausgeführt werden. x86 32
位系统里,Linux 内核地址空间是指虚拟地址从 0xC0000000
开始到 0xFFFFFFFF
为止的高端内存地址空间,总计 1G
ist ein direkter Speicherzuordnungsbereich. Direct Memory Region
:从内核空间起始地址开始,最大896M
Die „lineare Adresse“ von 896 MB im direkten Zuordnungsbereich ist direkt mit der Vorderseite der „physikalischen Adresse“ verbunden 896MB
进行映射,也就是说线性地址和分配的物理地址都是连续的。内核地址空间的线性地址0xC0000001
所对应的物理地址为0x00000001
,它们之间相差一个偏移量PAGE_OFFSET = 0xC0000000
In diesem Bereich besteht eine lineare Konvertierungsbeziehung zwischen der linearen Adresse und der physischen Adresse. „Lineare Adresse = PAGE_OFFSET
+ 物理地址」也可以用 virt_to_phys()
Die Funktion wandelt die lineare Adresse im virtuellen Kernelraum in eine physische Adresse um.
Der lineare Adressbereich des Kernelraums reicht von 896 MB bis 1 GB, und der Adressbereich mit einer Kapazität von 128 MB ist der lineare Adressraum des High-End-Speichers. Warum wird er als linearer Adressraum des High-End-Speichers bezeichnet? Lass es mich dir erklären:
Wie bereits erwähnt, beträgt die Gesamtgröße des Kernelraums 1 GB, und die lineare Adresse von 896 MB, beginnend mit der Startadresse des Kernelraums, kann direkt einem Adressbereich mit einer physischen Adressgröße von 896 MB zugeordnet werden.
Machen Sie einen Schritt zurück: Auch wenn die lineare 1-GB-Adresse im Kernelraum einer physischen Adresse zugeordnet ist, kann sie nur maximal 1 GB des physischen Speicheradressbereichs adressieren.
Wie groß ist der Speicherstick, den Sie jetzt haben? Wachen Sie auf, es ist fast 2023 und der Speicher der meisten PCs ist größer als 1 GB!
Also hat der Kernelraum den letzten 128-MB-Adressbereich herausgenommen und ihn in die folgenden drei High-End-Speicherzuordnungsbereiche unterteilt, um den gesamten physischen Adressbereich abzudecken. Auf 64-Bit-Systemen besteht dieses Problem nicht, da der verfügbare lineare Adressraum viel größer ist als der installierbare Speicher.
vmalloc Region
该区域由内核函数vmalloc
来分配,特点是:线性空间连续,但是对应的物理地址空间不一定连续。vmalloc
Die physische Seite, die der zugewiesenen linearen Adresse entspricht, kann sich im Low-End-Speicher oder im High-End-Speicher befinden.
Persistent Kernel Mapping Region
该区域可访问高端内存。访问方法是使用 alloc_page (_GFP_HIGHMEM)
分配高端内存页或者使用kmap
ordnet den zugewiesenen High-End-Speicher diesem Bereich zu.
Fixing kernel Mapping Region
该区域和 4G 的顶端只有 4k 的隔离带,其每个地址项都服务于特定的用途,如 ACPI_BASE
usw.
Physische Speicherzuordnung des Kernel-Speicherplatzes
Oben gibt es viel zu besprechen, also überstürzen Sie sich nicht mit dem nächsten Abschnitt. Schauen wir uns vorher noch einmal an, was wir oben gesagt haben. Wenn Sie die obigen Kapitel sorgfältig lesen, habe ich hier ein weiteres Bild gezeichnet, und jetzt sollten Sie ein solches globales Bild der Speicherverwaltung im Kopf haben.
Vollständiges Bild des Kernel- und Benutzerraums
Damit der Kernel den virtuellen Speicher im System verwalten kann, müssen Speicherverwaltungsoperationen wie „Zuweisung, Freigabe usw.“ von ihm abstrahiert werden Strukturen, die den virtuellen Speicherbereich verwalten.
Im vorherigen Kapitel „Prozess und Speicher“ haben wir erwähnt, dass der Linux-Prozess in 5 verschiedene Speicherbereiche unterteilt werden kann, nämlich: Codesegment, Datensegment, BSS
、堆、栈,内核管理这些区域的方式是,将这些内存区域抽象成vm_area_struct
Speicherverwaltungsobjekt.
vm_area_struct
是描述进程地址空间的基本管理单元,一个进程往往需要多个vm_area_struct
来描述它的用户空间虚拟地址,需要使用「链表」和「红黑树」来组织各个vm_area_struct
.
Verknüpfte Listen werden verwendet, wenn alle Knoten durchlaufen werden müssen, während sich Rot-Schwarz-Bäume zum Auffinden bestimmter Speicherbereiche im Adressraum eignen. Der Kernel nutzt beide Datenstrukturen, um eine hohe Leistung für verschiedene Operationen auf Speicherbereichen zu erreichen.
Adressverwaltungsmodell des User-Space-Prozesses:
wm_arem_struct
Im Kapitel zum Kernelraum haben wir den „dynamischen Speicherzuordnungsbereich“ erwähnt. Die physische Seite, die der von der Kernelfunktion zugewiesenen linearen Adresse entspricht, kann sich im Low-End-Speicher oder im High-End-Speicher befinden. vmalloc
来分配,特点是:线性空间连续,但是对应的物理地址空间不一定连续。vmalloc
große Anti-Kreuzungs-Freibereichstrennwand. vmalloc
分配的地址则限于vmalloc_start
与vmalloc_end
之间。每一块vmalloc
分配的内核虚拟内存都对应一个vm_struct
结构体,不同的内核空间虚拟地址之间有4k
Dynamische Speicherzuordnung
Speicherverwaltung ist ein sehr komplexes System. Was in diesem Artikel beschrieben wird, ist nur die Spitze des Eisbergs. Er zeigt Ihnen das Gesamtbild der Speicherverwaltung aus einer Makroperspektive, aber im Allgemeinen reicht dieses Wissen aus, wenn Sie chatten Mit dem Interviewer hoffe ich natürlich auch, dass jeder durch die Lektüre tiefere Prinzipien verstehen kann. Linux
Ich habe bei der Erstellung dieses Artikels auch viele Beispieldiagramme gezeichnet, die als Wissensindex verwendet werden können. Ich persönlich finde, dass das Betrachten von Bildern klarer ist als das Lesen von Text. Sie können sie erhalten, indem Sie auf „Speicher“ antworten Management“ im Hintergrund meines offiziellen Accounts „Backend Technology School“ Hochauflösende Originale dieser Bilder.
Alte Regel, der Zweck des Artikels besteht darin, das Wissen über technische Artikel weiterzugeben, um die Richtigkeit des Artikels so weit wie möglich sicherzustellen Gerne können wir darauf hinweisen. Lassen Sie uns gemeinsam aus der Diskussion lernen. Das ist alles für den heutigen Technologieaustausch. Wir sehen uns in der nächsten Ausgabe.Das obige ist der detaillierte Inhalt vonHören Sie auf zu sagen, dass Sie die Linux-Speicherverwaltung nicht verstehen, 10 Bilder werden es Ihnen klar machen!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!