


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.
Virtuelle Adresse
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.
Vorteile der virtuellen Adresse
- Verhindern Sie, dass Benutzer direkt auf physische Speicheradressen zugreifen, verhindern Sie destruktive Vorgänge und schützen Sie das Betriebssystem.
- Jedem Prozess werden 4 GB virtueller Speicher zugewiesen, sodass Benutzerprogramme einen größeren Adressraum als den tatsächlichen physischen Speicher nutzen können.
Der virtuelle Adressraum des 4-GB-Prozesses ist in zwei Teile unterteilt: „Benutzerraum“ und „Kernelraum“.

Benutzerbereich Kernelbereich
Physische Adresse
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:
ZONE_DMA
DMA
内存区域。包含0MB~16MB之间的内存页框,可以由老式基于ISA
的设备通过DMA
Wird verwendet und direkt dem Adressraum des Kernels zugeordnet.
ZONE_NORMAL
Normaler Speicherbereich. Enthält Speicherseitenrahmen zwischen 16 MB und 896 MB, normale Seitenrahmen, die direkt dem Adressraum des Kernels zugeordnet sind.
ZONE_HIGHMEM
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
Benutzerbereich
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.
Prozess und Gedächtnis
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).
- Stapel
Der Stapel ist eine vom Benutzer vorübergehend erstellte lokale Variable zum Speichern des Programms, dh der in der Funktion definierten Variablen (jedoch nicht einschließlich der durchstack
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
Kernelraum
Die Kapazität von umfasst Kernel-Image, physische Seitentabelle, Treiber usw., die im Kernel-Bereich ausgeführt werden. x86 32
位系统里,Linux 内核地址空间是指虚拟地址从 0xC0000000
开始到 0xFFFFFFFF
为止的高端内存地址空间,总计 1G

Direkter Kartierungsbereich
Direkter Zuordnungsbereich Der Kernelraum-Adressbereich von 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.
Linearer High-End-Speicheradressraum
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.
Dynamischer Speicherzuordnungsbereich
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.
Permanenter Speicherzuordnungsbereich
Die FunktionPersistent Kernel Mapping Region
该区域可访问高端内存。访问方法是使用 alloc_page (_GFP_HIGHMEM)
分配高端内存页或者使用kmap
ordnet den zugewiesenen High-End-Speicher diesem Bereich zu.
Fester Kartenbereich
Fixing kernel Mapping Region
该区域和 4G 的顶端只有 4k 的隔离带,其每个地址项都服务于特定的用途,如 ACPI_BASE
usw.

Physische Speicherzuordnung des Kernel-Speicherplatzes
Rezension
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
Speicherdatenstruktur
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.
Benutzerspeicher-Datenstruktur
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
Kernelraum weist die Speicherdatenstruktur dynamisch zu
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

Um es zusammenzufassen
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!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen











Die fünf grundlegenden Komponenten des Linux -Systems sind: 1. Kernel, 2. Systembibliothek, 3. System Utilities, 4. Grafische Benutzeroberfläche, 5. Anwendungen. Der Kernel verwaltet Hardware -Ressourcen, die Systembibliothek bietet vorkompilierte Funktionen, Systemversorgungsunternehmen werden für die Systemverwaltung verwendet, die GUI bietet visuelle Interaktion und Anwendungen verwenden diese Komponenten, um Funktionen zu implementieren.

Um die Git -Repository -Adresse anzuzeigen, führen Sie die folgenden Schritte aus: 1. Öffnen Sie die Befehlszeile und navigieren Sie zum Repository -Verzeichnis; 2. Führen Sie den Befehl "git remote -v" aus; 3.. Zeigen Sie den Repository -Namen in der Ausgabe und der entsprechenden Adresse an.

VS Code One-Step/Nächster Schritt Verknüpfungsschlüsselnutzung: Einschritt (rückwärts): Windows/Linux: Strg ←; macOS: CMD ← Nächster Schritt (vorwärts): Windows/Linux: Strg →; macos: cmd →

Zu den Hauptanwendungen von Linux gehören: 1. Server -Betriebssystem, 2. Eingebettes System, 3. Desktop -Betriebssystem, 4. Entwicklungs- und Testumgebung. Linux zeichnet sich in diesen Bereichen aus und bietet Stabilität, Sicherheits- und effiziente Entwicklungstools.

Obwohl Notepad den Java -Code nicht direkt ausführen kann, kann er durch Verwendung anderer Tools erreicht werden: Verwenden des Befehlszeilencompilers (JAVAC), um eine Bytecode -Datei (Dateiname.class) zu generieren. Verwenden Sie den Java Interpreter (Java), um Bytecode zu interpretieren, den Code auszuführen und das Ergebnis auszugeben.

Es gibt sechs Möglichkeiten, Code in Sublime auszuführen: durch Hotkeys, Menüs, Build-Systeme, Befehlszeilen, Standard-Build-Systeme und benutzerdefinierte Build-Befehle und führen Sie einzelne Dateien/Projekte aus, indem Sie mit der rechten Maustaste auf Projekte/Dateien klicken. Die Verfügbarkeit des Build -Systems hängt von der Installation des erhabenen Textes ab.

Um Laravel zu installieren, befolgen Sie die folgenden Schritte: Installieren Sie den Komponisten (für MacOS/Linux und Windows). Installieren Sie LaRavel Installer. Erstellen Sie eine neue Projektstart -Service -Access -Anwendung (URL: http://127.0.0.1:8000).

Visual Studio Code (VSCODE) ist ein plattformübergreifender, Open-Source-Editor und kostenloser Code-Editor, der von Microsoft entwickelt wurde. Es ist bekannt für seine leichte, Skalierbarkeit und Unterstützung für eine Vielzahl von Programmiersprachen. Um VSCODE zu installieren, besuchen Sie bitte die offizielle Website, um das Installateur herunterzuladen und auszuführen. Bei der Verwendung von VSCODE können Sie neue Projekte erstellen, Code bearbeiten, Code bearbeiten, Projekte navigieren, VSCODE erweitern und Einstellungen verwalten. VSCODE ist für Windows, MacOS und Linux verfügbar, unterstützt mehrere Programmiersprachen und bietet verschiedene Erweiterungen über den Marktplatz. Zu den Vorteilen zählen leicht, Skalierbarkeit, umfangreiche Sprachunterstützung, umfangreiche Funktionen und Versionen
