Hallo, hier einmal ein kurzer Teil des bisher vorhandenen Handbuches. Die noch neu hinzukommenden Kapitel sind noch nicht im Inhalt aufgeführt. Was haltet ihr davon? --------------------------------------------------------------------- [ Ausug aus dem neuen HydrixOS Handbuch ] --------------------------------------------------------------------- Inhalt ------ Inhalt Vorwort Teil A - Einführung in HydrixOS --------------------------------------------------------------------------- 1. Grundlagen 1.1 Das Prinzip von HydrixOS 1.2 Aufbau von HydrixOS 1.3 Virtueller Prozessor 1.4 Prozesse 1.5 Tasks 1.6 Threads 1.7 Virtueller Adressraum 1.8 Segmente 1.9 Ports und Nachrichten 1.10 Benutzer und Zugriffslisten 2. Speicherverwaltung 2.1 Kernelspeicher 2.2 Virtueller Adressraum 2.3 Lokale Segmente 2.4 Globale Segmente 2.5 Deskriptor Caches 2.6 Speicherauslagerung 2.7 Copy-on-write 3. Virtuelle Prozessoren 3.1 Organisation eines virtuellen Prozessors 3.2 Virtual Processor Interface (VPCI) 3.3 Kernelaufrufe 3.4 Problematik bei der Entwicklung eines VPCs 4. Prozesse und Threads 4.1 Organisation eines Prozesses 4.2 Erzeugen neuer Prozesse 4.3 Erzeugen neuer Threads 4.4 Kopieren von Prozessen und Threads 4.5 Fehlerbehandlung in Prozessen 4.6 Scheduling 5. Wege der Interprozesskommunikation 5.1 Erzeugen von Ports 5.2 Nachrichtenprozeduren 5.3 Globale Segmente für IPC 5.4 Synchronisation Globaler Segmente 6. Client-Server-Modell 6.1 Organisation eines Servers 6.2 Das HydrixOS-RPC-Format 6.3 Treiberaufrufe 7. Hardware-Spezifische Teile 7.1 IRQs 7.2 I/O Ports 7.3 Memory-Mapped I/O 8. Sicherheit unter HydrixOS 8.1 Automatische Sicherheitsprüfung 8.2 Empfohlener Logon-Mechanismus 9. Start des HydrixOS Betriebssystems 9.1 Maschinenseitiger Start 9.2 Kernelseitiger Start 9.3 Init-Prozess 9.4 Aufgaben des Init-Prozesses Teil B - Einführung in die Programmierung unter HydrixOS --------------------------------------------------------------------------- 1. Der HydrixOS Kernel 1.1 Organisation des Kernels 1.2 Wichtige Hintergrundfunktionen des Kernels 1.3 Wichtige Variablen im Kernel 1.4 Warum C? 1.5 Kernelversionen 1.6 Kompilieren des Kernels 1.7 Portieren des Kernels 1.8 Programmieren von VPCs 2. HydrixOS C v386 Bibliothek 2.1 Aufbau der Bibliothek 2.2 OS spezifische Funktionen der Bilbiothek 2.3 Funktionen nach C99-Standard 3. Programmierung von Treibern auf Init-Ebene 3.1 Wann ist ein Treiber ein Init-Treiber 3.2 Installation eines Init-Treibers 3.3 Aufbau eines Init-Treibers 3.4 Zugriff auf die Hardware Anhang --------------------------------------------------------------------------- A. Fehlernummern des Kernels A.1 Klassifizierung von Fehlern A.2 Übersicht über die Fehler A.3 Erläuterung der Fehler B. HydrixOS Systemaufrufe B.1 Sortierung nach Namen B.2 Sortierung nach Aufrufsnummern B.3 Erläuterung der Aufrufe C. Kernel interne Strukturen C.1 Tabellenstrukturen C.2 Current-Struktur D. HydrixOS FAQ D.1 Allgemeine Fragen D.2 Fragen zum Kernel D.3 Fragen zur Emulation E. Rechtliche Hinweise E.1 Änderungen am Dokument E.2 GNU Free Document License ........................................................................... =========================================================================== Vorwort =========================================================================== [ FEHLT NOCH ] =========================================================================== Teil A Einführung in HydrixOS =========================================================================== In diesem Teil werde ich versuchen, Ihnen die Grundlagen des HydrixOS Betriebssystems zu erklären. Es geht weniger um die praktische Programmierung, sondern um die theoretische Erklärung der Organisation und der Strukturen von HydrixOS. 1. Definitionen =============== In erster Linie sind für HydrixOS einheitliche Definitionen für Begriffe nötig. Darum bemüht sich dieses Kapitel Ihnen die wichtigsten und grundlegensten Begriffe im HydrixOS System zu erläutern. 1.1 Das Prinzip von HydrixOS ---------------------------- HydrixOS soll ein Betriebssystem sein, dass Zuverlässig, Portabel, Kompatibel und Modular ist. Diese vier Punkte werden in der Welt der EDV immer wichtiger. Computer werden immer kleiner und sind heutzutage in großer Komplexität in kleiner Form integriert in Mobiltelefonen und Waschmaschinen vorzufinden. Das Internet ist mittlerweile vielen Menschen zugänglich und hat in den letzten zwanzig Jahren die Menschen verändert. Dennoch ist es bis jetzt immer noch nicht möglich ein Programm geschrieben für den Mac auf einem IBM PC zu starten, da die Prozessoren und die Hardware sich auf grundlegenster Ebene unterscheiden. Es ist sogar oft nichtmal möglich Programme gleicher Hardware-Plattformen die für unterschiedliche Betriebssysteme geschrieben worden sind, in einem Betriebssystem integriert auszuführen. Jedoch wird es in Zukunft nötig sein diesen historischen Hinkelstein vom Bein des technischen Fortschritts zu lösen, um Platz für die ungehinderte Entwicklung neuer Technologien zu schaffen. HydrixOS will einen wichtigen Grundstein legen, als Betriebssystem, das durch eine > allgemeingültige und portable Schnittstelle < und das mittels > Emulation von Hardware und Systemsoftware < die Verbindung von Programmen über die Grenzen der Hardware und Betriebssysteme ermöglichen will. 1.2 Aufbau von HydrixOS ----------------------- HydrixOS ist ein System, das nahe an das Prinzip des Mikrokernels herankommt. Der Kernel übernimmt kaum Aufgaben zur Steuerung und Abstraktion der Hardware. Er übernimmt nur die Emulation, Prozess-/Threadverwaltung, Speicherverwaltung, IPC und Abstraktion bzw. Steuerung grundlegenster Hardware (IRQ; I/O-Ports; Speicher) Grob würde HydrixOS im Schema folgenden Aufbau besitzen: [Anwendungen und Treiber] ------------------------- [Kernel] ------------------------- [Hardware] In einem genaueren Schema würde HydrixOS wie folgt aufgebaut sein: --------------------------------------------------------------------------- Benutzer-Modus --------------------------------------------------------------------------- [ Client-Prozesse ] --------------------------------------------------------------------------- [ Server-Prozesse ] --------------------------------------------------------------------------- Kernel-Modus --------------------------------------------------------------------------- [ Virtuelle Prozessoren ] --------------------------------------------------------------------------- [ HydrixOS Schnittstellen- und Ausführungsschicht ] --------------------------------------------------------------------------- [ Systemverwaltungs- und Aufrufsschicht ] --------------------------------------------------------------------------- [ Hardwareanbindungsschicht ] | [ Speicheremulationsschicht ] --------------------------------------------------------------------------- Hardware --------------------------------------------------------------------------- [ CPU ] | [ Hardware ] | [ Speicher ] --------------------------------------------------------------------------- Die unterste Ebene bildet die Hardware. Direkt nach der Hardware, steht die Hardwareanbindungsschicht (Hardware connection layer, HCL). Die HCL stellt wichtige plattformspezifische Dienste zur Initialisierung des Kernels, für IRQ und Exception-Handling, sowie für den Zugriff auf die I/O-Ports (falls auf der jeweiligen Plattform vorhanden) zur Verfügung. Paralell zu dieser Schicht steht die Speicheremulationsschicht (Memory emulation layer, MML). Die MML stellt für das restliche Betriebssystem ein allgemeingültiges und portiebares System für den Arbeitsspeicher zur Verfügung, das u.a. virtuelle Adressräume und Segmentierung unterstützt. Auf diese Schichten setzt die Systemverwaltungs- und Aufrufsschicht (System managment and system call layer, SMCL). Diese Schicht bietet verschiedene Dienste, wie Speicherverwaltung, Prozessverwaltung, IPC und den Zugriff zu diesen Diensten über Systemaufrufe zur Verfüung. Wiederum setzt auf die SMCL die HydrixOS Schnittstellen- und Ausführungsschicht auf (HydrixOS Interface and Executive layer, HIEL). Diese Schicht ermöglicht für virtuelle Prozessoren (und die durch diese ausgeführten Programme) den Zugriff auf die Systemaufrufe. Ebenfalls ist in dieser Schicht der Scheduler enthalten. Über der HIEL liegen die virtuellen Prozessoren (virtual Processors, VPCs) auf. Diese führen Binärprogramme mittels Emulation oder Übersetzung dieser aus. Die HCL, MML, SMCL und die HIEL, sowie die VPCs bilden den Kernel. Alle ihre Operationen laufen im Kernel-Modus (Kernel mode, KM) ab und haben komplette Kontrolle über die Hardware. Im Kernel-Modus müssen sich die einzelnen Programmteile an die Sicherheitsregeln selbstverantwortlich halten. Auf dem Kernel-Modus liegt der Benutzer-modus (User mode, UM). Hier gibt es keine Schichten mehr, sondern logische Trennung in Server-Prozesse, die Dienste anbieten und Client-Prozesse, die Dienste nutzen. Prozesse im Benutzer-Modus teilen sich in Prozesse im 'Root-Modus' (Root mode, RM), die über hohe Rechte verfügen (auch 'Supervisor Modus' genannt) und in Prozesse des 'Anwender-Modus' (Application mode, AM), die über wenig Rechte verfügen. 1.3 Virtuelle Prozessoren ------------------------- Virtuelle Prozessoren (virtual Processors, VPCs) sind Module des Kernels, die einen bestimmten Prozessor emulieren. Emuliert wird nur der jeweilige Prozess, nicht die restliche Hardware, da andere Hardware direkt durch das Betriebssystem abstrahiert wird. Virtuelle Prozessoren stellen eher eine Prozessor-Abstraktionsschicht dar. 1.4 Prozesse ------------ Prozesse sind die Ausführungsrahmen von Programmen (Threads). Sie enthalten einen Adressraum, in dem mehrere Threads ausgeführt werden können. Ein Prozess enthält mindestens einen Thread und gehört höchstens einem Benutzer. Ein Prozess besitzt mehrere lokale Segmente und kann mehrere Ports und Segmente für andere Prozesse anbieten. Seine Threads werden von ein und dem selben virtuellen Prozessor ausgeführt. Schematisch ist ein Prozess unter HydrixOS wie folgt aufgebaut: --------------------------------------------- | | | ---------------------- | | | | ----------------- | | | | | Thread 1 | | | | virtueller | |---------------| | | | Adressraum | | Thread n | | | | (eingeteilt in | ----------------- | | | lokale Segmente) | | | | | ----------------- | | ---------------------- | Port 1 | | | |---------------| | | | Port n | | | ----------------- | | | --------------------------------------------- 1.5 Tasks --------- Tasks sind die gespeicherten oder abzuarbeitenden Programme aus Sicht eines virtuellen Prozessors. Ihr Zustand wird in einem von VPC zu VPC wechselndem Task Status Segment gespeichert. 1.6 Threads ----------- Threads sind die wartenden oder arbeitenden Tasks aus Sicht des HydrixOS Betriebssystems. Ein Thread kann unter HydrixOS folgende Zustände annehmen: 1. Arbeitend 2. Wartend 3. Blockierend Alle Threads bekommen, wenn sie sich nicht im blockierenden Zustand befinden, in regelmäßigen Abständen, abhängig von ihrer Priorität Zeit zum Arbeiten vom System zugewiesen. Sie wechseln dann vom wartenden in den arbeitenden Zustand. Ist die Arbeit vollbracht, wechseln sie vom arbeitenden in den wartenden Zustand. Der blockierende Zustand wird aktiviert, wenn ein Thread auf die Freigabe eines globalen Segments, auf eine Nachricht oder auf das Eintreten eines Ereignisses wartet. Dieser Zustand dauert an, bis der Thread durch den Kernel oder durch einen anderen Thread aus diesem Zustand befreit wird. Ein Thread kann durch den Kernel oder durch sich selbst in den blockierenden Zustand versetzt werden. Solange der Thread sich in diesem Zustand befindet, wird er nicht weiter verarbeitet. 1.7 Virtueller Adressraum ------------------------- Ein Virtueller Adressraum ist ein kontinuierlicher Adressbereich, der mit der Adresse 0 anfängt und an einer bestimmten Adresse aufhört. Die Größe eines solchen Adressraums kann unter HydrixOS 2^64 Bytes (16 Exabytes) nicht überschreiten. Ein virtueller Adressraum ist aus Sicht seines Verbrauchers (z.B. des Prozesses, der ihn benutzt) scheinbar kontinuierlich. Physikalisch müssen die Daten eines virtuellen Adressraums jedoch nicht kontinuierlich, ja nicht mal an gleichem Ort und Stelle gespeichert sein. Die Summe aller Speicherbereiche, auf die der virtuelle Adressraum abgebildet wird, ist der Hintergrundspeicher. 1.8 Segmente ------------ Segmente sind logische Einheiten in einem virtuellen Adressraum. Alle Adressen innerhalb eines Segments werden zur Startadresse des Segments addiert. Die Startadresse befindet sich also irgendwo in einem virtuellen Adressraum. Eine Adresse für ein Segemnt wird in zwei Teile geteilt: 1. Einen Segment-Teil, der die Nummer des Segments nennt. Diese Nummer referenziert wieder einen Segmentdeskriptor, in dem die Startadresse, Zugriffsrechte und die Größe des Segments gespeichert sind. 2. Einen Offset-Teil, der die relative Adresse zum Segmentbeginn enthält. Die tatsächliche Adresse in einem virtuellen Adressraum aus einer Segmentadresse wird demnach wie folgt gebildet: (Offset im Segment) + (Segmentbegin) = Adresse 1.9 Ports und Nachrichten ------------------------- Eine Nachricht ist eine abgeschlossene Datenmenge, die von einem Thread, zu einem anderen vom Kernel transportiert wird. Sie kann auch zwischen Prozessen wechseln. Ein Port ist eine Nachrichtenwarteschlange, die Nach dem First-In First-Out Prinzip (FIFO-Prinzip) organisiert ist. Die Nachricht, die zuerst dort eintrifft muss auch zuerst gelesen werden. Ein Port kann einschränken von welchem Thread und wieviele Nachrichten bei ihm eintreffen dürfen. 1.10 Benutzer und Zugriffslisten -------------------------------- Die Prozesse eines Benutzer idendifizieren sich durch eine Nummer. Prozesse des Benutzers '0' (auch 'root' und 'Supervisor' genannt) haben besondere Vorrechte. Für bestimmte Objekte (globale Segmente; Ports) kann es Zugriffslisten geben. In diesen Zugriffslisten wird bestimmt welcher Benutzer welche Rechte auf ein Objekt hat. Zugriffsrechte werden unter HydrixOS wie folgt notiert Kürzel Bedeutung --------------------------------------------------------------------------- r Leserecht w Schreibrecht x Ausführungsrecht d Löschungsrecht c Recht zur Änderung von Zugriffsrechten (Kontrollrecht) o Besitzerrecht Stellt man vor ein Kürzel ein Plus-Zeichen, so heißt dies, dass der Benutzer über das Recht verfügt. Stellt man hingegen davor ein Minus-Zeichen, heißt dies, dass der Benutzer nicht über das Recht verfügt. Fehlt ein Plus oder Minuszeichen, so ist die erst genannte Bedeutung zutreffend. Beispiele: -r Lesen nicht gestattet +d Löschen gestattet c Ändern der Zugriffsrechte gestattet Die Zugriffsrechte werden normalerweise in einer Reihe geschrieben, so dass eindeutig alle Rechte für ein Objekt zu sehen sind. Die Reihenfolge ist immer "rwxdco" Beispiele: +r-w-x+d-c+o Benutzer darf lesen, nicht schreiben, nicht ausführen, löschen, die Rechte nicht ändern und ist Besitzer des Objektes. -r+w+x+d-c-o Benutzer darf nicht lesen, aber schreiben, ausführen und löschen. er darf die Rechte nicht ändern und ist auch nicht Besitzer des Objektes. Für den Root-Benutzer gelten keien Zugriffsrechte. Bei der Zugriffsprüfung werden sie für den Root-Benutzer ignoriert. --------------------------------------------------------------------- [ Ende Ausug aus dem neuen HydrixOS Handbuch ] --------------------------------------------------------------------- cu FG --- This is not SPAM! You can unsubscribe sending an e-mail to hydrixos-request@xxxxxxxxxxxxx with subject "unsubscribe". If you've got questions contact webmaster@xxxxxxxxxxxx hydrixOS kernel: http://www.hydrixos.de/downl.htm