


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!

Der Kern des Linux -Betriebssystems ist die Befehlszeilenschnittstelle, die verschiedene Operationen über die Befehlszeile ausführen kann. 1. Datei- und Verzeichnisoperationen verwenden LS, CD, MKDIR, RM und andere Befehle, um Dateien und Verzeichnisse zu verwalten. 2. Benutzer- und Berechtigungsverwaltung sorgt für die Systemsicherheit und die Ressourcenzuweisung über UserAdd, PASSWD, CHMOD und andere Befehle. 3. Process Management verwendet PS, Kill und andere Befehle, um Systemprozesse zu überwachen und zu steuern. 4. Netzwerkoperationen umfassen Ping, IFConfig, SSH und andere Befehle zum Konfigurieren und Verwalten von Netzwerkverbindungen. 5. Systemüberwachung und Wartung Verwenden Sie Befehle wie Top, DF, DU, um den Betriebsstatus und die Ressourcennutzung des Systems zu verstehen.

Einführung Linux ist ein leistungsstarkes Betriebssystem, das aufgrund seiner Flexibilität und Effizienz von Entwicklern, Systemadministratoren und Stromnutzern bevorzugt wird. Die Verwendung langer und komplexer Befehle kann jedoch mühsam und äh sein

Linux eignet sich für Server, Entwicklungsumgebungen und eingebettete Systeme. 1. Als Serverbetriebssystem ist Linux stabil und effizient und wird häufig zur Bereitstellung von Anwendungen mit hoher Konreise verwendet. 2. Als Entwicklungsumgebung bietet Linux effiziente Befehlszeilen -Tools und Paketmanagementsysteme, um die Entwicklungseffizienz zu verbessern. 3. In eingebetteten Systemen ist Linux leicht und anpassbar und für Umgebungen mit begrenzten Ressourcen geeignet.

Einführung: Sicherung der digitalen Grenze mit Linux-basierten ethischen Hacking In unserer zunehmend miteinander verbundenen Welt ist die Cybersicherheit von größter Bedeutung. Ethische Hacking- und Penetrationstests sind von entscheidender Bedeutung, um Schwachstellen proaktiv zu identifizieren und zu mildern

Zu den Methoden für das grundlegende Linux -Lernen von Grund zu Grund gehören: 1. Verstehen Sie das Dateisystem und die Befehlszeilenschnittstelle, 2. Master Basic -Befehle wie LS, CD, MKDIR, 3. Lernen Sie Dateivorgänge wie Erstellen und Bearbeiten von Dateien, 4. Erklären Sie fortgeschrittene Verwendung wie Pipelines und GREP -Befehle, 5.

Linux wird häufig in Servern, eingebetteten Systemen und Desktopumgebungen verwendet. 1) Im Serverfeld ist Linux aufgrund seiner Stabilität und Sicherheit eine ideale Wahl für das Hosting von Websites, Datenbanken und Anwendungen geworden. 2) In eingebetteten Systemen ist Linux für seine hohe Anpassung und Effizienz beliebt. 3) In der Desktop -Umgebung bietet Linux eine Vielzahl von Desktop -Umgebungen, um den Anforderungen verschiedener Benutzer gerecht zu werden.

Die Nachteile von Linux umfassen Benutzererfahrung, Softwarekompatibilität, Hardwareunterstützung und Lernkurve. 1. Die Benutzererfahrung ist nicht so freundlich wie Windows oder MacOS und basiert auf der Befehlszeilenschnittstelle. 2. Die Softwarekompatibilität ist nicht so gut wie andere Systeme und es fehlen native Versionen vieler kommerzieller Software. 3. Die Hardware -Unterstützung ist nicht so umfassend wie Windows, und die Treiber können manuell zusammengestellt werden. 4. Die Lernkurve ist steil, und die Mastering -Befehlszeilenvorgänge erfordert Zeit und Geduld.

Linuxisnothardtolearn, ButthedifficultyDependyourbackgroundGoAs.ForthoseWithexperience, insbesondere Command-Linefamiliarität, Linuxisaneasytransition


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

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

SAP NetWeaver Server-Adapter für Eclipse
Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

SecLists
SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

Dreamweaver CS6
Visuelle Webentwicklungstools

MantisBT
Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.