Intel x86-Prozessor Speicherschutz Zusammenfassung Wissenspunkte

Sobald der Speicherschutzmechanismus des Prozessors aktiviert ist, führt der Prozessor bei jedem Speicherzugriff eine Schutzprüfung durch, um sicherzustellen, dass alle Zugriffe den Schutzrichtlinien entsprechen. Die Schutzprüfung und die Adressübersetzung werden parallel durchgeführt.
Die Schutzprüfung besteht aus einer Prüfung auf Segmentebene und einer Prüfung auf Seitenebene. Die Reihenfolge der Prüfung ist erst Segment, dann Seite, basierend auf Segmentdeskriptoren, Seitenverzeichnissen und Seitentabellen und basierend auf den Berechtigungsstufen.
Die Berechtigungsstufe ist die von Intel definierte Berechtigungsnummer zur Implementierung des Schutzes.
Die Überprüfung auf Segmentebene umfasst die Überprüfung der Segmentgrenzen, die Überprüfung des Segmenttyps, die Überprüfung der Privilegstufe und die Überprüfung von Long Pointers. Das Prinzip der Segment-Level-Prüfung lautet:
  1. Code auf einer niedrigen Berechtigungsstufe kann nicht auf Daten auf einer hohen Berechtigungsstufe zugreifen
  2. Code auf einer hohen Berechtigungsstufe kann auf Daten einer niedrigen Berechtigungsstufe zugreifen
  3. Code kann nur denselben Stack verwenden wie seine Privilegierungsstufe, und wenn die Privilegierungsstufe wechselt, wechselt der Stack mit ihm.
  4. Die Kontrolle kann nur an nicht-kompatible Codesegmente mit der gleichen Privilegstufe übertragen werden (long JMP und long CALL)
  5. Die Kontrolle kann an kompatible Codesegmente mit gleicher oder höherer Privilegstufe übertragen werden, aber nicht an kompatible Codesegmente mit niedrigerer Privilegstufe (long JMP und long CALL).
  6. Die Kontrolle kann nicht von einer höheren Privilegstufe zu einer niedrigeren Privilegstufe übertragen werden, auch nicht mit Call Gates, Interrupt Gates und Trap Gates.
  7. Die Übertragung der Kontrolle von einem langen RET zu einer hohen Privilegstufe ist nicht erlaubt.
Zu den Prüfungen auf Seitenebene gehören Prüfungen der Privilegierungsstufe und Lese-/Schreibprüfungen. Die relevanten Flags sind die U/S- und R/W-Bits in den Seitenverzeichnis-/Seitentabelleneinträgen. Eine Seite mit einer 0 im U/S-Bit ist eine Superseite und eine 1 steht für eine Benutzerseite. Im Allgemeinen kann der Code in einer Superseite auf alle Seiten zugreifen (unabhängig vom R/W-Flag), und der Code in einer Benutzerseite kann nur auf Benutzerseiten zugreifen. Wenn CR0.WP auf 1 gesetzt ist, kann der Code in der Superseite auch keine schreibgeschützten Benutzerseiten schreiben.
Seiten mit einem NXB von 1 können nur als Datenseiten verwendet werden, und der Versuch, einen Befehl auf einer Datenseite auszuführen, führt zu einer Prozessorausnahme.