


Vertiefendes Verständnis des Linux-Kernels: die Zuordnungsbeziehung zwischen virtuellem Adressraum und physischem Speicher
Videospeicherzuordnung
Chemischer Speicher wird zusammenfassend als adressierbarer und dynamischer Direktzugriffsspeicher (DRAM) bezeichnet. Nur der Kernel hat direkten Zugriff auf den Mathematikspeicher.
Der Linux-Kernel stellt für jeden Prozess einen unabhängigen virtuellen Adressraum bereit, dieser Adressraum ist jedoch kontinuierlich. Auf diese Weise kann der Prozess problemlos auf den Videospeicher, genauer gesagt auf den virtuellen Videospeicher, zugreifen. Das Innere des virtuellen Adressraums ist in zwei Teile unterteilt: Kernelraum und Benutzerraum.
Wenn sich der Prozess im Benutzermodus befindet, kann er nur auf den Benutzerraumspeicher zugreifen. Erst nach dem Aufrufen des Kernelmodus kann er auf den Kernelraumspeicher zugreifen. Tatsächlich umfasst der Adressraum jedes Prozesses den Kernelraum, dieser Kernelraum ist jedoch mit demselben chemischen Speicher verknüpft, dh gemeinsam genutzten dynamischen Linkbibliotheken, gemeinsam genutztem Grafikspeicher usw. Wenn der Prozess in den Kernel-Status wechselt, kann er problemlos auf den Kernel-Speicher zugreifen.
Nicht dem gesamten virtuellen Speicher wird chemischer Speicher zugewiesen. Der zugewiesene chemische Speicher wird jedoch durch Speicherzuordnung verwaltet. Bei der Videospeicherzuordnung werden virtuelle Videospeicheradressen chemischen Videospeicheradressen zugeordnet. Um die Videospeicherzuordnung abzuschließen, verwaltet der Kernel für jeden Prozess eine Seitentabelle, um die Zuordnungsbeziehung zwischen virtuellen Adressen und chemischen Adressen aufzuzeichnen.
Die Seitentabelle wird tatsächlich in der MMU der Videospeicherverwaltungseinheit der CPU gespeichert. Auf diese Weise kann der Prozessor unter normalen Umständen direkt über die Hardware herausfinden, auf welchen Videospeicher zugegriffen werden soll. Wenn die virtuelle Adresse, auf die der Prozess zugreift, nicht in der Seitentabelle gefunden werden kann, bildet das System eine Seitenfehlerausnahme, betritt den Kernelbereich, um chemischen Speicher zuzuweisen, aktualisiert die Prozessseitentabelle und kehrt schließlich zum Benutzerbereich zurück, um fortzufahren Ablauf des Prozesses.
Der TLB (TranslationLookasideBuffer, Translation Lookaside Buffer) beim CPU-Kontextwechsel ist der Cache der Seitentabelle in der MMU. Da der virtuelle Adressraum des Prozesses unabhängig vom Linux-System ist und die TLB-Zugriffsrate viel schneller ist als die der MMU, kann die TLB-Cache-Nutzung durch Reduzierung des Kontextwechsels des Prozesses und der Anzahl der TLB-Aktualisierungen verringert werden Dadurch wird die Speicherzugriffsleistung der CPU verbessert.
MMU gibt die kleinste Einheit der Videospeicherzuordnung an, nämlich eine Seite, normalerweise 4 KB groß. Auf diese Weise muss jeder Videospeicherzuordnung ein Videospeicherplatz von 4 KB oder einem ganzzahligen Vielfachen von 4 KB zugeordnet werden.
Eine 4-KB-Seite führt dazu, dass die gesamte Seitentabelle sehr groß ist. Beispielsweise sind 4 GB/4 KB = mehr als 1 Million Seitentabelleneinträge in einem 32-Bit-System. Um das Problem zu vieler Seitentabelleneinträge zu lösen, bietet Linux zwei Mechanismen, nämlich mehrstufige Seitentabellen und große Seiten (HugePage).
Die mehrstufige Seitentabelle dient dazu, den Videospeicher zur Verwaltung in Blöcke zu unterteilen und die ursprüngliche Zuordnungsbeziehung in Blockindex und Schiefe innerhalb des Blocks zu ändern. Da im Allgemeinen nur ein sehr kleiner Teil des virtuellen Videospeicherplatzes verwendet wird, speichert die mehrstufige Seitentabelle nur die verwendeten Blöcke, wodurch die Anzahl der Seitentabelleneinträge erheblich reduziert werden kann. Linux verwendet eine vierstufige Seitentabelle zum Verwalten von Videospeicherseiten. Die ersten vier Einträge werden zur Auswahl der Seite verwendet, und der letzte Index gibt den Versatz innerhalb der Seite an.
Eine große Seite ist ein größerer Videospeicherblock als eine normale Seite. Übliche Größen sind 2 MB und 1 GB. Große Seiten werden im Allgemeinen in Prozessen verwendet, die viel Videospeicher beanspruchen, wie z. B. Oracle, DPDK usw.
Durch diesen Mechanismus kann der Prozess unter der Zuordnung der Seitentabelle über die virtuelle Adresse auf den mathematischen Speicher zugreifen.
Virtuelle Videospeicherplatzverteilung
Oben ist der Kernel-Space, unten ist der User-Space-Speicher und der User-Space ist in mehrere verschiedene Segmente unterteilt
Videospeicher im Benutzerbereich, es gibt 5 verschiedene Videospeichersegmente von niedrig bis hoch
1. Schreibgeschützter Abschnitt, einschließlich Code und Konstanten usw.
2. Datensegmente, einschließlich Panoramavariablen usw.
3. Der Heap, einschließlich des dynamisch zugewiesenen Videospeichers, beginnt bei einer niedrigen Adresse und nimmt nach unten ab
4. Dateizuordnungssegmente, einschließlich dynamischer Bibliotheken, gemeinsam genutzter Videospeicher usw., beginnen bei hohen Adressen und nehmen nach oben ab
5. Stapel, einschließlich lokaler Variablen und Funktionsaufrufkontext usw. Die Größe des Stapels ist fest, normalerweise 8 MB
Unter diesen 5 Videospeichersegmenten werden der Heap- und der Datei-zugeordnete Videospeicher dynamisch zugewiesen. Mit malloc oder mmap() der C-Standardbibliothek können Sie beispielsweise Videospeicher in den Heap- bzw. Datei-zugeordneten Segmenten dynamisch zuweisen. Die Videospeicherverteilung von 64-Bit-Systemen ist ähnlich, aber der Videospeicherplatz ist viel größer
Zuweisung und Recycling des Videospeichers
malloc() ist eine von der C-Standardbibliothek bereitgestellte Videospeicherzuweisungsfunktion. Entsprechend den Systemaufrufen gibt es zwei Implementierungsmethoden, nämlich brk() und mmap().
Für kleine Videospeicherblöcke (größer als 128 KB) verwendet die C-Standardbibliothek brk () zum Zuweisen, dh der Videospeicher wird durch Verbinden der oberen Position des Heaps zugewiesen. Dieser Videospeicher wird nicht sofort nach seiner Freigabe an das System zurückgegeben, sondern zwischengespeichert, sodass er wiederverwendet werden kann.
Für große Videospeicherblöcke (weniger als 128 KB) verwenden Sie zum Zuweisen direkt die Videospeicherzuordnung mmap (), dh suchen Sie im Dateizuordnungsabschnitt nach einem freien Videospeicher und weisen Sie ihn zu.
Die Gemeinsamkeiten und Unterschiede zwischen diesen beiden Methoden:
Das Caching der brk()-Methode kann das Auftreten von Seitenfehlerausnahmen reduzieren und die Effizienz des Videospeicherzugriffs verbessern. Da diese Art von Videospeicher jedoch nicht an das System zurückgegeben wird, führt die häufige Zuweisung und Freigabe von Videospeicher zu einer Fragmentierung des Videospeichers, wenn der Videospeicher ausgelastet ist.
Der von der mmap()-Methode zugewiesene Videospeicher wird bei Freigabe direkt an das System zurückgegeben, sodass jedes Mal, wenn mmap auftritt, eine Seitenfehlerausnahme auftritt. Wenn der Videospeicher ausgelastet ist, führt die häufige Zuweisung des Videospeichers zu einer großen Anzahl von Seitenfehlerausnahmen, wodurch die Verwaltungslast des Kernels verringert wird. Dies ist auch der Grund, warum malloc mmap nur für große Videospeicherblöcke verwendet.
Es ist zu beachten, dass bei diesen beiden Aufrufen der Videospeicher nicht tatsächlich zugewiesen wird. Diese Art von Videospeicher wird nur zugewiesen, wenn zum ersten Mal darauf zugegriffen wird. Das heißt, sie gelangt über eine Seitenfehlerausnahme in den Kernel, und dann weist der Kernel den Videospeicher zu.
Im Allgemeinen verwendet Linux ein Buddy-System, um die Zuweisung des Videospeichers zu verwalten. Wie oben erwähnt, wird diese Art von Grafiken in der MMU in Seiteneinheiten verwaltet. Das Partnersystem verwaltet auch den Grafikspeicher in Seiteneinheiten und reduziert die Fragmentierung des Grafikspeichers durch die Zusammenführung benachbarter Seiten (z. B. Fragmentierung des Videospeichers durch die brk-Methode).
Aber im tatsächlichen Systembetrieb gibt es eine große Anzahl von Objekten, die kleiner als eine Seite sind, beispielsweise weniger als 1 KB. Wenn ihnen separate Seiten zugewiesen werden, wird viel Videospeicher verschwendet.
Im Benutzerbereich Linux-Benutzer zugewiesener Bereich wird der von malloc über brk() zugewiesene Videospeicher bei Freigabe nicht sofort an das System zurückgegeben, sondern zwischengespeichert und erneut verwendet.
Im Kernelbereich verwaltet Linux kleinen Videospeicher über den Slab Allocator. Sie können sich Slab als einen auf dem Partnersystem aufgebauten Cache vorstellen. Seine Hauptfunktion besteht darin, kleine Objekte im Kernel zuzuweisen und freizugeben.
Recycling des Videospeichers: Wenn Sie den Videospeicher nur zuweisen, ohne ihn freizugeben, führt dies zu Videospeicherverlusten und verbraucht sogar den Videospeicher des Systems. Nachdem die Anwendung den Videospeicher aufgebraucht hat, muss sie daher immer noch free() oder unmap() aufrufen, um den ungenutzten Videospeicher freizugeben. Tatsächlich lässt das System nicht zu, dass ein Prozess den gesamten Videospeicher belegt. Wenn festgestellt wird, dass der Videospeicher knapp ist, verwendet das System auch eine Reihe von Mechanismen, um den Videospeicher zurückzugewinnen, z. B. die folgenden drei Formen:
(1) Recyceln Sie den Cache. Verwenden Sie beispielsweise den LRU-Algorithmus (LeastRecentlyUsed), um die zuletzt verwendeten Videospeicherseiten wiederzuverwenden.
(2) Recyceln Sie den selten genutzten Videospeicher und übertragen Sie den selten genutzten Videospeicher über die Swap-Partition (Swap) direkt auf das Laufwerk C. Obwohl Swap einen Teil des C-Laufwerksspeichers als Videospeicher verwendet. Es kann Daten, die vom Prozess vorübergehend nicht verwendet werden, im Laufwerk C speichern (dieser Vorgang wird als Auslagern bezeichnet). Wenn der Prozess auf diese Videospeicher zugreift, kann er diese Daten dann vom Laufwerk C in den Videospeicher lesen sogenanntes Einwechseln). Swap erhöht den verfügbaren Videospeicher des Systems, aber im Allgemeinen erfolgt Swap nur, wenn der Videospeicher nicht ausreicht. Und da die Lese- und Schreibgeschwindigkeit des Laufwerks C viel langsamer ist als die des Videospeichers, führt Swap zu einer erheblichen Leistung des Videospeichers Probleme.
(3) Prozesse beenden, wenn der Videospeicher knapp ist, beendet das System die Prozesse, die viel Videospeicher belegen, direkt über OOM (OutofMemory, ein Schutzmechanismus des Kernels). OOM überwacht die Speichernutzung von Prozessen, verwendet jedoch oom_score, um die Speichernutzung jedes Prozesses zu bewerten:
Je mehr Grafikspeicher von einem Prozess verbraucht wird, desto höher ist der oom_score
Je mehr CPU ein Prozess beansprucht, desto kleiner ist der oom_score.
Auf diese Weise gilt: Je größer der oom_score des Prozesses, desto mehr Videospeicher wird verbraucht und desto einfacher ist es, ihn durch OOM zu töten, was das System besser schützen kann.
Tatsächlich kann der Administrator für tatsächliche Arbeitsanforderungen automatisch den oom_adj des Prozesses über das /proc-Dateisystem festlegen und so den oom_score des Prozesses anpassen. Der Bereich von oom_adj ist [-17,15]. Je größer der Wert, desto einfacher ist es, den Prozess durch OOM zu beenden; je kleiner der Wert, desto unwahrscheinlicher ist es, dass der Prozess durch OOM beendet wird ist streng verboten. Wenn Sie den folgenden Befehl verwenden, können Sie den oom_adj des sshd-Prozesses auf -16 anpassen, sodass der sshd-Prozess nicht so einfach von OOM beendet wird.
echo-16>/proc/$(pidofsshd)/oom_adj
Puffer und Cache
Puffer und Cache im kostenlosen Befehl bedeuten beide Cache, aber ihre Verwendung ist unterschiedlich
1. Puffer ist der vom Kernel-Puffer verwendete Videospeicher, entsprechend dem Pufferwert in /proc/meminfo
2. Cache ist der vom Kernel-Seiten-Cache und Slab verwendete Videospeicher. Er entspricht der Summe aus Cache und SReclaimable in /proc/meminfo
Einfach ausgedrückt ist Puffer ein Cache für Laufwerksdaten und Cache ein Cache für Dateidaten. Sie werden sowohl in Leseanforderungen als auch in Schreibanforderungen verwendet.
Cache (Cache) ist aus Sicht der CPU darauf ausgelegt, die Datenaustauschrate zwischen der CPU und dem Videospeicher zu erhöhen, wie z. B. den Cache der ersten Ebene, den Cache der zweiten Ebene und den Cache der dritten Ebene, die wir normalerweise sehen. Die von der CPU zum Ausführen des Programms verwendeten Anweisungen und Daten zielen alle auf den Videospeicher ab, dh sie werden aus dem Videospeicher abgerufen. Da die Lese- und Schreibgeschwindigkeit des Videospeichers langsam ist, wird der Cache zwischen CPU und Videospeicher reduziert, um die Datenaustauschrate zwischen CPU und Videospeicher zu erhöhen. Seine Geschwindigkeit ist schneller als die des Videospeichers Der vom Linux-Benutzer zugewiesene Speicherplatz ist hoch und die Kosten sind hoch. Da in der CPU nicht zu viele integrierte Schaltkreise integriert werden können, ist der Cache normalerweise relativ klein. Um die Geschwindigkeit weiter zu verbessern, haben Intel und andere Unternehmen das Niveau reduziert 2-Cache und sogar der Level-5-Cache basieren auf dem Prinzip der Programmlokalität, bei dem die Befehle und Daten, auf die zugegriffen wird, häufig in einem bestimmten Block konzentriert sind In den Cache muss die CPU nicht auf den Videospeicher zugreifen, was die Zugriffsrate erhöht. Wenn im Cache kein Inhalt vorhanden ist, den die CPU benötigt, muss dennoch auf den Videospeicher zugegriffen werden.
Aus der Perspektive des Videospeicher-Lesens und des C-Disk-Lesens kann Cache als das Betriebssystem verstanden werden, das mehr Videospeicher verwendet, um Daten zwischenzuspeichern, auf die erneut zugegriffen werden kann, um eine höhere Leseeffizienz zu erreichen.Puffer sollen die Datenaustauschrate zwischen Videospeicher und Festplatte (oder anderen E/A-Geräten) erhöhen. Zentralisieren Sie verstreute Schreibvorgänge, um die Fragmentierung des C-Laufwerks und wiederholte Festplattensuchen zu reduzieren und so die Systemleistung zu verbessern. Linux verfügt über einen Daemon-Prozess, der regelmäßig den Pufferinhalt löscht (d. h. auf das Laufwerk C schreibt), und der Puffer kann auch automatisch über den Synchronisierungsbefehl gelöscht werden.
Einfach ausgedrückt: Der Puffer wird gerade auf das Laufwerk C geschrieben und der Cache wird vom Laufwerk C gelesen. Puffer werden von verschiedenen Prozessen zugewiesen und in Aspekten wie Eingabewarteschlangen verwendet. Ein einfaches Gegenbeispiel ist, dass ein Prozess das Einlesen mehrerer Arrays erfordert. Bevor alle Arrays vollständig eingelesen sind, legt der Prozess die ursprünglich gelesenen Arrays in den Puffer und speichert sie.
Cache wird häufig für E/A-Anfragen auf dem Laufwerk C verwendet. Wenn mehrere Prozesse auf eine Datei zugreifen möchten, wird die Datei zwischengespeichert, um den letzten Zugriff zu erleichtern, was die Systemleistung verbessern kann.
Das obige ist der detaillierte Inhalt vonVertiefendes Verständnis des Linux-Kernels: die Zuordnungsbeziehung zwischen virtuellem Adressraum und physischem Speicher. 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

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

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



