2 Grundlagen Windows NT

Dieses Kapitel soll die Entstehung und den grundlegenden Aufbau von Windows NT erläutern. Im Vordergrund stehen dabei die Ziele der Entwickler, da sie die letztendlich verwendeten Konzepte entscheidend beeinflußt haben.

2.1 Entwicklungsgeschichte zurück nach oben nächster Abschnitt Inhaltsverzeichnis

1980 entwickelten Microsoft und IBM ein Betriebssystem namens OS/2. Neben vielen Vorteilen hatte dieses Betriebssystem einen entscheidenden Nachteil. Es ist in Assembler geschrieben und als Zielplattform diente ein Intel i80x286 als Einprozessorrechner. Als Mitte der 80er Jahre die RISC Prozessoren zunehmend an Einfluß gewannen und sich auch die CISC Familie rapide weiterentwickelte, entschieden Microsoft und IBM, ein neues Betriebssystem für die 90er zu entwickeln – OS/2 NT.

Laut [History98] verkündete Microsoft im November 1988 offiziell, daß mehrere ehemalige Digital Mitarbeiter eingestellt wurden, um eine neue Version von OS/2 zu entwickeln. 1990 wurde aber Microsofts Windows 3.1 so ein großer Erfolg, daß im August des gleichen Jahres die Entscheidung fiel, aus OS/2 NT nun Windows NT zu machen. Die Allianz zwischen Microsoft und IBM zerbrach aus diesem Grund ein halbes Jahr später. Im Juli 1993 wurde mit einiger Verspätung die erste Version von Windows NT mit der Versionsnummer 3.1 veröffentlicht.

Bei der Entwicklung des neuen Betriebssystems sollten laut [Custer93] folgende Entwicklungsziele besonders im Vordergrund stehen:

Es soll möglich sein, das System zu erweitern, bzw. neue Hardware zu unterstützen, ohne die existierende Codebasis zu beeinflussen.

Das Betriebssystem soll sich einfach an möglichst viele Hardwareplattformen anpassen lassen.

Das System soll sich selbst vor internen und externen Fehlern schützen. Anwendungen sollen unabhängig voneinander funktionieren und dürfen die Stabilität des Betriebssystems nicht beeinflussen.

Es sollen möglichst viele existierende Programme und Hardware unterstützt werden.

Trotz der anderen Entwicklungsziele soll das System auf jeder Hardwareplattform so schnell wie möglich arbeiten.

 

2.2 Die Ziele bei der Entwicklung

 

2.2.1 Erweiterbarkeit zurück nach oben nächster Abschnitt Inhaltsverzeichnis

Eines der primären Ziele war, die Integrität des Windows NT Codes trotz ständiger Änderungen und Erweiterungen zu sichern. Dr. Richard Rashid und seine Mitarbeiter entwickelten an der Carnegie-Mellon Universität für das Betriebssystem Mach eine einzigartige Lösung für dieses Problem. Sie erzeugten eine Betriebssystem Basis mit einfachen Fähigkeiten. Applikationen, sogenannte Server, waren für die erweiterten Eigenschaften des Systems zuständig. So blieb die Basis des Betriebssystems stabil, während neue Server erstellt bzw. existierende verändert werden konnten.

Für Windows NT wurde dieses Design übernommen. Es besteht aus einem privilegierten Ausführungsteil (executive) und aus mehreren nichtprivilegierten Servern - sogenannten geschützten Untersystemen (protected subsystems). Der Ausdruck "privilegiert" bezieht sich auf einen Operationsmodus des Prozessors, in dem alle Maschineninstruktionen ausgeführt werden können und auf den gesamten Speicher des Systems zugegriffen werden darf. Im Gegensatz dazu sind im nichtprivilegierten Modus einige Instruktionen nicht erlaubt und es steht nur ein Teil des Speichers zu Verfügung. In der Terminologie von Windows NT wird der privilegierte Modus Kernelmodus (kernel mode) und der nichtprivilegierte Usermodus (user mode) genannt. Die Abbildung 2.2.1-1 veranschaulicht den Aufbau noch einmal.

