


Detaillierte Erläuterung des Linux-Benutzerraums und des Kernelraums
Empfohlen: „Linux-Video-Tutorial“
1. Einführung
- Linux-Betriebssystem und -Treiber werden im Kernel-Bereich ausgeführt, und Anwendungen werden im Benutzerbereich ausgeführt. Die beiden können nicht einfach Zeiger zum Übertragen von Daten verwenden. Aufgrund des von Linux verwendeten virtuellen Speichermechanismus können Benutzerbereichsdaten ausgelagert werden, wenn der Kernelbereich Benutzerbereichszeiger verwendet. Die Speicherzuordnung des Benutzerraums übernimmt den Segmentseitentyp, während der Kernelraum seine eigenen Regeln hat. Dieser Artikel zielt darauf ab, die Adresszuordnung des Kernelraums zu untersuchen.
- OS weist jedem Prozess einen unabhängigen, kontinuierlichen virtuellen Adressspeicherplatz zu. Die Größe beträgt im Allgemeinen 4G (32-Bit-Betriebssystem, also 2 hoch 32), wobei der Speicherplatz mit hohem Adresswert zugewiesen wird Das Betriebssystem belegt 1 GB, das Betriebssystem des Fensters belegt 2 GB. Der verbleibende Speicheradressraum wird dem Prozess zugewiesen.
- Normalerweise ist der virtuelle Adressraum des 32-Bit-Linux-Kernels in 0 bis 3 GB als Benutzerbereich und 3 bis 4 GB als Kernelbereich unterteilt (beachten Sie, dass die lineare Adresse, die der Kernel verwenden kann, nur 1 GB beträgt). Beachten Sie, dass dies die Aufteilung des 32-Bit-Kernel-Adressraums ist und die Aufteilung des 64-Bit-Kernel-Adressraums unterschiedlich ist.
- Prozessadressraum 0 ~ 4G
- Der Prozess kann im Benutzermodus nur auf 0 ~ 3G zugreifen und nur auf 3G ~ 4G, wenn er in den Kernelmodus wechselt.
- Der Prozess wechselt durch in den Kernelmodus Systemaufruf
- Der 3G~4G-Teil des virtuellen Raums jedes Prozesses ist derselbe
- Der Prozess, der aus dem Benutzermodus in den Kernel-Status wechselt, führt nicht zu Änderungen in CR3, sondern zu Änderungen im Stapel
2. High-End-Speicher des Linux-Kernels
1. Ursprung
Wenn der Kernelmodulcode oder -thread auf den Speicher zugreift, sind die Speicheradressen im Code alle logische Adressen und entsprechen der tatsächlichen physischen Speicheradresse, eine Eins-zu-Eins-Zuordnung B. ist die physische Adresse, die der logischen Adresse 0xc0000003 entspricht, 0 × 3, die physische Adresse, die 0xc0000004 entspricht, ist 0 × 4, ..., die Beziehung zwischen der logischen Adresse und der physischen Adresse ist Physische Adresse = logische Adresse – 0xC0000000: Dies ist die Adressübersetzungsbeziehung des Kernel-Adressraums. Achten Sie auf die virtuelle Adresse des Kernels. Die virtuelle Adresse befindet sich am „oberen Ende“, die von ihr abgebildete physische Speicheradresse jedoch am unteren Ende .
Physische Speicheradresse | |
0×0 | |
0 ×1 | |
0×2 | |
0×3 | |
… | |
0×20000000 | |
… | |
0×40000000 ?? |
Physische Speicheradresse | 0xF8700000 |
0 xF87000 01 | |
0xF8700002 | |
… | |
0xF87FFFFF | |
Nachdem der Kernel auf den physischen Speicher 0×80000000 ~ 0x800FFFFF zugreift, gibt er den linearen Kernelraum 0xF8700000 ~ 0xF87FFFFF frei. Auf diese Weise können auch andere Prozesse oder Codes die Adresse 0xF8700000 ~ 0xF87FFFFF verwenden, um auf anderen physischen Speicher zuzugreifen. Aus der obigen Beschreibung können wir die grundlegendste Idee des High-End-Speichers erkennen: Leihen Sie sich einen Abschnitt des Adressraums aus, erstellen Sie eine temporäre Adresszuordnung und geben Sie ihn nach der Verwendung frei. Es kann recycelt werden und auf den gesamten physischen Speicher zugreifen. Bei diesem Anblick kommen einige Leute nicht umhin, sich zu fragen: Was passiert, wenn ein Kernel-Prozess oder ein Kernel-Modul weiterhin einen bestimmten logischen Adressraum belegt und ihn nicht freigibt? Wenn diese Situation tatsächlich auftritt, wird der High-End-Speicheradressraum des Kernels immer knapper. Wenn er belegt und nicht freigegeben ist, ist er nicht zugänglich, selbst wenn er nicht dem physischen Speicher zugeordnet ist. 3. Aufteilung Der Kernel unterteilt den High-End-Speicher in 3 Teile: VMALLOC_START~VMALLOC_END, KMAP_BASE~FIXADDR_START und FIXADDR_START~4G. Für High-End-Speicher können Sie die entsprechende Seite über alloc_page() oder andere Funktionen erhalten. Wenn Sie jedoch auf den tatsächlichen physischen Speicher zugreifen möchten, müssen Sie die Seite in eine lineare Adresse umwandeln (warum? Denken Sie darüber nach, wie die MMU auf den physischen Speicher zugreift. Das heißt, wir müssen einen linearen Platz für die Seite finden, die dem High-End-Speicher entspricht. Dieser Vorgang wird als High-End-Speicherzuordnung bezeichnet.
Permanente Kernel-Zuordnung Wenn die Seite, die dem High-End-Speicher entspricht, über alloc_page() abgerufen wird, wie findet man dann einen linearen Platz dafür? Temporäre Kernel-Zuordnung Der Kernel reserviert etwas linearen Platz zwischen FIXADDR_START und FIXADDR_TOP für besondere Anforderungen. Dieser Raum wird als „fester Mapping-Raum“ bezeichnet. Ein Teil davon wird für die temporäre Zuordnung von High-End-Speicher verwendet. (1) Jede CPU belegt einen Raum 1. Hat der Benutzerraum (Prozess) das Konzept des High-End-Speichers? Benutzerprozesse haben kein Konzept für High-End-Speicher. Hoher Speicher existiert nur im Kernel-Bereich. Benutzerprozesse können nur auf bis zu 3 GB physischen Speicher zugreifen, während Kernelprozesse auf den gesamten physischen Speicher zugreifen können.2. Gibt es High-End-Speicher im 64-Bit-Kernel? In der aktuellen Realität gibt es im 64-Bit-Linux-Kernel keinen High-End-Speicher, da der 64-Bit-Kernel mehr als 512 GB Speicher unterstützen kann. Wenn der auf dem Computer installierte physische Speicher den Kernel-Adressraum überschreitet, steht High-End-Speicher zur Verfügung.3. Auf wie viel physischen Speicher kann ein Benutzer zugreifen? Auf wie viel physischen Speicher kann der Kernel-Code zugreifen? 32-Bit-Systembenutzerprozesse können auf bis zu 3 GB zugreifen, und Kernelcode kann auf den gesamten physischen Speicher zugreifen. 64-Bit-Systembenutzerprozesse können auf maximal mehr als 512 GB zugreifen, und Kernelcode kann auf den gesamten physischen Speicher zugreifen.4. Welche Beziehung besteht zwischen High-End-Speicher und physischer Adresse, logischer Adresse und linearer Adresse? High-End-Speicher bezieht sich nur auf logische Adressen und hat keine direkte Beziehung zu logischen Adressen und physischen Adressen. |
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Linux-Benutzerraums und des Kernelraums. 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

VS Code system requirements: Operating system: Windows 10 and above, macOS 10.12 and above, Linux distribution processor: minimum 1.6 GHz, recommended 2.0 GHz and above memory: minimum 512 MB, recommended 4 GB and above storage space: minimum 250 MB, recommended 1 GB and above other requirements: stable network connection, Xorg/Wayland (Linux)

Die Gründe für die Installation von VS -Code -Erweiterungen können sein: Netzwerkinstabilität, unzureichende Berechtigungen, Systemkompatibilitätsprobleme, VS -Code -Version ist zu alt, Antiviren -Software oder Firewall -Interferenz. Durch Überprüfen von Netzwerkverbindungen, Berechtigungen, Protokolldateien, Aktualisierungen von VS -Code, Deaktivieren von Sicherheitssoftware und Neustart von Code oder Computern können Sie Probleme schrittweise beheben und beheben.

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.

VS Code ist der vollständige Name Visual Studio Code, der eine kostenlose und open-Source-plattformübergreifende Code-Editor und Entwicklungsumgebung von Microsoft ist. Es unterstützt eine breite Palette von Programmiersprachen und bietet Syntax -Hervorhebung, automatische Codebettel, Code -Snippets und intelligente Eingabeaufforderungen zur Verbesserung der Entwicklungseffizienz. Durch ein reiches Erweiterungs -Ökosystem können Benutzer bestimmte Bedürfnisse und Sprachen wie Debugger, Code -Formatierungs -Tools und Git -Integrationen erweitern. VS -Code enthält auch einen intuitiven Debugger, mit dem Fehler in Ihrem Code schnell gefunden und behoben werden können.

VS -Code ist auf Mac verfügbar. Es verfügt über leistungsstarke Erweiterungen, GIT -Integration, Terminal und Debugger und bietet auch eine Fülle von Setup -Optionen. Für besonders große Projekte oder hoch berufliche Entwicklung kann VS -Code jedoch Leistung oder funktionale Einschränkungen aufweisen.

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

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.

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.
