Betriebssystem

Von: , Frage gestellt am Mo, 19. Jan 2004

Hallo!
Bei vielen Image-Programmen (also um eine Kopie einer Bootfähigen Partition zu erstellen), wird die Software auf CD geliefert. Bei den älteren Versionen (zum Beispiel Drive Image 5) kann man auch zwei Disketten erstellen. Diese sind dann Bootfähig. Auf einer ist eine Art DOS und auf der anderen das Programm mit grafischer Benutzeroberfläche. Es läuft also unabhängig von jedem Betriebsystem. Da die Software auf 2 Disketten geht, können die PRogramme nicht so umfangreich sein.
Ich würde gerne selbst auch so etwas programmieren (C, C++, Assembler, Delphi - eigentlich egal, so lange nicht JAVA, was hier sowieso bestimmt wie Basic und Delphi nicht viel helfen wird). Dennr echnet man die Daten für die Aufgabe des Programmes weg, bleibt für den Kernel nicht mehr viel übrig.
Wie kann ich also selbst ein bootfähiges Programm schreiben, dass vielleicht sogar graphisch ist? Jetzt hier einen gesamten Quelltext mir zu erhoffen ist sicherlich utopisch, aber über zahlreiche Links würde ich mich sehr freuen (egal ob Englisch oder Deutsch)! Hat da jemand was?

Christian