Effizientes Zählen von Dateien und Ordnern unter Linux: Eine umfassende Anleitung Zu wissen, wie Sie Dateien und Verzeichnisse in Linux schnell zählen, ist für Systemadministratoren und alle, die große Datensätze verwalten, von entscheidender Bedeutung. Diese Anleitung zeigt die Verwendung von Simple Command-L

Effizientes Verwalten von Benutzerkonten und Gruppenmitgliedschaften ist für die Linux/UNIX -Systemverwaltung von entscheidender Bedeutung. Dadurch wird die richtige Ressourcen- und Datenzugriffskontrolle gewährleistet. In diesem Tutorial wird beschrieben, wie Sie einen Benutzer zu mehreren Gruppen in Linux- und UNIX -Systemen hinzufügen. Wir

Tool zur Begründung des Flatpak -Anwendungsberechtigungsmanagements: FlatSeal -Benutzerhandbuch Flatpak ist ein Tool, das die Verteilung der Linux -Software vereinfacht und die Anwendungen sicher in einer virtuellen Sandbox verkauft werden, sodass Benutzer Anwendungen ohne Stammberechtigungen ausführen können, ohne die Systemsicherheit zu beeinträchtigen. Da sich Flatpak-Anwendungen in dieser Sandbox-Umgebung befinden, müssen sie Berechtigungen anfordern, um auf andere Teile des Betriebssystems, Hardware-Geräte (wie Bluetooth, Netzwerk usw.) und Sockets (wie Pulsaudio, SSH-Auth, Cups usw.) zugreifen zu können. Mit dieser Anleitung können Sie Flatpak einfach mit FlatSeal unter Linux konfigurieren

