In jedem Betriebssystem existiert eine Komponente, die Hardwareressourcen zentral verwaltet, um Konflikte bei Zugriffen zu vermeiden. Wie aus Tab. 3.1 erkenntlich ist, sollten auch die Programmierung des Interrupt-Controllers sowie PCI-Bus-Zugriffe zentral gekapselt sein.
Würde man jeder Treiberinstanz wahlfreien Zugriff gestatten, wären Konflikte vorprogrammiert, da viele Operationen nicht atomar (also inherent sequentiell) durchführbar sind und mehrere Schritte benötigen.
Ein Beispiel ist die Konfiguration eines Gerätes am PCI-Bus. Hierbei werden nacheinander zwei 32-Bit Ports -- Adreß- und Datenport -- genutzt: 1. Geräteregister addressieren durch Schreiboperation in Adreßport und 2. Konfigurationsregister lesen/schreiben durch Lese/Schreiboperation auf Datenport.
Im DROPS DDE ist die benötigte Komponente der I/ O Server:
Ein Vorteil des I/ O Servers ist die Möglichkeit, systemweite Politiken für Ressourcen mit Hilfe einer zentralen Instanz durchzusetzen. Ich gehe hier aber nicht näher auf diese Möglichkeit ein, da für DROPS noch kein Sicherheitskonzept entwickelt wurde und dieses nicht Gegenstand der Arbeit sein soll.
Dieser Entwurf ist ein I/ O Server mit dem in Abb. 3.1 dargestellten Aufbau. Die Schnittstellen werden von zwei Threads zur Verfügung gestellt, die sich beim Namensdienst als ioserver und omega0 registrieren. Im Omega0-Teil ist der weitere Ablauf und das Threading wie in [LH00] beschrieben. Auf der anderen Seite erfüllt der ioserver-Thread Anfragen betreffend Ressourcen-Management und PCI.
Eine weitere Aktivität innerhalb des Servers ist ein Timer, welcher mit Hilfe der Zeitangabe des Mikrokerns einen Timer-Tick auf der IO Info Page zur Verfügung stellt. Diese Informations-Seite wird jedem Klienten während der Initialisierung eingeblendet und unterstützt eine DDE-weite Zeitbasis.
Der I/ O Server stützt sich außerdem auf Funktionalitäten des Common L4 Environment und beinhaltet deshalb auch dessen lokale Umgebung.