Kapitel 1 - Die Philosophie von QNX
Die Philosophie von QNX
Dieses Kapitel beinhaltet die folgenden Themen:
Was ist QNX?
Die Hauptaufgabe eines Betriebssystems ist die Verwaltung der Ressourcen eines Computers. Alle Aktivitäten in dem System - Einplanung von Applikationsprogrammen, Dateien auf die Festplatte schreiben, Daten über das Netzwerk verschicken, und so weiter - sollten so nahtlos und transparent wie überhaupt möglich zusammen funktionieren.
Manche Umgebungen verlangen ein strengeres Ressourcen- und Scheduling-Management als andere. Echtzeitapplikationen zum Beispiel, sind auf das Betriebssystem angewiesen, um mehrere Ereignisse innerhalb fester Zeitvorgaben erledigen zu können. Je schneller das Betriebssystem reagiert, um so mehr ``Raum'' bleibt der Echtzeitanwendung, um ihre Aufgaben zu erledigen.
Das QNX Betriebssystem ist ideal für Echtzeit-Applikationen. Es unterstützt Multitasking, prioritätsgesteuertes, verdrängendes Scheduling und schnelle Kontextumschaltung - dies alles sind essentielle Bestandteile eines Echtzeitsystems.
QNX ist bemerkenswert flexibel. Entwickler können sehr einfach das Betriebssystem an die Bedürfnisse ihrer eigenen Applikationen anpassen. Beginnend bei einer minimalen Konfiguration eines Kernel mit nur ein paar kleinen Modulen bis hin zu einem voll ausgebauten, netzwerkweiten System, welches hunderte von Benutzern bedient. QNX läßt sich so einrichten, daß Sie lediglich die Ressourcen installieren, die Sie für die Erledigung Ihrer Arbeiten tatsächlich benötigen.
QNX erreicht diese einmalige Übereinstimmung aus Effizienz, Modularität, und Einfachheit durch zwei fundamentale Prinzipien:
- Mikrokernel Architektur
- Nachrichtenbasierte Kommunikation zwischen den Prozessen
Die Mikrokernel Architektur von QNX
QNX besteht aus einem kleinen Kern mit einer Gruppe von kooperierenden Prozessen. Wie die folgende Illustration zeigt, erscheint diese Struktur eher wie ein Team als wie eine Hierarchie. So als würden mehrere Spieler gleichen Ranges miteinander und mit ihrem ``Quarterback''-Kernel interagieren.
Der QNX Mikrokernel koordiniert die System-Manager.
Ein echter Kernel
Der Kernel ist das Herz eines jeden Betriebssystems. In einigen Systemen beinhaltet der ``Kernel'' so viele Funktionen, daß er in jeder Hinsicht das eigentliche Betriebssystem darstellt!
Aber der QNX Mikrokernel ist wirklich ein Kern. Zuallererst einmal ist der QNX Mikrokernel, wie der Kernel eines Echtzeitprogrammes, sehr klein. Zweitens ist er optimiert, um nur zwei essentielle Dienste anzubieten:
- Nachrichten versenden (Message Passing) - der Mikrokernel verarbeitet das Routing aller Nachrichten im gesamtem System
- Ablaufplanung (Scheduling) - Der Ablaufplaner (Scheduler) ist ein Teil des Mikrokernels und wird aufgerufen, wann immer ein Prozeß in Folge einer Nachricht oder eines Interrupts seinen Zustand ändert
Im Gegensatz zu Prozessen wird der Mikrokernel selber niemals für seine Ausführung eingeplant. Er wird lediglich als direktes Ergebnis von Kernelaufrufen, entweder von einem Prozeß oder durch einen Hardwareinterrupt, angesprochen.
Systemprozesse
Alle QNX Dienste, bis auf die des Mikrokernels, werden durch Standard-QNX-Prozesse zur Verfügung gestellt. Eine typische QNX Konfiguration beinhaltet die folgenden Systemprozesse:
- Prozeß-Manager (Proc)
- Dateisystem-Manager (Fsys)
- Geräte-Manager (Dev)
- Netzwerk-Manager (Net)
Systemprozesse versus Anwenderprozesse
Systemprozesse unterscheiden sich praktisch nicht von selbstgeschriebenen Anwendungsprogrammen der Benutzer - sie haben keine privaten oder versteckten Schnittstellen, welche für Benutzerprozesse nicht verfügbar wären.
Genau diese Architektur ist es, die QNX diese Skalierbarkeit verleiht. Weil die meisten Betriebssystemdienste durch Standard- QNX-Prozesse angeboten werden, ist es sehr leicht, das Betriebssystem zu erweitern: Sie schreiben einfach neue Programme, um neue Dienste anzubieten!
Tatsächlich kann die Grenze zwischen dem Betriebssystem und den Applikationen leicht ineinander übergehen. Der einzige echte Unterschied zwischen Systemdiensten und Applikationen ist der, daß Betriebssystemdienste Ressourcen für die Clients verwalten.
Stellen wir uns vor, Sie hätten einen Datenbankserver geschrieben. Wie sollte ein solcher Prozeß klassifiziert werden?
Genauso wie ein Dateisystem Anfragen akzeptiert (in QNX sind dies Nachrichten), um Dateien zu öffnen, sie zu lesen und zu schreiben, so stellt sich auch ein Datenbankserver dar. Auch wenn die Anfragen an den Datenbankserver komplizierter sein können, sind sich beide Server doch in dem Punkt ähnlich, daß sie einen Satz von einfachen Befehlen bieten (realisiert durch Nachrichten), welche nacheinander Zugriff auf eine Ressource ermöglichen. Beide sind unabhängige Prozesse, welche durch jeden Endbenutzer geschrieben und bei Bedarf gestartet werden können.
Ein Datenbankserver könnte bei der einen Installation als Systemprozeß deklariert werden, bei der anderen als Applikation. Es ist wirklich gleichgültig! Wichtig ist, daß QNX es zuläßt, solche Prozesse sauber zu implementieren, wobei es nicht nötig ist, die Standardkomponenten des Betriebssystems zu modifizieren.
Gerätetreiber
Gerätetreiber sind Prozesse, welche das Betriebssystem von dem Umgang mit den Details für die Unterstützung spezifischer Hardware abschirmen.
Da Treiber wie normale Prozesse starten, hat das Hinzufügen neuer Treiber zu QNX keinen Einfluß auf andere Teile des Betriebssystems. Die einzige Änderung, die Sie in Ihrer QNX Umgebung machen müssen, ist den neuen Treiber zu starten.
Nachdem die Treiber ihre Initialisierung vervollständigt haben, können sie wie folgt erscheinen:
- als Standardprozesse, indem sie einfach Erweiterungen der Systemprozesse werden, welchen sie zugeordnet sind
- als Standardprozesse, indem sie ihre Identität bewahren
Interprozeßkommunikation (IPC)
Wenn einige Prozesse in Konkurrenz miteinander laufen, wie in typischen Echtzeit-Multitasking-Umgebungen, muß das Betriebssystem einen Mechanismus liefern, welcher es den Prozessen ermöglicht, miteinander zu kommunizieren.
IPC ist der Schlüssel zum Design einer Applikation, welche aus einer Gruppe kooperierender Prozesse besteht, in der jeder Prozeß einen wohl definierten Teil der ganzen Arbeit verrichtet.
QNX unterstützt einen einfachen aber leistungsfähigen Satz von IPC-Werkzeugen, welche die Entwicklung von Applikationen, die aus kooperierenden Prozessen bestehen, sehr einfach gestalten.
QNX als Message-Passing-Betriebssystem
QNX war das erste kommerzielle Betriebssystem seiner Art, welches Message Passing als fundamentale Grundlage für die IPC benutzt. QNX verdankt vieles seiner Leistung, Einfachheit und Eleganz der kompletten Integration des Message Passing innerhalb des gesamten Systems.
In QNX gilt eine Nachricht als ein Paket von Bytes, welches von einem Prozeß zum anderen geschickt wird. QNX kümmert sich nicht um den Inhalt einer Nachricht - die enthaltenen Daten haben nur für den Sender und für den Empfänger eine Bedeutung, für niemanden sonst.
Message Passing erlaubt es Prozessen nicht nur, Daten untereinander auszutauschen, sondern es bietet auch die Möglichkeit, die Ausführung verschiedener Prozesse zu synchronisieren. Durch das Senden, Empfangen und Antworten auf Nachrichten durchlaufen Prozesse verschiedene ``Zustandsänderungen '', welche Auswirkungen darauf haben, wann und wie lange sie laufen. Da der Mikrokernel ihre Zustände und Prioritäten kennt, kann er alle Prozesse so effizient wie möglich einplanen, um die verfügbaren CPU-Ressourcen so optimal wie möglich zu verteilen. Diese einzelne, konsistente Methode - das Message Passing - funktioniert somit konstant im gesamten System.
Echtzeit- und andere anwendungskritische Applikationen benötigen normalerweise eine zuverlässige Form des IPC, da die Prozesse, welche solche Applikationen hervorbringen, in starker Wechselbeziehung stehen. Die Disziplin, die durch das Message-Passing-Design von QNX entsteht, ist Garant für Ordnung und Zuverlässigkeit der Applikationen.
QNX als Netzwerk
In seiner einfachsten Form bietet ein LAN einen Mechanismus, um Dateien und periphere Geräte über verschiedene miteinander verbundene Computer gemeinsam zu nutzen. QNX geht sehr viel weiter über dieses einfache Konzept hinaus und integriert das gesamte Netzwerk in eine einzige, homogene Gruppe von Ressourcen.
Jeder Prozeß auf jeder Machine im Netzwerk kann direkt auf jede Ressource jeder anderen Maschine zugreifen. Aus der Sicht der Applikation gibt es keinen Unterschied zwischen einer lokalen oder entfernten Ressource - Applikationen müssen keine besonderen Fähigkeiten verliehen werden, um entfernte Ressourcen nutzen zu können. Tatsächlich würde ein Programm besonderen Code benötigen, um entscheiden zu können, ob eine Ressource, wie eine Datei oder ein Gerät auf dem lokalen Computer oder auf einem anderen Knoten im Netzwerk, existiert!
Benutzer können überall im Netzwerk auf Dateien zugreifen, jegliche peripheren Geräte ansprechen und Applikationen auf jeder Maschine im Netzwerk ausführen (vorausgesetzt, Sie haben die entsprechende Berechtigung). Prozesse können auf die gleiche Art im gesamten Netzwerk miteinander kommunizieren. Um es noch einmal zu sagen, die Message-Passing-IPC von QNX steht für ein solch transparentes Arbeiten im Netzwerk.
Das Modell des einzelnen Computers
QNX ist vom Grund auf als ein netzwerkweites Betriebssystem entwickelt worden. Manchmal erscheint ein QNX-Netzwerk eher wie ein Mainframecomputer als eine Kombination mehrerer Mikrocomputer. Benutzer sehen lediglich eine Fülle von Ressourcen, welche von allen Applikationen genutzt werden können. Im Gegensatz zu einem Mainframecomputer bietet QNX jedoch eine schnell reagierende Umgebung, da die notwendige Computerleistung von jedem Knoten im Netzwerk bereitgestellt werden kann, um die Anforderungen eines jeden Benutzers zu befriedigen.
In einer Prozeßsteuerungsumgebung können zum Beispiel speicherprogrammierbare Steuerungen und andere Echtzeit-Ein-/Ausgabe-Geräte mehr Ressourcen benötigen als andere, weniger kritische Applikationen, wie eine Textverarbeitung. Das QNX-Netzwerk ist in der Lage, beide Typen von Applikationen gleichzeitig zu unterstützen - QNX läßt die Computerleistung dahin fokussieren, wo und wann sie gebraucht wird, ohne Rechenleistung auf Ihrer lokalen Maschine zu verlieren.
Flexibles Arbeiten im Netzwerk
QNX-Netzwerke können aus unterschiedlicher Hardware und Industriestandard-Protokollen zusammengefügt werden. Da diese für Benutzer und Applikationen komplett transparent sind, können neue Netzwerkarchitekturen zu jeder Zeit hinzugefügt werden, ohne das Betriebssystem zu beeinflussen.
![]() | Die Liste spezifischer, von QNX unterstützter Netzwerkhardware, wird im Laufe der Zeit erweitert. Um Details zu erfahren, konsultieren Sie die Dokumentation der von Ihnen genutzten Netzwerkhardware. |
Jedem Knoten in einem QNX-Netzwerk wird eine eindeutige Nummer vergeben, welche ihn eindeutig identifiziert. Diese Nummer ist das einzige sichtbare Zeichen, um festzustellen, ob QNX als Netzwerk oder als ein Ein-Prozessor-Betriebssystem betrieben wird.
Dieser Grad an Transparenz ist ein weiteres Beispiel für die besondere Leistung der Message-Passing-Architektur von QNX. In vielen Systemen werden wichtige Funktionen, wie Arbeiten im Netzwerk, IPC, oder einfach die Nachrichtenübertragung direkt auf dem Betriebssystem aufgesetzt, anstatt sie direkt in sein Innerstes zu integrieren. Das Ergebnis ist oftmals ein umständliches, uneffizientes "doppelt standardisiertes" Interface, in welchem die Kommunikation zwischen Prozessen eine Sache ist, während der Zugriff auf das private Interfaces eines mysteriösen monolithischen Kernels eine andere Sache ist!
Auf der anderen Seite basiert QNX auf dem Prinzip, daß effektive Kommunikation der Schlüssel zu effektiver Verarbeitung ist. Die Vermittlung von Nachrichten formt somit die Ecksteine der Architektur von QNX und steigert die Effizienz aller Transaktionen über alle Prozesse durch das gesamte System, entweder über ein Bussystem oder über einige Kilometer Koaxstrecke.
Lassen Sie uns nun etwas genauer auf die Struktur und die Funktionen von QNX eingehen.