Linux -Kernel ist die Kernkomponente eines GNU/Linux -Betriebssystems. Es wurde 1991 von Linus Torvalds entwickelt und ist ein freier, offener, monolithischer, modularer und Multitasking-Unix-ähnlicher Kernel. In Linux ist es möglich, mehrere Kernel auf einem Gesang zu installieren

In diesem kurzen Leitfaden wird erläutert, wie das indische Rupie -Symbol in Linux -Betriebssystemen eingeben. Neulich wollte ich in einem Word -Dokument "indisches Rupie -Symbol (£) eingeben. Meine Tastatur enthält ein Rupie -Symbol, aber ich weiß nicht, wie ich es eingeben soll. Nach

Wollten Sie schon immer Ihre Lieblingsvideos aus dem Internet retten? Egal, ob es sich um ein lustiges Katzenvideo oder ein Tutorial handelt, das Sie später sehen möchten, YT-DLP ist hier, um zu helfen! In diesem umfassenden YT-DLP-Tutorial erklären wir, was YT-DLP ist, wie man i installiert

Linux wird am besten als Serververwaltung, eingebettete Systeme und Desktop -Umgebungen verwendet. 1) In der Serververwaltung wird Linux verwendet, um Websites, Datenbanken und Anwendungen zu hosten und Stabilität und Zuverlässigkeit bereitzustellen. 2) In eingebetteten Systemen wird Linux aufgrund seiner Flexibilität und Stabilität in Smart Home und Automotive Electronic Systems häufig verwendet. 3) In der Desktop -Umgebung bietet Linux reichhaltige Anwendungen und eine effiziente Leistung.

Wenn Sie mit Airdrop vertraut sind, wissen Sie, dass es sich um eine beliebte Funktion handelt, die von Apple Inc. entwickelt wurde und die eine nahtlose Dateiübertragung zwischen unterstützten Macintosh-Computern und iOS-Geräten mit Wi-Fi und Bluetooth ermöglicht. Wenn Sie jedoch Linux und fehlende O verwenden
