Warum so kompliziert?



  • Hi, warum ist das Programmieren eines OS eigentlich so kompliziert? In meiner naiven Vorstellung bräuchte es nur ein Dutzend Funktionen:

    1. Funktion: Bit an Adresse X (von mir aus auch ganzer Block von Bits) auf Festplatte schreiben
    2. Funktion: Bit an Adresse X (von mir aus auch ganzer Block von Bits) von Festplatte lesen
    3. Funktion: Bit an Adresse X (von mir aus auch ganzer Block von Bits) auf RAM schreiben
    4. Funktion: Bit an Adresse X (von mir aus auch ganzer Block von Bits) von RAM lesen
    5. Funktion: Pixel an Position (x,y) mit Farbe (A)RGB setzen.

    Dann natürlich noch ne Schnittstelle für Maus und Tastatur. Dies wäre die Basis auf der dann Dateisystem, Speichermanagment, Renderengine, GUI-Engine usw. basieren würden. Ist doch ein Klacks ;).



  • Öhm, ja, dann fang mal an damit, ist doch ein Klacks. 😃



  • Ne, mal im Ernst 😃 . GUI-Framework + Renderengine schreibe ich im Moment und kann mehr oder weniger auf oben genannten Funktionen aufbauen, im Programmieren eines einfachen Dateisystems + Speichermanagement sehe ich auch kein Problem, wenn oben genannte Basisfunktionalität existiert.



  • Student83 schrieb:

    Hi, warum ist das Programmieren eines OS eigentlich so kompliziert? In meiner naiven Vorstellung bräuchte es nur ein Dutzend Funktionen:

    1. Funktion: Bit an Adresse X (von mir aus auch ganzer Block von Bits) auf Festplatte schreiben
    2. Funktion: Bit an Adresse X (von mir aus auch ganzer Block von Bits) von Festplatte lesen
    3. Funktion: Bit an Adresse X (von mir aus auch ganzer Block von Bits) auf RAM schreiben
    4. Funktion: Bit an Adresse X (von mir aus auch ganzer Block von Bits) von RAM lesen
    5. Funktion: Pixel an Position (x,y) mit Farbe (A)RGB setzen.

    Dann natürlich noch ne Schnittstelle für Maus und Tastatur. Dies wäre die Basis auf der dann Dateisystem, Speichermanagment, Renderengine, GUI-Engine usw. basieren würden. Ist doch ein Klacks ;).

    Ja, im Grunde genommen hat es ja auch diese Funktionen. Speichermanagement, etc. gehören aber auch zum OS. Schreiben auf Festplatte erfordert einen Treiber für das Gerät. Und ein anderes Gerät (z.B. Diskette oder USB-Stick) braucht einen anderen Treiber. Darüber liegt das Dateisystem. Auch das braucht wieder einen Treiber. Dann gibts noch diverse interne Sachen wie Interrupt-Handling, Timer, Scheduling (für Multitasking), etc.



  • Ah ok, Treiber sind das eine Problem von zweien die ich sehe. Wie kann ich mir denn eine Treiberschnittstelle vorstellen? Ich muss es ja Herstellern von Hardware ermöglichen eigene Treiber bereitzustellen, ohne das OS deswegen neu kompilieren zu müssen. Kann ich mir einen Treiber als eine Art Plugin-System vorstellen? Gibt es da eine Art Standard für Treiber?

    Das zweite Problem. So ein Betriebssystem ist vollkommen nutzlos ohne Anwendungen (oder neumodisch "Apps"). Man sollte für das OS also auch Programme schreiben können. Sehe ich das also richtig, dass ich zu meinem OS auch einen z.B. C++-Compiler bereitstellen müsste, der den C++ Code dann in eine ausführbare Datei umwandelt. Das würde den Rahmen des Ganzen natürlich sprengen. Wie ist das eigentlich bei Pretty-OS gelöst? Ich habe gesehen, dafür kann man auch Anwendungen schreiben.



  • Student83 schrieb:

    Ah ok, Treiber sind das eine Problem von zweien die ich sehe. Wie kann ich mir denn eine Treiberschnittstelle vorstellen? Ich muss es ja Herstellern von Hardware ermöglichen eigene Treiber bereitzustellen, ohne das OS deswegen neu kompilieren zu müssen. Kann ich mir einen Treiber als eine Art Plugin-System vorstellen? Gibt es da eine Art Standard für Treiber?

    Nicht wirklich. Jedes OS hat andere APIs und ABIs.
    Als API hat Windows hat das WDK. Tyndur hat das CDI. PrettyOS hat eine eigene Schnittstelle und teilweise CDI-Unterstützung.
    Etwas fortgeschrittener ist dann schon das Laden von Treibern nach Bedarf zur Laufzeit (-> ABI ("Application binary interface")). Diese Treiber kann man sich eigentlich wie eine DLL vorstellen. PrettyOS kann das noch nicht.

    Das zweite Problem. So ein Betriebssystem ist vollkommen nutzlos ohne Anwendungen (oder neumodisch "Apps"). Man sollte für das OS also auch Programme schreiben können. Sehe ich das also richtig, dass ich zu meinem OS auch einen z.B. C++-Compiler bereitstellen müsste, der den C++ Code dann in eine ausführbare Datei umwandelt.

    Nein, dass muss man nicht. Es reicht völlig, wenn man eine Biblitohek schreibt, die z.B. Syscalls User-seitig implementiert, und im OS Unterstützung für ein beliebiges Format für ausführbare Dateien implementiert (PE, ELF, ...). So ist das auch in PrettyOS gelöst. (Allerdings unterstützen wir sowohl PE als auch ELF)


  • Mod

    @Student83: Ich empfehle Dir ein Grundlagenbuch zu dem Thema zu lesen. Ganz brauchbar ist http://www.pearson-studium.de/9783827373427.html
    Vlt. findest Du es in einer Bibliothek.

    Die Komplexität ergibt sich aus den Anforderungen der CPUs und der Tatsache, dass man einfach alles selbst erledigen muss. Hierbei ist man in der untersten Schicht Hardware-abhängig, und die muss das OS auch anbieten. Zusätzlich hängen noch 40 Jahre Geschichte mit dran, gerade bei x86. OS-Development wird immer eine ganz besondere Disziplin mit hohen Anforderungen an Geduld und Findigkeit bleiben. Also überlege es dir gut, bevor du in diese faszinierende Materie einsteigst. Hoher Suchtfaktor. 🙂


Anmelden zum Antworten