Abbildung 2.2.1-1: Aufbau Windows NT

In Windows NT werden also Teile des Betriebssystems, nämlich die geschützten Untersysteme, im Usermodus ausgeführt. Diese Struktur erlaubt es, daß Untersysteme verändert bzw. hinzugefügt werden können, ohne die Stabilität des Ausführungsteils zu gefährden. Zusätzlich zu den geschützten Untersystemen enthält Windows NT zahlreiche andere Eigenschaften, um die Erweiterbarkeit zu sichern [Custer93]:

Der Ausführungsteil besteht aus mehreren voneinander getrennten Komponenten, die nur über funktionelle Schnittstellen miteinander kommunizieren. Neue Komponenten können auf modularem Weg zum Ausführungsteil hinzugefügt werden, indem die Schnittstellen anderen Komponenten mitgeteilt werden.

Es werden Objekte benutzt, um Systemressourcen darzustellen. Dies erlaubt es, die Ressourcen einfach zu verwalten. Wenn neue Objekte hinzugefügt werden, beeinflußt dies nicht die schon existierenden Objekte und erfordert auch keine Änderung des bisherigen Codes.

Das I/O System unterstützt Treiber, die geladen werden können, während das System läuft. Neue Dateisysteme, Geräte oder Netzwerke können unterstützt werden, indem neue Gerätetreiber geschrieben und diese bei Bedarf vom Betriebssystem geladen werden.

Anwendungen können Remote Dienste unabhängig von ihrer Position im Netzwerk aufrufen. Neue Dienste können auf einem Rechner installiert werden und stehen sofort für Anwendungen auf anderen Rechnern zur Verfügung.

 

2.2.2 Portabilität zurück nach oben nächster Abschnitt Inhaltsverzeichnis

Das zweite Entwicklungsziel ist eng mit der Erweiterbarkeit verbunden. Die Erweiterbarkeit erlaubt es, daß das Betriebssystem leicht mit neuen Funktionen ausgebaut werden kann. Die Portabilität ermöglicht es, das gesamte System auf eine neue Prozessorplattform anzupassen und dabei so wenig wie möglich am Code zu ändern.

In [Custer 93] werden allgemeine Richtlinien zum Erstellen von portablem Code beschrieben:

  1. Es muß soviel Sourcecode wie möglich in einer Sprache geschrieben werden, die auf allen Zielplattformen verfügbar ist. Dies bedeutet normalerweise, daß man eine höhere Programmiersprache verwendet, die möglichst standardisiert ist. Assembler scheidet deshalb von vorn herein aus, es sei denn, man portiert nur nach abwärtskompatiblen Hardwareplattformen (z.B. von i80386 nach i80486).
  2. Die physikalischen Gegebenheiten der Hardwareplattformen sollten relativ ähnlich sein. So ist es sehr schwierig, Code von einer 32 Bit Plattform in eine 8 Bit Umgebung zu konvertieren.
  3. Es ist wichtig, den Anteil des Codes, der direkt auf die Hardware zugreift, zu minimieren bzw. zu eliminieren.
  4. Wo hardwareabhängiger Code nicht zu vermeiden ist, sollte er soweit wie möglich isoliert werden.

Einige Eigenschaften von Windows NT, die das Portieren vereinfachen sollen [Custer93]:

Windows NT ist vorwiegend in C geschrieben, mit der Erweiterung von NTs strukturierter Ausnahmebehandlungsarchitektur. Die Entwickler wählten C, da es standardisiert ist und zahlreiche C Compiler und Entwicklungswerkzeuge verfügbar waren. Zusätzlich wurden kleinere Teile, wie z.B. der Grafikteil der Windowsumgebung und Teile der Netzwerkschittstelle, in C++ geschrieben. Assembler wurde nur für die Elemente des Systems benutzt, die direkt mit der Hardware kommunizieren (z.B. trap handler) und bei denen es auf optimale Geschwindigkeit ankommt. Der nichtportable Code wurde aber sorgfältig isoliert.

