GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux – Unterschied zwischen User Space und Kernel Space?

Wird Kernel-Speicherplatz verwendet, wenn Kernel im Namen des Benutzerprogramms ausgeführt wird, d. h. Systemaufruf? Oder ist es der Adressraum für alle Kernel-Threads (zB Scheduler)?

Wenn es das erste ist, bedeutet das dann, dass ein normales Benutzerprogramm nicht mehr als 3 GB Speicher haben kann (wenn die Aufteilung 3 GB + 1 GB ist)? Wie kann der Kernel in diesem Fall High Memory verwenden, denn welcher virtuellen Speicheradresse werden die Seiten aus dem High Memory zugeordnet, da 1 GB Kernel-Speicherplatz logisch zugeordnet wird?

Akzeptierte Antwort:

Wird Kernel-Speicherplatz verwendet, wenn Kernel im Namen des Benutzerprogramms ausgeführt wird, d. h. Systemaufruf? Oder ist es der Adressraum für alle Kernel-Threads (zB Scheduler)?

Ja und ja.

Bevor wir weitermachen, sollten wir dies über das Gedächtnis sagen.

Das Gedächtnis wird in zwei verschiedene Bereiche unterteilt:

  • Der Benutzerbereich , das ist eine Reihe von Speicherorten, an denen normale Benutzerprozesse ausgeführt werden (d. h. alles andere als der Kernel). Die Rolle des Kernels besteht darin, Anwendungen, die in diesem Bereich laufen, davon abzuhalten, sich gegenseitig und die Maschine zu verwirren.
  • Der Kernel-Space , das ist der Ort, an dem der Code des Kernels gespeichert ist und ausgeführt wird unter.

Prozesse, die im Benutzerbereich ausgeführt werden, haben nur Zugriff auf einen begrenzten Teil des Speichers, während der Kernel Zugriff auf den gesamten Speicher hat. Prozesse, die im Benutzerbereich ausgeführt werden, tun dies ebenfalls nicht Zugriff auf den Kernelspace haben. Userspace-Prozesse können nur auf einen kleinen Teil des Kernels zugreifen über eine vom Kernel verfügbar gemachte Schnittstelle – die Systemaufrufe . Wenn ein Prozess einen Systemaufruf ausführt, wird ein Software-Interrupt an den Kernel gesendet, der dann den entsprechenden Interrupt-Handler absetzt und seine Arbeit fortsetzt, nachdem der Handler beendet ist.

Kernel-Space-Code hat die Eigenschaft, im „Kernel-Modus“ ausgeführt zu werden, was (in Ihrem typischen Desktop-x86-Computer) das ist, was Sie Code nennen, der unter Ring 0 ausgeführt wird . Normalerweise gibt es in der x86-Architektur 4 Schutzringe . Ring 0 (Kernel-Modus), Ring 1 (kann von Hypervisoren oder Treibern virtueller Maschinen verwendet werden), Ring 2 (kann von Treibern verwendet werden, da bin ich mir jedoch nicht so sicher). Unter Ring 3 laufen typische Anwendungen. Es ist der am wenigsten privilegierte Ring, und Anwendungen, die darauf ausgeführt werden, haben Zugriff auf eine Teilmenge der Anweisungen des Prozessors. Ring 0 (Kernel Space) ist der privilegierteste Ring und hat Zugriff auf alle Anweisungen der Maschine. Beispielsweise kann eine „einfache“ Anwendung (wie ein Browser) die x86-Assembler-Anweisungen lgdt nicht verwenden um die globale Deskriptortabelle oder hlt zu laden um einen Prozessor anzuhalten.

Wenn es das erste ist, bedeutet das dann, dass ein normales Benutzerprogramm nicht mehr als 3 GB Speicher haben kann (wenn die Aufteilung 3 GB + 1 GB ist)? Wie kann der Kernel in diesem Fall High Memory verwenden, denn welcher virtuellen Speicheradresse werden die Seiten aus dem High Memory zugeordnet, da 1 GB Kernel-Speicherplatz logisch zugeordnet wird?

Eine Antwort darauf finden Sie in der hervorragenden Antwort von wag hier

Siehe auch:Sichtbarkeit der Nautilus-Statusleiste – Schnell freien Speicherplatz überprüfen?
Linux
  1. Der Unterschied zwischen [[ $a ==Z* ]] und [ $a ==Z* ]?

  2. Der Unterschied zwischen Benutzer- und Dienstkonto?

  3. Unterschied zwischen Sudo-Benutzer und Root-Benutzer?

  4. Wie kann man einen Linux-Kernel-Puffer dem Benutzerbereich zuordnen?

  5. Kernel-Stack und User-Space-Stack

Verstehen des Unterschieds zwischen dem Befehl sudo und su unter Linux

Was ist der Unterschied zwischen macOS- und Linux-Kernels

Was ist der Unterschied zwischen Linux und Unix?

unterschied zwischen netstat und ss unter linux?

Was ist der Unterschied zwischen Benutzerbereich und Kernelbereich?

Unterschied zwischen 'ifconfig'- und 'ip'-Befehlen