Im Gegensatz zu Windows 3.x unterstützt Windows 95 den 80386-Protected Mode mit allen seinen Vorteilen. Das bringt für die Programmierung erhebliche Erleichterungen mit sich: Unterstützung von 32-Bit Zeigern für Anwendungen (keine Segment:Offset Zeiger mehr), echtes "pre-emptives" Multitasking, Verwendung des Schutzkonzeptes zur Sicherung von Anwendungen und dem Betriebssystemkern.
BegriffeIm "Wortschatz" von Windows 95 tauchen unter anderem die folgenden Begriffe auf:
Multitasking unter Windows 95 findet auf Thread-Ebene statt, d.h. der Prozessor wechselt zwischen einzelnen Threads (nicht etwa Prozessen). Multitasking ist "pre-emptiv", der Programmcode eines Threads kann an beliebiger Stelle unterbrochen und bei Bedarf wieder fortgesetzt werden.
SpeicherverwaltungDie Speicherverwaltung von Windows stellt jeder Anwendung (bzw. jedem Prozeß) einen maximal 4 GB großen, linearen Speicherbereich zur Verfügung. Die Anwendung kann dann ohne die Probleme von 64 KB großen Segmenten beliebig (unter Nutzung von 32Bit-Zeigern) in diesem Speicherbereich auf Daten oder Programmcode zugreifen. Damit dieser Anwendung überhaupt ein so großer Adressraum zur Verfügung gestellt werden kann (die meisten PC besitzen nun einmal keinen 4GB großen physischen Hauptspeicher), muß die virtuelle Speicherverwaltung des Prozessors, das "Paging" benutzt werden. Nicht benötigte Speicherbereiche können so auf die Festplatte ausgelagert werden und erlauben es Windows 95, Programme auszuführen, die mehr Speicher benutzen als physisch vorhanden ist. Dazu werden bei der Initialisierung einer Anwendung (bzw. eines Prozesses) nur die Speicherseiten in den Pagetables als benutzt gekennzeichnet, die tatsächlich mit Programmcode oder Daten belegt sind. Alle anderen Seiten des 4 GB Adressraums erhalten das Attribut: not_present (Vgl. 3 Spezielle Protected Mode Funktionen, Paging) und lösen bei einem Zugriffsversuch der Anwendung auf die Seite eine Exception aus. Windows 95 kann dann prüfen, ob es sich bei dem Zugriff um einen Fehler des Programmes handelt oder ob es Speicherseiten aus der Auslagerungsdatei (von der Festplatte) in den Speicher laden muß.
Ein weiterer Vorteil des Paging besteht in der Möglichkeit, mehreren Prozessen den (Lese-) Zugriff auf den gleichen Speicherbereich zu gestatten. Der Systemkern kann durch das Paging eine Speicherseite über die Pagetables in den Adressraum von mehreren Prozessen einblenden. Das hat zur Folge, daß mehrere Prozesse ohne ihr Wissen auf ein- und dieselbe Page zugreifen!
Solange nur lesend auf eine solche Page zugegriffen wird bzw. der Inhalt der Page als Programmcode interpretiert und ausgeführt wird, entstehen dadurch auch keine Probleme. Ein Schreibzugriff darf aber auf keinen Fall möglich sein, da sich dadurch mehrere Prozesse gegenseitig im Speicher überschreiben würden!
Memory Mapped Files (MMF)Ein weiteres Konzept der virtuellen Speicherverwaltung, das unter Windows 95 zur Anwendung kommt, sind die sogenannten Memory Mapped Files (Speicherabbilddateien). Bei diesem Konzept kann eine Datei auf den virtuellen Speicher abgebildet werden. Für ein Anwendungsprogramm scheint es dann so, als ob die entsprechende Datei komplett im Speicher steht. Das ist jedoch nicht der Fall. Obwohl der Speicherbereich innerhalb der Pagetables als belegt gekennzeichnet wurde, sind die entsprechenden Seiten als nicht-present gekennzeichnet. Versucht das Anwendungsprogramm auf eine, als nicht-present gekennzeichnete Seite zuzugreifen, ist eine Exception die Folge. Der entsprechende Exceptionhandler kann dann den Inhalt der betroffenen Speicherseiten aus der Datei nachladen, die Seiten als "present" kennzeichnen und die Ausführung des entsprechenden Programms fortsetzen.
Das MMF-Konzept bringt natürlich eine erhebliche Erleichterung bei der Arbeit mit Dateien mit sich. Denn durch die MMF ist der Zugriff auf Dateien genauso einfach durchführbar wie die Arbeit mit Feldern (Arrays). Anwendung kann das MMF-Prinzip auch beim Laden von Programmen finden. Dabei bildet der Programm-Loader das auszuführende Programm selbst als Speicherbereich ab. Wird die Ausführung des Programmcodes gestartet, löst der Programmcode beim Durchlaufen von noch nicht geladenen Seiten Exceptions aus. Diese können wiederum vom Exceptionhandler genutzt werden, um die entsprechenden Seiten nachzuladen. Programmteile, die nie genutzt werden, müssen durch die MMF auch nie geladen werden. Hinzu kommt, daß ein schnellerer Start der Anwendungsprogramme ermöglicht wird.
Aufbau des AdressraumsDie Ablaufsteuerung (Scheduler) in Windows 95 sorgt dafür, daß die Adressräume der einzelnen Prozesse in den gleichen linearen Adressraum von Windows 95 eingeblendet werden. Abbildung 5.1 zeigt diesen Adressraum und beschreibt die dabei durchgeführte Aufteilung in unterschiedliche Systemkomponeten.
Abb. 5.1 Adressraum von Windows 95
Wie es sich für ein im Protected Mode arbeitendes Betriebssystem gehört, benutzt Windows 95 natürlich auch die Schutzmechanismen des Protected Mode. Dabei werden jedoch nur 2 der 4 möglichen Privilegstufen des Prozessors unterstützt (Vergleiche Kapitel 2 Protected Mode Einführung). In Ring 0, der am höchsten privilegierten Stufe, wird der eigentliche Betriebssystemkern ausgeführt. Andere Betriebssystemkomponeten und Anwendungen laufen in Ring 3. Dadurch, daß es nur einem Programm in Ring 0 möglich ist, auf alle Systemkomponenten zuzugreifen (z.B. I/O Ports), kann es auch die Kontrolle über die Anwendungsprogramme behalten. Ein Anwendungsprogramm kann sich damit zwar selbst zum Absturz bringen, der Systemkern bleibt jedoch (bei entsprechender Programmierung) stabil, denn dafür sorgt bereits der Prozessor.