Einige Teile des Betriebssystems müssen auf prozessorabhängige Datenstrukturen und Register zugreifen. Dieser Code wurde in kleinen Modulen zusammengefaßt, die durch gleichartige Module für andere Prozessoren ersetzt werden können.

Windows NT kapselt plattformabhängigen Code in einer DLL, die auch als HAL (hardware abstraction layer) bekannt ist. Die HAL bildet eine abstrakte Sicht auf die Hardware (z.B. Cache, I/O Interrupt Controller usw.), so daß Highlevel Code bei der Portierung nicht geändert werden muß.

Windows NT wurde für Plattformen entwickelt, die einen linearen 32 Bit Adreßraum bieten und virtuellen Speicher unterstützen. Es kann auch nach anderen Plattformen portiert werden, aber dies ist mit höherem Aufwand verbunden.

 

2.2.3 Zuverlässigkeit und Robustheit zurück nach oben nächster Abschnitt Inhaltsverzeichnis

Zuverlässigkeit war das dritte Entwicklungsziel für Windows NT. Zuverlässigkeit bezieht sich auf zwei unterschiedliche, aber verwandte Ideen. Erstens sollte ein Betriebssystem vorhersehbar auf Fehler reagieren, auch wenn diese durch die Hardware verursacht wurden und zweitens sollte es sich und die Benutzer aktiv vor zufälligen oder absichtlichen Schäden durch Benutzerprogramme schützen.

Windows NTs primäre Maßnahme gegen Soft- und Hardwarefehler ist die strukturierte Ausnahmebehandlung (structured exception handling) . Dies ist eine Methode, um Fehler zu erkennen und einheitlich darauf zu reagieren. Sollte ein unnormales Ereignis eintreten, erzeugt entweder der Prozessor oder das Betriebssystem selbst eine Ausnahme (exception). Abhängig von dieser Ausnahme wird eine Behandlungsroutine aufgerufen, die auf den Fehler reagiert.

Die Robustheit wurde zusätzlich durch folgende Eigenschaften des Betriebssystems erweitert:

Folgende Eigenschaften schützen Windows NT vor externen Angriffen:

 

2.2.4 Kompatibilität zurück nach oben nächster Abschnitt Inhaltsverzeichnis

Mit Hilfe von geschützten Untersystemen ist Windows NT in der Lage, Programme auszuführen, die nicht für das System entwickelt wurden. Dabei muß man bei Windows NT zwischen zwei verschiedenen Stufen der Kompatibilität unterscheiden. Zum einen Kompatibilität auf Binärebene und zum anderen auf Sourcecodeebene, wobei die Kompatibilität auf Binärebene noch abhängig von der jeweiligen Prozessorplattform ist. Auf der Intel Plattform bietet NT binäre Kompatibilität mit existierenden Microsoft Anwendungen, die für MS-DOS, 16-Bit Windows, OS/2 oder LAN-Manager entwickelt wurden. Für MIPS RISC Plattformen wird die gleiche Kompatibilität mit Hilfe von Emulatoren erreicht.

Kompatibilität auf Sourcecodeebene bietet Windows NT für POSIX Anwendungen, die sich an das POSIX Betriebssystem Interface halten, das im IEEE Standard 1003.1 definiert wurde.

Zusätzlich unterstützt Windows NT auf allen Plattformen die Dateisysteme von MS-DOS (FAT), OS/2 (HPFS – high performance file system), CD-ROMs (CDFS) sowie das neue NT Dateisystem NFTS.

Laut [History98] beendete Microsoft im Jahr 1996 die Unterstützung von Windows NT für MIPS und PowerPC. Damit werden zur Zeit nur noch die Intel und Alpha Plattformen unterstützt.

 

2.2.5 Leistung zurück nach oben nächster Abschnitt Inhaltsverzeichnis

Das abschließende Ziel bei der Entwicklung von Windows NT war es, größtmögliche Leistung zu erzielen. Die folgenden Verfahren sollten laut [Custer93] dabei helfen, dieses Ziel zu erreichen:





written 1998/1999 by Guido Wischrop
all rights reserved