Montagehinweise für Windows 32 (1): Grundkenntnisse
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
1. Arbeitsmodus des 80x86-Prozessors
1.1 Real-Modus
Übersicht über den Realmodus
Der Real-Modus ist der früheste vom 80x86-Prozessor unterstützte Arbeitsmodus und gleichzeitig der grundlegendste Arbeitsmodus. Der Real-Modus wird hauptsächlich in frühen MS-DOS-Betriebssystemen und anderen einfachen Betriebsumgebungen verwendet. Im Real-Modus hat der Prozessor direkten Zugriff auf 1 MB physischen Speicherplatz. Dieser Modus ist vollständig kompatibel mit der Funktionsweise des 8086-Prozessors, daher der Name „Real Mode“.
Funktionen im Real-Modus
-
Adressraumbeschränkungen
- Im Real-Modus kann der Prozessor nur auf 1 MB Speicherplatz zugreifen (von 0x00000 bis 0xFFFFF).
- Der Speicherplatz ist durch den 20-Bit-Adressbus begrenzt.
-
Segmentadresse und Offset-Adresse
- Der Real-Modus verwendet die segment:offset-Methode (Segment) für die Speicheradressierung.
- Die Segmentadresse wird mit 16 multipliziert (d. h. um 4 Bit nach links verschoben) und zur Offset-Adresse addiert, um eine physikalische 20-Bit-Adresse zu bilden.
- Wenn die Segmentadresse beispielsweise 0x1234 und die Offset-Adresse 0x5678 ist, lautet die physische Adresse: Physikalische Adresse = (0x1234×16) + 0x5678 = 0x12340 + 0x5678 = 0x179B8text{physische Adresse} = (0x1234 mal 16) + 0x5678 = 0x12340 + 0x5678 = 0x179B8 physikalische Adresse=(0x1234×16)+0x5678=0x12340+0x5678=0x179B8
-
Kein Speicherschutz
- Der Real-Modus verfügt über keinen Speicherschutzmechanismus und das Programm kann willkürlich auf den gesamten 1-MB-Speicherplatz zugreifen, einschließlich des Betriebssystembereichs und der Bereiche anderer Programme.
- Dadurch besteht die Möglichkeit, dass Programme sich gegenseitig stören und leicht zu Systemabstürzen führen.
-
Direkter Hardware-Zugriff
- Der Real-Modus ermöglicht den direkten Zugriff auf Hardwaregeräte und I/O-Ports.
- Im Real-Modus können Programme mithilfe von E/A-Anweisungen wie IN und OUT direkt mit Hardwaregeräten interagieren.
-
Interrupts und Prozessorinitialisierung
- Der Real-Modus unterstützt Hardware-Interrupts und Software-Interrupts, die mithilfe der Interrupt Vector Table (IVT) verwaltet werden.
- Die Interrupt-Vektortabelle wird im niedrigsten 1-KB-Speicherbereich (von 0x00000 bis 0x003FF) gespeichert.
- Nachdem der Prozessor eingeschaltet oder zurückgesetzt wurde, wechselt er automatisch in den Real-Modus und beginnt mit der Codeausführung ab Adresse 0xFFFF0.
-
Einschränkungen für ausführbaren Code
- Die Größe des ausführbaren Codesegments im Realmodus ist begrenzt, normalerweise beträgt ein Codesegment bis zu 64 KB (0x0000 bis 0xFFFF).
Speicherlayout im Real-Modus
Im Real-Modus umfasst das Speicherlayout normalerweise die folgenden Teile:
-
BIOS-Bereich
- High-End-Speicher (von 0xF0000 bis 0xFFFFF) wird normalerweise zum Speichern von BIOS-Code und -Daten verwendet.
- Beim Einschalten oder Zurücksetzen beginnt der Prozessor mit der Ausführung des BIOS-Codes bei 0xFFFF0.
-
Interrupt-Vektortabelle
- Der unterste 1-KB-Speicherbereich (von 0x00000 bis 0x003FF) speichert die Interrupt-Vektortabelle.
- Jeder Interrupt-Vektor belegt 4 Bytes (2-Byte-Segmentadresse und 2-Byte-Offsetadresse).
-
Betriebssysteme und Anwendungen
- Der verbleibende Speicherbereich wird für Betriebssystemcode, Anwendungscode und Daten verwendet.
1.2 Schutzmodus
Überblick
Der geschützte Modus ist ein erweiterter Arbeitsmodus, der vom 80x86-Prozessor eingeführt wurde. Im Vergleich zum echten Modus bietet er leistungsfähigere Speicherverwaltungs- und Schutzfunktionen. Der geschützte Modus wurde erstmals auf dem 80286-Prozessor eingeführt und wurde auf dem 80386-Prozessor und späteren Prozessoren weiter erweitert und verbessert.
Funktionen des geschützten Modus
-
Erweiterter Speicheradressraum
- Der geschützte Modus unterstützt einen 24-Bit- oder 32-Bit-Adressbus und kann auf 4 GB physischen Speicherplatz zugreifen (auf 80386 und höher).
- Für die Speicherverwaltung werden Segmentselektoren und Segmentdeskriptoren verwendet, die ein komplexeres Speicherlayout und eine komplexere Speicherverwaltung ermöglichen.
-
Speicherschutz
- Durch Segmentdeskriptoren und Seitentabellen kann der geschützte Modus einen Speicherschutz implementieren, um zu verhindern, dass Programme illegal auf den Speicher anderer Programme oder Betriebssysteme zugreifen.
- Unterstützt Code- und Datensegmente unterschiedlicher Berechtigungsstufen (Stufe 0 bis Stufe 3), um eine Isolierung zwischen Benutzermodus und Kernelmodus zu erreichen.
-
Paging-Mechanismus
- Unterstützt den Paging-Mechanismus und ordnet virtuelle Adressen über Seitentabellen physischen Adressen zu, um die Speicherverwaltungsfunktionen weiter zu verbessern.
- Die Seitengröße beträgt normalerweise 4 KB, es werden jedoch auch große Seiten (z. B. 4 MB) unterstützt.
-
Hardwareunterstütztes Multitasking
- Bietet hardwaregestütztes Multitasking-Switching, einschließlich Task State Segment (TSS) und Task Register (Task Register).
- Unterstützt Task Gate zum Wechseln und Schutz zwischen Aufgaben.
-
Verbesserte Interrupt- und Ausnahmebehandlung
- Im geschützten Modus wird die Interrupt-Deskriptortabelle (IDT) zur Verwaltung von Interrupts und zur Ausnahmebehandlung verwendet.
- IDT unterstützt Gate-Deskriptoren (Gate-Deskriptor), einschließlich Interrupt-Gates, Trap-Gates und Task-Gates.
-
Virtueller Speicher
- Unterstützt virtuellen Speicher und implementiert virtuellen Adressraum über den Paging-Mechanismus, sodass das Programm einen größeren Adressraum als den tatsächlichen physischen Speicher verwenden kann.
Speicherverwaltung im geschützten Modus
-
Segmentselektoren und Segmentdeskriptoren
- Jeder Segmentselektor verweist auf einen Segmentdeskriptor, der die Segmentbasisadresse, das Segmentlimit und Segmentattribute (z. B. Berechtigungen und Typ) enthält.
- Segmentselektoren und Segmentdeskriptoren werden von der Global Descriptor Table (GDT) und der Local Descriptor Table (LDT) verwaltet.
-
Paging-Mechanismus
- Der Paging-Mechanismus unterteilt die virtuelle Adresse in ein Seitenverzeichnis (Page Directory), eine Seitentabelle (Page Table) und einen Seitenrahmen (Page Frame).
- Über das Seitenverzeichnis und die Seitentabelle werden virtuelle Adressen physischen Adressen zugeordnet, um Speicherschutz und -verwaltung zu erreichen.
Anwendung im geschützten Modus
Der geschützte Modus wird häufig in modernen Betriebssystemen wie Windows, Linux, Unix usw. verwendet. Sie nutzen die Eigenschaften des geschützten Modus, um erweiterte Funktionen wie Multitasking, Mehrbenutzer und Speicherschutz zu implementieren. Durch den geschützten Modus kann das Betriebssystem Hardwareressourcen effektiv verwalten und eine stabile und sichere Betriebsumgebung bereitstellen.
Der geschützte Modus ist die Grundlage moderner Betriebssysteme und Anwendungen und nutzt die erweiterten Funktionen des 80x86-Prozessors voll aus, um die Systemstabilität und -sicherheit zu verbessern.
1.3 Virtueller 8086-Modus
Übersicht über den virtuellen 8086-Modus
Der virtuelle 8086-Modus (Virtual 8086 Mode) ist ein spezieller Modus, der vom 80x86-Prozessor im geschützten Modus bereitgestellt wird und es dem Prozessor ermöglicht, 8086-Programme so auszuführen, als ob sie im Realmodus ausgeführt würden. Dieser Modus dient hauptsächlich der Abwärtskompatibilität und ermöglicht die Ausführung älterer Versionen von DOS-Programmen auf modernen Betriebssystemen wie Windows und Linux, ohne den geschützten Modus zu verlassen.
Funktionen des virtuellen 8086-Modus
-
Kompatibilität mit dem Real-Modus
- Der virtuelle 8086-Modus ermöglicht es dem Prozessor, die Betriebsumgebung im Realmodus zu simulieren und unterstützt den 8086-Befehlssatz und Adressraum.
- Der Prozessor kann 8086 Programme im geschützten Modus ausführen und dabei dennoch die Funktionen und Vorteile des geschützten Modus beibehalten.
-
Paging- und Schutzmechanismen
- Im virtuellen 8086-Modus kann der Prozessor weiterhin den Paging-Mechanismus im geschützten Modus verwenden, um virtuellen Speicher und Speicherschutz zu implementieren.
- Über die Seitentabelle kann der Adressraum im virtuellen 8086-Modus dem physischen Speicher zugeordnet werden, wodurch Speicherisolation und -schutz bereitgestellt werden.
-
Interrupt- und Ausnahmebehandlung
- Der virtuelle 8086-Modus unterstützt die Interrupt- und Ausnahmebehandlung, die über die Interrupt-Deskriptortabelle (IDT) des geschützten Modus verwaltet werden kann.
- Unterbrechungen und Ausnahmen können vom virtuellen 8086-Monitor (normalerweise dem Betriebssystemkernel) verarbeitet werden, wodurch Systemstabilität und -sicherheit gewährleistet werden.
-
Unterstützung für Hardware-Virtualisierung
- Einige moderne Prozessoren bieten hardwaregestützte Virtualisierungstechnologie, die den virtuellen 8086-Modus effizienter implementieren kann.
- Beispielsweise können die VT-x-Technologie von Intel und die AMD-V-Technologie von AMD hardwarebeschleunigte Virtualisierungsunterstützung bieten und die Leistung verbessern.
Speicherverwaltung im virtuellen 8086-Modus
-
Segment:Offset-Adressierung
- Im virtuellen 8086-Modus ist die Speicheradressierungsmethode dieselbe wie im realen Modus und verwendet den Segment: Offset-Modus (Segmentmodus).
- Die Segmentadresse und die Offset-Adresse bilden zusammen eine 20-Bit-physikalische Adresse, die auf bis zu 1 MB Speicherplatz zugreifen kann.
-
Paging-Mechanismus
- Der virtuelle 8086-Modus unterstützt den Paging-Mechanismus, der die 20-Bit-Real-Mode-Adresse dem virtuellen Adressraum im geschützten Modus zuordnen kann.
- Durch Seitentabellen können Speicherschutz und -isolation erreicht werden, um zu verhindern, dass Programme im virtuellen 8086-Modus illegal auf andere Speicherbereiche zugreifen.
Anwendung des virtuellen 8086-Modus
-
Führen Sie ältere DOS-Programme aus
- Der virtuelle 8086-Modus wird hauptsächlich zum Ausführen älterer Versionen von DOS-Programmen und -Anwendungen verwendet und sorgt so für Abwärtskompatibilität.
- In modernen Betriebssystemen können Sie im virtuellen 8086-Modus einige alte Programme ausführen, die im realen Modus ausgeführt werden müssen.
-
Virtuelle Maschinen und Emulatoren
- Einige virtuelle Maschinen und Emulatoren nutzen den virtuellen 8086-Modus, um ältere Betriebssysteme und Software zu unterstützen.
- Emulatoren wie DOSBox simulieren beispielsweise die DOS-Umgebung im virtuellen 8086-Modus und ermöglichen es Benutzern, klassische DOS-Spiele und -Anwendungen auszuführen.
Einschränkungen des virtuellen 8086-Modus
-
Speicheradressraum
- Im virtuellen 8086-Modus kann das Programm nur auf 1 MB Speicheradressraum zugreifen, der durch den Real-Modus eingeschränkt ist.
-
Leistungsaufwand
- Die Implementierung des virtuellen 8086-Modus erfordert die Unterstützung des geschützten Modus, was zu einem gewissen Leistungsaufwand führen kann.
- Die Behandlung von Interrupts und Ausnahmen erfordert den Eingriff des virtuellen 8086-Monitors (Betriebssystemkernels), was die Verarbeitungskomplexität erhöht.
-
Hardwareeinschränkungen
- Nicht jede Hardware unterstützt den virtuellen 8086-Modus vollständig und einige Hardwarefunktionen sind im virtuellen 8086-Modus möglicherweise nicht verfügbar.
Zusammenfassen
Der virtuelle 8086-Modus ist ein spezieller Modus, der vom 80x86-Prozessor im geschützten Modus bereitgestellt wird, hauptsächlich aus Gründen der Abwärtskompatibilität mit älteren Versionen von DOS-Programmen. Der virtuelle 8086-Modus ermöglicht es dem Prozessor, eine Real-Mode-Betriebsumgebung im geschützten Modus zu simulieren und gleichzeitig die Funktionen und Vorteile des geschützten Modus beizubehalten. Dieser Modus wird häufig zum Ausführen älterer Software, virtueller Maschinen und Emulatoren verwendet.
2. Windows-Speicherverwaltung
2.1 Speicheranordnung des DOS-Betriebssystems
Die Speicherverwaltung des DOS-Betriebssystems (Disk Operating System) basiert hauptsächlich auf dem Real-Mode-Speichermodell des 8086/8088-Prozessors. Der Speicheradressraum im Real-Modus beträgt 1 MB, von 0x00000 bis 0xFFFFF. Dieser 1 MB große Adressraum ist in mehrere Hauptbereiche unterteilt, von denen jeder einen bestimmten Zweck hat. Im Folgenden finden Sie eine detaillierte Einführung in die Speicheranordnung des DOS-Betriebssystems.
Real-Mode-Speichermodell
Im Real-Modus wird auf die Speicheradresse zugegriffen, indem die Segmentadresse und die Offset-Adresse zu einer physikalischen 20-Bit-Adresse kombiniert werden. Die Segmentadresse wird um 4 Bit nach links verschoben und die Offset-Adresse wird addiert, um die tatsächliche physikalische Adresse zu bilden.
Speicherlayout
Die Aufteilung von 1 MB Speicherplatz im Real-Modus ist ungefähr wie folgt:
-
Interrupt-Vektortabelle (IVT): 0x00000 - 0x003FF
- Belegt 1 KB (256 Vektoren, jeweils 4 Bytes).
- Speichern Sie die Eingangsadresse und zugehörige Informationen der Interrupt-Serviceroutine.
-
BIOS-Datenbereich (BDA): 0x00400 – 0x004FF
- Etwa 256 Byte.
- Speichert System- und Hardwaregeräteparameter, z. B. Informationen zu Festplatte, serieller Schnittstelle, paralleler Schnittstelle usw.
-
Legacy-Speicher (konventioneller Speicher): 0x00500 – 0x9FFFF
- 640 KB, wird hauptsächlich für DOS-Betriebssysteme, DOS-Anwendungen und residente Speicherprogramme (TSR) verwendet.
- Kann als Programmcode, Daten, Stack usw. verwendet werden.
-
Anzeigepuffer: 0xA0000 - 0xBFFFF
- Der vom Anzeigeadapter verwendete Speicherbereich.
- 0xA0000 - 0xAFFFF: 64 KB, wird normalerweise im Grafikmodus von EGA/VGA-Grafikkarten verwendet.
- 0xB0000 - 0xB7FFF: 32 KB, wird normalerweise für Monochrom-Anzeigeadapter (MDA) verwendet.
- 0xB8000 - 0xBFFFF: 32 KB, wird normalerweise für die Farbtextanzeige verwendet (CGA-, EGA-, VGA-Textmodus).
-
Erweiterter BIOS-Datenbereich (EBDA): 0xC0000 – 0xC7FFF
- Ungefähr 32 KB, in dem einige erweiterte BIOS-Daten und Adapter-BIOS-Code gespeichert sind.
-
BIOS-Erweiterungsbereich: 0xC8000 - 0xEFFFF
- Wird hauptsächlich für BIOS und Treiber von Erweiterungskarten (z. B. Netzwerkadapter, SCSI-Controller usw.) verwendet.
-
System-BIOS: 0xF0000 - 0xFFFFF
- 64 KB, speichert System-BIOS-Code.
- Bietet grundlegende Systeminitialisierung, Interrupt-Serviceroutine, Hardwaresteuerung und andere Funktionen.
2.2 80386-Speicheradressierungsmechanismus
Der Intel 80386-Prozessor führte einen fortschrittlicheren Speicheradressierungsmechanismus ein und bietet leistungsfähigere Speicherverwaltungs- und Schutzfunktionen als seine Vorgänger. Der 80386 unterstützt zwei Hauptspeicheradressierungsmodi:Real-ModusUndSicherheitsmodus . Im geschützten Modus wird außerdem ein Paging-Mechanismus eingeführt, um die Speicherverwaltungsfunktionen weiter zu verbessern. Das Folgende ist eine detaillierte Einführung:
1. Real-Modus
Im Real-Modus verfügt der 80386-Prozessor über die gleiche Speicheradressierungsmethode wie der 8086/8088. Er verwendet einen 20-Bit-Adressbus und kann auf 1 MB Speicherplatz zugreifen. Die Adresse wird aus Segmentadresse und Offsetadresse berechnet:
- Segmentadresse: Verschiebung um 4 Bit nach links.
- Offset-Adresse: Addiert man das Ergebnis der Linksverschiebung der Segmentadresse, erhält man die physikalische 20-Bit-Adresse.
物理地址 = (段地址 << 4) + 偏移地址
2. Geschützter Modus
Der geschützte Modus ist der Hauptarbeitsmodus des 80386-Prozessors, der erweiterte Speicherschutz- und Verwaltungsfunktionen bietet. Die Speicheradressierung im geschützten Modus umfasst zwei Ebenen von Mechanismen:SegmentierungsmechanismusUndPaging-Mechanismus。
2.1 Segmentierungsmechanismus
Im geschützten Modus verwendet der 80386-Prozessor den Segmentselektor und den Segmentdeskriptor, um Segmente zu verwalten. Segmentdeskriptoren werden in der globalen Deskriptortabelle (GDT) oder der lokalen Deskriptortabelle (LDT) gespeichert.
-
Segmentauswahl: 16 Bit, einschließlich drei Feldern:
- Index: 13 Bit, gibt die Position des Segmentdeskriptors in GDT oder LDT an.
- TI (Tabellenindikator): 1 Bit, das angibt, ob GDT (0) oder LDT (1) verwendet werden soll.
- RPL (Angeforderte Berechtigungsstufe): 2 Bits, die die angeforderte Berechtigungsstufe angeben.
-
Segmentdeskriptor: 8 Bytes, einschließlich der folgenden Felder:
- Basisadresse: 32 Bit, Startadresse des Segments.
- Segmentlimit (Limit): 20 Bit, Segmentgröße.
- Zugriffsrechte und Eigenschaften: 12 Bit, beschreibt den Segmenttyp, die Berechtigungsstufe usw.
Die lineare Adressberechnung unter dem Segmentierungsmechanismus lautet wie folgt:
线性地址 = 段基址 + 偏移地址
2.2 Paging-Mechanismus
Der Paging-Mechanismus ist eine weitere Speicherverwaltungsmethode, die der 80386-Prozessor im geschützten Modus bereitstellt. Er realisiert Speichervirtualisierung und -schutz durch Konvertierung linearer Adressen in physische Adressen. Der Paging-Mechanismus umfasst Seitenverzeichnisse, Seitentabellen und Seitenrahmen.
- Seitenverzeichnis: Enthält Seitenverzeichniseinträge (PDEs), jede PDE verweist auf eine Seitentabelle.
- Seitentabelle: Enthält Seitentabelleneinträge (PTEs), jeder PTE zeigt auf einen Seitenrahmen.
- Seitenrahmen: Der tatsächliche physische Speicherblock, normalerweise 4 KB.
Die Adressübersetzung des Paging-Mechanismus lautet wie folgt:
- Lineare Adressen sind in drei Teile unterteilt: Verzeichnis, Tabelle und Intra-Page-Offset.
- Der Verzeichnisabschnitt indiziert das Seitenverzeichnis, um die entsprechende PDE zu finden.
- Der Tabellenabschnitt indiziert die Seitentabelle, um den entsprechenden PTE zu finden.
- Der Intra-Page-Offset wird zur Basisadresse des Seitenrahmens addiert, um die physische Adresse zu erhalten.
物理地址 = 页帧基址 + 页内偏移
Schematische Darstellung des Paging-Mechanismus:
+----------------+----------------+----------------+
| 页目录(10位) | 页表(10位) | 页内偏移(12位)|
+----------------+----------------+----------------+
3. 80386 Speicherverwaltungseinheit (MMU)
Die MMU (Memory Management Unit) von 80386 ist für die Segmentierung und Paging-Adressübersetzung verantwortlich und implementiert den Speicherschutz.
-
CR0-Register: Steuerregister zum Aktivieren/Deaktivieren des geschützten Modus und des Paging.
- PE-Bit (Protection Enable): Aktiviere geschützten Modus.
- PG-Bit (Paging-Aktivierung): Paging aktivieren.
-
CR3-Register: Die Basisadresse des Speicherseitenverzeichnisses.
-
CR2-Register: Speichert die lineare Adresse des letzten Seitenfehlers.
4. Schutzmechanismus
Im geschützten Modus bietet der 80386-Prozessor verschiedene Schutzmechanismen, um die Sicherheit von Speicher und System zu gewährleisten:
- Berechtigungsstufen : Von 0 bis 3 gibt es insgesamt vier Stufen, wobei Stufe 0 die höchste ist. Kontrollieren Sie den Zugriff auf Code und Daten.
- Segmentschutz: Implementieren Sie die Überprüfung der Segmentgrenzen und die Zugriffskontrolle über die Attributfelder im Segmentdeskriptor.
- Seitenschutz: Über das Attributfeld im PTE wird die Lese-, Schreib- und Ausführungsberechtigungssteuerung der Seite realisiert.
2.3 Windows-Speicheranordnung
1. Virtueller Speicher
Das Windows-Betriebssystem verwendet die virtuelle Speicherverwaltung, die physischen Speicher (RAM) und virtuelle Speicherdateien (Auslagerungsdateien) auf der Festplatte kombiniert, um für jeden Prozess einen unabhängigen virtuellen Adressraum bereitzustellen. Jeder Prozess verfügt normalerweise über 4 GB virtuellen Adressraum (32-Bit-Systeme), von denen 2 GB von Programmen im Benutzermodus und 2 GB vom Kernelmodus verwendet werden. 64-Bit-Systeme verfügen über einen größeren virtuellen Adressraum.
2. Layout des virtuellen Adressraums
Der virtuelle Adressraum ist in Benutzermodus- und Kernelmodus-Regionen unterteilt:
Adressraum im Benutzermodus
- 0x00000000 - 0x7FFFFFFF: Adressraum im Benutzermodus zur Verwendung durch Anwendungen.
- Haufen: Dynamischer Speicherzuweisungsbereich, die Anwendung weist zur Laufzeit Speicher zu und gibt ihn frei.
- Stapel: Jeder Thread hat seinen eigenen Stack für Funktionsaufrufe und lokale Variablen.
- Geteilte Erinnerung: Datensegmente, die von verschiedenen Prozessen gemeinsam genutzt werden.
Adressraum im Kernelmodus
- 0x80000000 - 0xFFFFFFFF: Kernelmodus-Adressraum, der vom Betriebssystemkernel und den Treibern verwendet wird.
- Kernel-Code und Daten: Der Code und die globalen Daten des Betriebssystemkernels.
- Systemcache: Wird für die Zwischenspeicherung des Dateisystems verwendet, um die Dateizugriffsleistung zu verbessern.
- Gerätetreiber: Treibercode und Daten.
3. Speicher-Paging
Windows verwendet einen Paging-Mechanismus, um den Speicher zu verwalten und virtuelle Adressen in physische Adressen umzuwandeln. Die Grundeinheit des Pagings ist eine Seite, normalerweise 4 KB.
Seitentabellenstruktur
- Seitenverzeichnis: Enthält den Seitenverzeichniseintrag (PDE), der auf die Seitentabelle verweist.
- Seitentabelle: Enthält Seitentabelleneinträge (PTEs), die auf tatsächliche physische Speicherseiten verweisen.
4. Speicherverwaltungseinheit (MMU)
Die Speicherverwaltungseinheit (MMU) des Prozessors ist für die Konvertierung virtueller Adressen in physische Adressen, den Seitenaustausch und den Speicherschutz verantwortlich. Das Windows-Betriebssystem implementiert die folgenden Funktionen über die MMU:
- Adressübersetzung: Ordnet virtuelle Adressen physischen Adressen zu.
- Speicherschutz: Seitenzugriffsberechtigungen steuern (Lesen, Schreiben, Ausführen).
- Seitenaustausch: Verschieben Sie selten verwendete Seiten in die Auslagerungsdatei der Festplatte, um physischen Speicher freizugeben.
5. Speicherschutz
Das Windows-Betriebssystem schützt den Speicher durch die folgenden Mechanismen:
- Berechtigungsstufe: Stellen Sie sicher, dass Benutzermodusprogramme nicht direkt auf den Kernelmodusspeicher zugreifen können.
- Seitenberechtigungen: Steuern Sie den Zugriffstyp (Lesen, Schreiben, Ausführen) jeder Seite.
- Zugangskontrolle: Der Betriebssystemkernel legt Zugriffsberechtigungen fest, um unbefugten Speicherzugriff zu verhindern.
6. Speicherzuweisung
Windows verwendet mehrere Strategien und Datenstrukturen für die Speicherzuweisung:
- Paging-Zuteiler: Paging-Zuweisung und Freigabe des virtuellen Speichers verwalten.
- Heap-Manager: Bietet eine effiziente Speicherzuweisung und -freigabe für Anwendungen.
- Kernel-Speicherzuweiser: Verwaltet den Kernel-Modus-Speicher, einschließlich Pool-Zuweisung und nicht ausgelagertem Pool.
7. Speicherverwaltungs-API
Windows stellt eine Reihe von Speicherverwaltungs-APIs zur Verwendung durch Anwendungen und das System bereit:
- VirtualAlloc/VirtualFree: Virtuellen Speicher zuweisen und freigeben.
- HeapAlloc/HeapFree: Speicher auf dem Heap zuweisen und freigeben.
- GlobalAlloc/GlobalFree: Globale Speicherblöcke zuweisen und freigeben.
- Lokale Zuordnung/Lokale Freigabe: Lokale Speicherblöcke zuweisen und freigeben.
8. Auslagerungsdatei
Windows verwendet die Auslagerungsdatei (Pagefile.sys) als Teil des virtuellen Speichers. Wenn der physische Speicher nicht ausreicht, werden selten verwendete Seiten in die Auslagerungsdatei ausgelagert. Der Speicherort und die Größe der Auslagerungsdatei können vom Benutzer konfiguriert werden.
3. Windows-Privilegschutz
3.1 80386 Interrupts und Ausnahmen
1. Klassifizierung von Interrupts und Ausnahmen
Unterbrechungen und Ausnahmen können in die folgenden Kategorien unterteilt werden:
- Hardware-Interrupts: Wird von externen Geräten wie Tastatur, Maus, Festplatte usw. gesendet.
- Software-Unterbrechungen: Von Software übergeben
INT
Der Befehl wird ausgelöst. - Ausnahmen: Wird durch vom Prozessor erkannte Fehler oder besondere Bedingungen ausgelöst, z. B. Fehler bei der Division durch Null, Seitenfehler usw.
2. Interrupt-Vektortabelle (IVT)
Der 80386-Prozessor verwendet eine Interrupt-Vektortabelle zur Verwaltung von Interrupts und Ausnahmen. Die IVT ist eine Tabelle mit 256 Einträgen, die jeweils 4 Bytes belegen und die Adresse eines Interrupt- oder Ausnahmehandlers speichern. Die Basisadresse des IVT wird im IDTR (Interrupt Descriptor Table Register) gespeichert.
3. Interrupt-Deskriptortabelle (IDT)
Im geschützten Modus verwendet der 80386-Prozessor eine Interrupt-Deskriptortabelle (IDT), um Interrupt- und Ausnahmehandler zu speichern. IDT enthält Interrupt-Gate-, Trap-Gate- und Task-Gate-Deskriptoren. Jeder Deskriptor belegt 8 Bytes.
- Tor unterbrechen: Wird für Hardware- und Software-Interrupts verwendet und IF (Interrupt-Flag) automatisch gelöscht.
- Fallentor: Wird zur Ausnahmebehandlung verwendet, IF wird nicht gelöscht.
- Aufgabentor: Wird zum Wechseln von Aufgaben verwendet.
Die Basisadresse und Grenzen des IDT werden im IDTR gespeichert.
4. Verarbeitungsablauf unterbrechen
Wenn ein Interrupt oder eine Ausnahme auftritt, führt der 80386-Prozessor die folgenden Schritte aus:
- Kontext speichern: Speichern Sie das aktuelle CS (Code Segment Register), EIP (Instruction Pointer Register) und EFLAGS (Flags Register) im Stapel.
- Finden Sie IDT: Suchen Sie den entsprechenden Deskriptor aus dem IDT basierend auf der Interrupt- oder Ausnahmenummer.
- Überprüfen Sie die Berechtigungen: Überprüfen Sie die aktuelle Berechtigungsstufe (CPL) und die Ziel-Berechtigungsstufe (DPL), um eine rechtsgültige Berechtigungskonvertierung sicherzustellen.
- Springe zum Hundeführer: Neues CS und EIP laden, zum Interrupt- oder Ausnahmehandler springen.
- Behandeln Sie Interrupts oder Ausnahmen:Handlercode ausführen.
- Kontext wiederherstellen:passieren
IRET
Der Befehl stellt CS, EIP und EFLAGS wieder her und kehrt in den Zustand zurück, bevor der Interrupt oder die Ausnahme auftrat.
5. Ausnahmetyp
Der 80386-Prozessor unterstützt mehrere Ausnahmen. Jede Ausnahme hat unterschiedliche Fehlercodes und Behandlungsmethoden:
- Fehler: Eine behebbare Ausnahme. Wenn der Handler zurückkehrt, wird die Anweisung, die die Ausnahme verursacht hat, erneut ausgeführt.
- Fallen: Eine Ausnahme, die zum Debuggen oder Nachverfolgen verwendet wird. Wenn der Handler nach dem Auftreten der Ausnahme zurückkehrt, wird die nächste Anweisung weiter ausgeführt.
- Abbrüche: Schwerwiegender Fehler, normalerweise nicht behebbar.
Zu den häufigsten Ausnahmen gehören:
- Fehler teilen: Wird ausgelöst, wenn der Divisor Null ist.
- Einzelner Schritt: Wird zum Debuggen verwendet und wird beim Ausführen eines einzelnen Schritts ausgelöst.
- Haltepunkt: Wird beim Debuggen von Haltepunkten ausgelöst.
- Überlauf:verwenden
INTO
Wird ausgelöst, wenn die Anweisung einen Überlauf erkennt. - BOUND-Bereich überschritten: Wird ausgelöst, wenn der Array-Zugriff außerhalb der Grenzen liegt.
- Ungültiger Opcode: Wird beim Ausführen einer unzulässigen Anweisung ausgelöst.
- Gerät nicht verfügbar: Wird ausgelöst, wenn der Coprozessor nicht verfügbar ist.
- Doppelter Fehler: Bei der Behandlung einer Ausnahme tritt erneut eine Ausnahme auf.
- Coprozessor-Segmentüberlauf: Wird durch Coprozessoroperationen ausgelöst.
- Ungültiges TSS: Wird ausgelöst, wenn das Aufgabenstatussegment unzulässig ist.
- Segment nicht vorhanden: Wird ausgelöst, wenn auf ein nicht vorhandenes Segment zugegriffen wird.
- Stapelfehler: Wird ausgelöst, wenn ein Stapeloperationsfehler auftritt.
- Allgemeine Schutzverletzung: Wird ausgelöst, wenn Schutzregeln verletzt werden.
- Seitenfehler: Wird ausgelöst, wenn der Paging-Vorgang abnormal ist.
6. Interrupt- und Ausnahmehandler
Interrupt- und Ausnahmehandler sind spezielle Routinen, die zur Behandlung bestimmter Interrupts oder Ausnahmen verwendet werden. Sie werden normalerweise vom Betriebssystem bereitgestellt und sind für die Wiederherstellung des Systemstatus, die Aufzeichnung von Fehlerinformationen, die Durchführung notwendiger Wiederherstellungsvorgänge oder die Reaktion auf Interrupts verantwortlich.
7. Interrupt-Priorität und Maskierung
Der 80386-Prozessor unterstützt Interrupt-Prioritäts- und Maskierungsmechanismen und verwaltet die Priorität und Maskierung von Hardware-Interrupts über den PIC (Programmable Interrupt Controller). Interrupts auf hoher Ebene können die Verarbeitung von Interrupts auf niedriger Ebene unterbrechen, um eine rechtzeitige Reaktion auf kritische Ereignisse sicherzustellen.
3.2 Schutzmechanismus von 80386
1. Segmentierungsschutz
Der 80386-Prozessor verwendet einen Segmentierungsmechanismus zur Speicherverwaltung. Jedes Segment verfügt über einen Deskriptor, der die Basisadresse, Grenzen und Zugriffsrechte des Segments enthält. Der Segmentierungsschutz stellt sicher, dass Prozesse nur auf Speicherbereiche zugreifen können, für die sie berechtigt sind.
Segmentdeskriptor
Segmentdeskriptoren werden in der globalen Deskriptortabelle (GDT) und der lokalen Deskriptortabelle (LDT) gespeichert. Jeder Deskriptor enthält die folgenden Informationen:
- Basisadresse: Die Startadresse des Segments.
- Grenze: Die Größe des Segments, die die Endadresse des Segments angibt.
- Typ (Type) und Berechtigungsstufe (DPL): Der Typ des Segments (Codesegment, Datensegment, Systemsegment) und Zugriffsrechte.
- Segmentpräsenzbit (P): Ob sich das Segment im Speicher befindet.
Implementierung des Segmentierungsschutzes
Beim Zugriff auf den Speicher sucht der Prozessor anhand des Segmentselektors nach dem Segmentdeskriptor und führt die folgenden Prüfungen durch:
- Überprüfung der Basisadresse und der Grenzen: Stellen Sie sicher, dass die Zugriffsadresse im Bereich des Segments liegt.
- Berechtigungsprüfung: Stellen Sie sicher, dass die Zugriffsrechte dem Typ und der Berechtigungsstufe im Deskriptor entsprechen.
2. Paging-Schutz
Der Paging-Mechanismus verfeinert die Speicherverwaltung weiter, da jede Seite über eigene Zugriffsrechte verfügt. Der Paging-Schutzmechanismus wird über Seitenverzeichnisse und Seitentabellen implementiert.
Seitenverzeichnisse und Seitentabellen
- Seitenverzeichnis: Enthält den Seitenverzeichniseintrag (PDE), der auf die Seitentabelle verweist.
- Seitentabelle: Enthält Seitentabelleneinträge (PTEs), die auf tatsächliche physische Speicherseiten verweisen.
Jeder Seitentabelleneintrag enthält die folgenden Informationen:
- Basisadresse der Seite: Die Startadresse der physischen Speicherseite.
- Präsenzbit (P): Ob die Seite im Speicher ist.
- Lese-/Schreibbit (R/W): Ob die Seite beschreibbar ist.
- Benutzer-/Superuser-Bit (U/S): Zugriffsberechtigungen für die Seite.
Implementierung des Paging-Schutzes
Beim Zugriff auf den Speicher führt der Prozessor folgende Prüfungen durch:
- Überprüfung der Seitenexistenz: Überprüfen Sie, ob sich die Seite im Speicher befindet. Wenn nicht, wird ein Seitenfehler (Page Fault) ausgelöst.
- Lese-/Schreibprüfung: Überprüfen Sie, ob die Seite beschreibbar ist. Wenn Sie versuchen, auf eine nicht beschreibbare Seite zu schreiben, wird eine Schutzverletzung ausgelöst.
- Benutzer-/Superuser-Überprüfung: Überprüfen Sie die Zugriffsberechtigungen, um sicherzustellen, dass Benutzermoduscode nicht auf Kernelmodusseiten zugreifen kann.
3. Berechtigungsstufe
Der 80386-Prozessor unterstützt 4 Berechtigungsstufen (Privilege Levels) von 0 bis 3. Je niedriger die Stufe, desto höher die Berechtigung.
- Berechtigungsstufe 0 (Ring 0): Die höchste Berechtigungsstufe, die normalerweise im Betriebssystemkernel verwendet wird.
- Berechtigungsstufe 1 (Ring 1)UndBerechtigungsstufe 2 (Ring 2): Mittlere Berechtigungsstufe, selten verwendet.
- Berechtigungsstufe 3 (Ring 3): Die niedrigste Berechtigungsstufe, die normalerweise von Anwendungen im Benutzermodus verwendet wird.
Implementierung von Berechtigungsstufen
Berechtigungsstufen werden durch die folgenden Mechanismen implementiert:
- Codesegment-Berechtigungsstufe (CPL): Die Berechtigungsstufe des aktuell ausgeführten Codes.
- Datensegment-Berechtigungsstufe (DPL): Die Berechtigungsstufe des Datensegments, die bestimmt, welche CPLs auf das Segment zugreifen können.
- Berechtigungsstufe (RPL) anfordern: Die Berechtigungsstufe des Segmentselektors, die die angeforderte Zugriffsberechtigung angibt.
Bei der Durchführung einer Zugriffsoperation prüft der Prozessor die CPL, DPL und RPL, um die Einhaltung der Berechtigungsstufenregeln sicherzustellen. Bei Nichtübereinstimmung wird eine allgemeine Schutzverletzung ausgelöst.
4. Systemsegment- und Gate-Deskriptoren
Der 80386-Prozessor unterstützt Systemsegment- und Gate-Deskriptoren für die Aufgabenumschaltung und Interrupt-Verarbeitung.
Systemsegment
- Aufgabenstatussegment (TSS): Enthält Kontextinformationen zur Aufgabe und wird für den Aufgabenwechsel verwendet.
- Lokale Deskriptortabelle (LDT): Enthält aufgabenspezifische Segmentdeskriptoren.
Gate-Deskriptor
- Tor unterbrechen: Wird für die Interrupt-Verarbeitung verwendet und springt zum Interrupt-Handler.
- Fallentor: Wird zur Ausnahmebehandlung verwendet und maskiert keine Interrupts.
- Aufgabentor: Wird zum Aufgabenwechsel und zum Wechseln von Aufgaben über TSS verwendet.
5. Aufgabenwechsel
Der 80386-Prozessor unterstützt Hardware-Task-Switching, das über das Task-Status-Segment (TSS) implementiert wird. Der Taskwechsel kann durch Interrupts, Ausnahmen oder Task Gates ausgelöst werden.
Aufgabenstatussegment (TSS)
Das TSS enthält den Registerstatus der Task, Segmentregister, Stapelzeiger und Task-Links. Beim Aufgabenwechsel speichert der Prozessor den Status der aktuellen Aufgabe im TSS und lädt den Status der neuen Aufgabe.
Aufgabenwechselprozess
- Aktuellen Aufgabenstatus speichern: Speichern Sie die Register und Segmentregister der aktuellen Aufgabe in TSS.
- Neuen Aufgabenstatus laden: Laden Sie Register und Segmentregister aus dem TSS der neuen Aufgabe.
- Aufgabenregister (TR) aktualisieren: Zeigt auf den TSS der neuen Aufgabe.
6. Interrupt- und Ausnahmebehandlung
Interrupt- und Ausnahmebehandlung sind wichtige Bestandteile des 80386-Prozessorschutzmechanismus. Interrupts und Ausnahmen werden über die Interrupt-Deskriptortabelle (IDT) verwaltet und während der Verarbeitung werden Berechtigungsprüfungen und Kontextwechsel durchgeführt.
Verfahren zur Interrupt- und Ausnahmebehandlung
- Kontext speichern: Speichern Sie die aktuellen CS, EIP und EFLAGS im Stapel.
- Finden Sie IDT: Suchen Sie den entsprechenden Deskriptor von IDT basierend auf der Interrupt- oder Ausnahmenummer.
- Berechtigungsprüfung: Überprüfen Sie CPL und DPL, um eine rechtsgültige Erlaubniskonvertierung sicherzustellen.
- Springe zum Hundeführer: Laden Sie neue CS und EIP und führen Sie den Handler aus.
- Kontext wiederherstellen:passieren
IRET
Stellen Sie CS, EIP und EFLAGS wieder her und kehren Sie in den Zustand zurück, bevor die Unterbrechung oder Ausnahme auftrat.
3.3 Windows-Schutzmechanismus
1. Benutzermodus und Kernelmodus
Das Windows-Betriebssystem unterteilt den Ausführungsmodus des Prozessors in Benutzermodus (Benutzermodus) und Kernelmodus (Kernelmodus):
- Benutzermodus: Führt eine Anwendung mit eingeschränktem Zugriff und ohne direkten Zugriff auf Hardware- oder Kernel-Datenstrukturen aus.
- Kernel-Modus: Führt Kernkomponenten des Betriebssystems und Gerätetreiber mit vollem Zugriff aus und kann privilegierte Anweisungen ausführen.
Umschalten zwischen Benutzermodus und Kernelmodus
Das Umschalten zwischen Benutzermodus und Kernelmodus wird normalerweise durch Systemaufrufe implementiert. Die Anwendung fordert Kernel-Dienste an, indem sie die System-API aufruft, und das Betriebssystem schaltet die Anforderung zur Verarbeitung in den Kernel-Modus.
2. Speicherschutz
Virtueller Speicher
Windows verwendet einen virtuellen Speichermechanismus, um jedem Prozess einen unabhängigen Adressraum bereitzustellen. Dieser Mechanismus verhindert, dass Prozesse direkt auf den Speicher anderer zugreifen, und verbessert so die Sicherheit und Stabilität des Systems.
- Seitentabelle: Jeder Prozess verfügt über eine unabhängige Seitentabelle, die virtuelle Adressen physischen Adressen zuordnet.
- Seitenaustausch: Wenn der physische Speicher knapp wird, lagert das Betriebssystem selten verwendete Seiten in die Auslagerungsdatei auf der Festplatte aus.
Speichersegment
Windows verwendet Speichersegmente, um verschiedene Arten von Daten und Code zu unterteilen, und jedes Segment verfügt über unterschiedliche Zugriffsrechte und Schutzmechanismen. Beispielsweise ist das Codesegment schreibgeschützt, während das Datensegment schreibgeschützt ist.
3. Zugangskontrolle
Das Windows-Betriebssystem verwendet eine Zugriffskontrollliste (Access Control List, ACL), um Benutzer- und Prozesszugriffsrechte auf Ressourcen zu verwalten.
Sicherheitskennung (SID)
Jeder Benutzer, jede Gruppe und jeder Computer verfügt über eine eindeutige Sicherheitskennung (SID), die ihn identifiziert.
Zugriffskontrollliste (ACL)
Jedes Objekt (z. B. eine Datei, ein Verzeichnis, ein Registrierungsschlüssel usw.) verfügt über eine Zugriffskontrollliste, die eine Reihe von Zugriffskontrollelementen (ACEs) enthält, die die Zugriffsrechte verschiedener Benutzer und Gruppen für das Objekt definieren.
4. Privilegienverwaltung
Windows steuert über die Berechtigungsverwaltung, was Prozesse und Benutzer tun können. Bestimmte Berechtigungen werden nur bestimmten Benutzergruppen (z. B. Administratoren) gewährt, z. B. das Installieren von Treibern, der Zugriff auf Systemprotokolle usw.
Sicherheitsstrategie
Windows bietet eine Reihe von Sicherheitsrichtlinien, mit denen Sie Benutzerkontensteuerung (UAC), Kennwortrichtlinien, Überwachungsrichtlinien usw. konfigurieren können, um die Systemsicherheit zu verbessern.
5. Interrupt- und Ausnahmebehandlung
Windows-Betriebssysteme verwenden Interrupt- und Ausnahmebehandlungsmechanismen, um Hardware-Interrupts, Software-Interrupts und Prozessorausnahmen zu verwalten.
Interrupt-Behandlung
Der Interrupt-Handler (Interrupt Service Routine, ISR) ist für die Verarbeitung von Hardware-Interrupts verantwortlich und stellt sicher, dass externe Geräte rechtzeitig reagieren können.
Ausnahmebehandlung
Ausnahmehandler behandeln Prozessorausnahmen wie Fehler bei der Division durch Null, Seitenfehler usw., um sicherzustellen, dass das System bei Auftreten von Ausnahmen geeignete Wiederherstellungsmaßnahmen ergreifen kann.
6. Multitasking
Windows ermöglicht durch den Multitasking-Mechanismus die gleichzeitige Ausführung mehrerer Prozesse und Threads. Das Betriebssystem verwendet einen Scheduler, um die Ausführung von Prozessen und Threads zu verwalten und sicherzustellen, dass Systemressourcen gerecht zugewiesen werden.
Thread-Planung
Windows verwendet einen Prioritätsplanungsalgorithmus, um CPU-Zeitscheiben basierend auf der Priorität und dem Status des Threads (z. B. bereit, wartend, ausgeführt usw.) zuzuweisen.
Prozessisolation
Jeder Prozess verfügt über einen unabhängigen virtuellen Adressraum und Ressourcen, wodurch verhindert wird, dass ein Prozess den Betrieb eines anderen Prozesses beeinträchtigt, und die Systemstabilität verbessert wird.
7. Sicherheitsfunktionen
Windows bietet eine Reihe von Sicherheitsfunktionen wie Data Execution Prevention (DEP), Address Space Layout Randomization (ASLR) usw., um die Schutzfunktionen des Systems zu verbessern.
Datenausführungsverhinderung (DEP)
DEP verhindert die Codeausführung im Datensegment, indem bestimmte Speicherbereiche durch eine Kombination aus Hardware und Software als nicht ausführbar markiert werden.
Adressraum-Layout-Randomisierung (ASLR)
ASLR ordnet den Speicheradressraum eines Prozesses zufällig zu, wodurch es für Angreifer schwieriger wird, Schwachstellen auszunutzen.