2013-03-07 7 views
9

in x86-CPU gibt es Steuerregisternummer 0. das 16-te Bit dieses Registers zeigt "Schreibschutz" -Einstellung an. Wenn dieses Bit gelöscht ist, kann die CPU schreibgeschützte Daten überschreiben. (im Seitentabelleneintrag konfiguriert) im Speicher. Wenn dieses Bit gesetzt ist, kann die CPU RO-Daten im Speicher nicht überschreiben.Was ist der Zweck von x86 Cr0 WP Bit?

was ich bin neugierig ist "Was ist der ursprüngliche Zweck dieses Bits?" "Warum benötigt x86 CPU das?"

Antwort

13

von Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3A pg. 2-15 Zitiert (Hervorhebung von mir):

WP Write Protect (Bit 16 von CR0) - Wenn es gesetzt ist, hemmt Supervisor-Level-Verfahren aus in Nur-Lese-Seiten zu schreiben; Wenn diese Option deaktiviert ist, können Prozesse auf Supervisor-Ebene in schreibgeschützte Seiten geschrieben werden (unabhängig von der Einstellung des U/S-Bits; siehe Abschnitt 4.1.3 und Abschnitt 4.6). Dieses Flag erleichtert die Implementierung der Copy-on-Write-Methode zum Erstellen eines neuen Prozesses (Forking), der von Betriebssystemen wie UNIX verwendet wird.

Update: bei wikipedia on fork() Suche:

Jedes Mal, wenn ein Prozess (Eltern oder Kind) eine Seite ändert, eine separate Kopie dieser speziellen Seite allein wird für diesen Prozess (Eltern oder Kind) welche die Modifikation durchgeführt hat. Diese

ist der Kern von copy-on-write, sondern stellt ein Problem dar, wenn die Änderung vom Kernel getan wird (wie zum Beispiel, wenn der Schreib tritt als Folge von syscall - denk read()).

Von 4.1.3:

CR0.WP ermöglicht Seiten von Supervisor-Modus geschützt werden schreibt. Wenn CR0.WP = 0 ist, sind Supervisor-Modus-Schreib- -Zugriffe auf lineare Adressen mit Nur-Lese-Zugriffsrechten erlaubt; wenn CR0.WP = 1, sind sie nicht. (User-Modus Schreibzugriffe werden nie auf lineare Adressen mit Nur-Lese-Zugriffsrechte erlaubt, unabhängig von dem Wert von CR0.WP.)

von CR0.WP = 1 den Kernel Einstellung wird benachrichtigt (mit seiten- Fehler), wenn es schreibgeschützte Benutzerseiten ändert und den Kopiervorgang ausführen kann, bevor mit der Seitenmodifizierung fortgefahren wird.

+0

danke! Ich habe das Intel-Handbuch überprüft. aber ich verstehe immer noch nicht, warum WP-Bit die Implementierung von COW erleichtern kann ... – daehee

+1

@daehee: Ich habe die Antwort aktualisiert. Der entscheidende Punkt ist, dass ohne "CR0.WP" der Kernel nicht wissen kann, ob es eine ** Benutzer ** -Seite ändert, die kopiert werden muss. – user786653

+0

danke! es hilft sehr – daehee