11 Antworten zu dieser Frage

  1. Antwort von nach 2 Stunden 0 hilfreich
    Re: Betriebssystem

    Moin Wie kann ich also selbst ein bootfähiges Programm schreiben,
    dass vielleicht sogar graphisch ist?
    Grafisch (also >640x480) wird tricky. Multi-theard wird auch komplex. Als Vorlage für einfache, single-Theard Programme kann ich aber den Quellcode von lilo und Grub empfehlen.

    Ansonten evtl. doch einfach normales MS-DOS 6 (<300KB) ?

    cu

    • Antwort von nach 13 Stunden 0 hilfreich
      Re^2: Betriebssystem

      Hi!
      Und wie finde ich den Quelltext dazu?

      Christian

      • Antwort von nach 18 Stunden 0 hilfreich
        Re^3: Betriebssystem

        Müsstest du dazu nicht tonnenweise Treiber schreiben/liefern, für IDE-Hard Disks, Floppy Controls, (S)VGA-Karten etc. ?

        Ist doch ne riesen Arbeit, weil eben keine OS-Libs/Dienste zur Verfügung stehen würden...

        • Antwort von nach 21 Stunden 0 hilfreich
          Re^4: Betriebssystem

          Hi!
          Das ist richtig das das ein großer Stress ist, aber man lernst bestimmt auch verdammt viel dabei! Und es gibt genügend Programmeirer Teams bei großen Firmen und sicherlich auch privat die genau das tun. Es geht nicht darum so was hochkomplexes wie Windows oder Linux nachzuprogrammieren, sondern nur darum mal selbst ein primitives Betriebssystem zu bsateln. Auf Mikrocontrollern (was natürlich kein Vergleich ist), habe ich es bereits geschafft. Ich brauche eine neue Aufgabe. Wobei mit der Festplatte ist das so eine Sache. Da musst du ja auch was basten, damit der kapiert was ein Dateisystem ist und so. Wenn der nur eine einzige Konkrete Aufgabe ausführen würde, zum Beispiel ein Spiel bei dem man eine Zahl erreaten muss, würde das schon genügen (also Grafik, Tastatur, CD-Laufwerk, Arbeitsspeicher).

          Christian

  2. Antwort von nach 20 Stunden 0 hilfreich
    Re: Betriebssystem

    Hallo Christian
    Um einen Kernel zu schreiben brauchst du gute C(++) Kenntnisse und zumindest grundlegendes Wissen über Assembler. Andere Sprachen wie z.B Basic, Pascal sind dafür nicht geeigent, da sie zu sehr vom Betriebssystem abhängen. C++ hat ebenfalls einige Features (new, delete...) die Unterstüzung durch ein Os benötigen, man kann diese Funktionen allerdings auch selbst programmieren (oder einfach auf sie verzichten). Die am meisten verwendete Sprache ist daher C.

    Die Beste Site zum Einsteigen ist meiner Meinung nach Bonafide:
    http://osdev.neopages.net/
    Es gibt dort einige Anfängertutorials (Tutorials/Kernels) die du dir durchlesen solltest sowie Dokumente und ein Forum.

    Foren zum Thema OS-Dev
    http://www.osdev.org/
    http://www.mega-tokyo.com/forum/

    OS-Newsgroups:
    alt.os.development

    Eine graphische Oberfläche ist kein Problem, du solltest allerdings nicht zu großen Wert auf das Aussehen des Betriebssystems legen bevor nicht die weitaus grundlegenderen Sachen erledigt sind.

    Du solltest auch bedenken, dass die Kernel die von Image-Programmen verwendet werden eher simpel sind, da spezialisiert. Ein echtes Betriebsystem dass Programme ausführen kann ist deutlich komplexer.

    Noch ein gutgemeinter Rat:
    Versuche nicht deinen eigenen Bootsector zu schreiben! Der Bootsector befindet sich im ersten Sector eines Datenträgers und ist daher 512Byte groß. Nach den Booten des Systems durch das BIOS wird der dort gespeichert Code ausgeführt, der dann zum eigentlichen Kernel spingt.
    Da der Bootsector auf 512Byte begrenzt ist, muss er in Assembler programmiert werden. Das Schreiben eines Bootsektors hat nichts mit dem eigentlichen Betriebsystem zu tun und kann aufgrund von 16Bit real-mode ziemlich deprimierend sein. Ich rate dir daher dringendst einen bereits bestehenden Bootloader wie z.B GRUB zu verwenden !
    Ich selbst verwede John Fine's Bootsector:
    http://my.execpc.com/~geezer/johnfine/bootr01.zip
    Er ist sehr einfach gehalten und daher für Anfänger möglicherweie besser geeignet als GRUB.

    BIOS -> Bootsector -> Kernel

    Falls du Probleme haben solltest, einfach in den oben genanten Foren posten. Du kannst mich auch direkt unter gaffi_at_haefft_de erreichen, ich beschäftige mich aber selbst erst sein ca. 1/2 Jahr mit Betriebsystemen und kann deshalb nicht Garantieren dir immer helfen zu können.

    Falls du nach einen guten Buch zum Thema suchst:
    http://en2.wikipedia.org/wiki/Andrew_S._Tanenbaum (das 2.te)
    Ich habe es zwar selbst noch nicht gelesen, es wird aber ständig in allen Foren hoch gelobt.

    grüße,
    Daniel Raffler

  3. Antwort von nach 10 Tagen 0 hilfreich
    Re: Betriebssystem

    Hallo
    Man kann alles . Wie Du wissen solltest kann man relativ leicht ein paar Makros in Assembler schreiben , welche dann eine Art Basic erlauben . Damit könnte man schneller ein Programm für Textverarbeitung schreiben .
    Den bloßen Bootsektor kann man noch mit "debug" erstellen .
    Ob nun das vielfach favorisierte C geeignet ist möchte ich bezweifeln , denn bereits bei der Assemblerprogrammierung müßte ich erst mal suchen , wie man die Ausrichtung für ein Starten innerhalb eines Betriebssystem umgeht . ,obj?? ??
    Für ein bootendes Programm brauchst Du technische Kenntnisse die Du Dir aus entsprechender technischer Literatur besorgen mußt .
    Im Bootsektor werden Bios-Routinen aufgerufen , mit denen man andere Sektoren laden kann .
    Für ein spezielles Echtzeitbetriebssystem wäre das ganz gut und immerhin steht auch das DOS unter Urheberrecht .
    Ich fand aber auch "freie Dos-Systeme" , da sind Gruppen , welche versuchen , soetwas aufzubauen . Im Internet mal googlen usw...
    Im übrigen werden alle Geräte , die unter Windows oder Dos einen Treiber benötigen , nicht funktionieren .
    Eine einfache Bilddarstellung und ein Laufwerkszugriff müßte aber gehen .
    Damit hast Du dann ein 1- oder 2- Jahresprojekt , und deswegen ist es sinnvoll , was fertiges zu nehmen .
    Aber ich glaube , Du brauchst jemanden , der Dir Deine Homepage erstellt ...
    Beim Öffnen fängt meine Festplatte an zu rappeln , nichts geht mehr und ich muß neu booten ...
    MfG [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

    • Antwort von nach 10 Tagen 0 hilfreich
      Re^2: Betriebssystem

      Hallo Matthias Man kann alles . Wie Du wissen solltest kann man relativ
      leicht ein paar Makros in Assembler schreiben , welche dann
      eine Art Basic erlauben . Damit könnte man schneller ein
      Programm für Textverarbeitung schreiben.
      Es gib keinen Grund eine ganze Programmiersprache neu zu schreiben und schon garnicht eine so komplexe wie Basic. Basic ist für die Entwicklung eines Kernels ähnlich gut geeignet wie HTML und es wäre deutlich einfacher das ganze OS in Assembler zu schreiben als einen, wenn auch einfachen, Basic-compiler zu erstellen. Den bloßen Bootsektor kann man noch mit "debug" erstellen .
      Der Bootsector muss in asm geschrieben werdend da er auf 512Byte begrenzt ist, wie (und warum) man dazu "debug" verwenden soll verstehe ich nicht ganz. Ob nun das vielfach favorisierte C geeignet ist möchte ich
      bezweifeln , denn bereits bei der Assemblerprogrammierung
      müßte ich erst mal suchen , wie man die Ausrichtung für ein
      Starten innerhalb eines Betriebssystem umgeht . ,obj?? ??
      C(++) ist die einzige Sprache in der man ein Betriebssystem schreiben kann. Der große Vorteil von C besteht ja eben darin, dass es sich nicht wie z.B Basic zu sehr an das Betriebssystem bindet.
      Man kann einen Kernel auch in Assembler schreiben hat allerdings dann den Nachteil, dass man die x86 Plattform gebunden ist und das Projekt auf Grund seiner Größe recht unübersichtlich werden wird.

      Der Kernel wird vom Bootsector gestartet der wiederum vom BIOS ausgeführt wird.

      BIOS -> Bootsector -> Bootloader (alternativ) -> Kernel

      Es gibt bei C in der Tat das Problem dass man irgendwie die Funktion Main() aufrufen muss, man kann dies allerdings mein paar Zeilen asm lösen die zum C-Code springen:

      extern _main

      jmp _main
      cli
      hlt

      Dieser Code wird dann zusammen mit den C-Objectdatein gelinkt. Der Kernel wird in der Regel als ganz normale Binärdatei erstellt (.com), mit den Bootloader GRUB kann man aber auch andere Formate starten (COFF = windows oder ELF = linux). Für ein bootendes Programm brauchst Du technische Kenntnisse
      die Du Dir aus entsprechender technischer Literatur besorgen
      mußt .
      Ich möchte nochmal auf dieses Buch hinweisen:
      http://en2.wikipedia.org/wiki/Andrew_S._Tanenbaum
      Es ist DAS Standardwerk zum Thema Betriebssystemprogrammierung. Im Bootsektor werden Bios-Routinen aufgerufen , mit denen man
      andere Sektoren laden kann .
      Für ein spezielles Echtzeitbetriebssystem wäre das ganz gut
      und immerhin steht auch das DOS unter Urheberrecht .
      Ich fand aber auch "freie Dos-Systeme" , da sind Gruppen ,
      welche versuchen , soetwas aufzubauen . Im Internet mal
      googlen usw...
      Im übrigen werden alle Geräte , die unter Windows oder Dos
      einen Treiber benötigen , nicht funktionieren .
      Eine einfache Bilddarstellung und ein Laufwerkszugriff müßte
      aber gehen .
      Alle Geräte benötigen einen Treiber, auch Graphikkarte (!) und Festplatte. Die Programmierung der meisten Treiber ist nicht allzu schwer, da man leicht Information und Technische Spezifikationen findet.
      Die Graphikkartenhersteller nVidea und ATI veröffentlichen jedoch kerinerlei Infos über ihre Karten, man kann sie daher nur mithilfe der VGA oder VESA-Standards ansprechen. Der VGA-Standard wird von allen Karten unterstützt, bietet aber nur sehr gering Auflösungen (max 640*480*4), VESA hingegen erlaubt es alle, auch unter Windows möglichen, Auflösungen einzustellen, wird allerdings nicht von allen Herstellen unterstützt.

      Grüße,
      Daniel Raffler

      • Antwort von nach 11 Tagen 0 hilfreich
        Re^3: Betriebssystem

        HalloDaniel Wie Du wissen solltest kann man relativ
        leicht ein paar Makros in Assembler schreiben , welche dann
        eine Art Basic erlauben . Damit könnte man schneller ein
        Programm für Textverarbeitung schreiben.
        Es gib keinen Grund eine ganze Programmiersprache neu zu
        schreiben und schon garnicht eine so komplexe wie Basic. Basic
        ist für die Entwicklung eines Kernels ähnlich gut geeignet wie
        HTML und es wäre deutlich einfacher das ganze OS in Assembler
        zu schreiben als einen, wenn auch einfachen, Basic-compiler zu
        erstellen.
        Also da muß ich protestieren . HTML mit Basic zu vergleichen ist vielleicht bei manchen älteren Interpretern zulässig , nicht mehr aber bei modernen Compilern .
        Zutreffend ist , das man Schwierigkeiten hätte , einen Compiler für eine bootfähige Sache zu finden .
        Wie man Makros oder Unterprogramme schreibt und verwendet , ist aber eigentlich gleich , solange dieselbe Logik , derselbe Programmablauf geschieht . Ich bin aber der Meinung , das falls man sich mit Basic relativ gut auskennt und außerdem mit Assembler kann , dann kommen ein paar Routinen für Basic-Style in Frage . Damit könnte man dann auch leichter das Programm portieren , was aber wegen der unterschiedlichen Maschinen nicht unbedingt Sinn macht .
        Du mußt bedenken , das Dir C anscheinend geläufig ist , und das es Dir deswegen möglicherweise selbstverständlich erscheint . Den bloßen Bootsektor kann man noch mit "debug" erstellen .
        Der Bootsector muss in asm geschrieben werdend da er auf
        512Byte begrenzt ist, wie (und warum) man dazu "debug"
        verwenden soll verstehe ich nicht ganz.
        Naja , er könnte mit Debug einen Bootsektor schreiben , der eine Meldung ausgibt . Damit hätte er ein erstes Hurra und bräuchte nichts für aufwendige Werkzeuge bezahlen . Debug nimmt Assemblerbefehle an , aber keine benannten Variablen usw... aber man kann es schaffen , damit auf 512 Byte zu kommen . Ich sagte nicht , das man Debug nehmen "muss" , sondern , "man kann noch" . Hierbei beziehe ich mich auf die Programmgröße des Bootsektors . Im Bootsektor werden Bios-Routinen aufgerufen , mit denen man
        andere Sektoren laden kann .
        Für ein spezielles Echtzeitbetriebssystem wäre das ganz gut
        und immerhin steht auch das DOS unter Urheberrecht .
        Ich fand aber auch "freie Dos-Systeme" , da sind Gruppen ,
        welche versuchen , soetwas aufzubauen . Im Internet mal
        googlen usw...
        Im übrigen werden alle Geräte , die unter Windows oder Dos
        einen Treiber benötigen , nicht funktionieren .
        Eine einfache Bilddarstellung und ein Laufwerkszugriff müßte
        aber gehen .
        Alle Geräte benötigen einen Treiber, auch Graphikkarte (!) und
        Festplatte. Die Programmierung der meisten Treiber ist nicht
        allzu schwer, da man leicht Information und Technische
        Spezifikationen findet.
        Na da hast Du aber was schönes geträumt ...
        Höchstens für eine einzelne Grafikkarte gelingt vielleicht die Programmierung , und das dauert trotzdem lange genug .
        Ein einfacher Zugriff auf die Festplatte mittels IDE Protokoll und auf das VGA mittels Bios wäre noch zu schaffen , meine ich .

        Ich verstehe übrigens das C nicht besonders und wenn ich was schreibe , dann mit VB 5.0 ( zur Zeit ) und ich muss feststellen , Vb ist schnell genug für vieles auf Pentium100Mghz und VB läßt sich Klasse mit ein bischen Assemblercode gewaltig aufbessern .

        MfG



Keine passende Antwort gefunden? Jetzt eigene Frage stellen!