Autor Thema: Wie ist der Weg von den Ideen zum System?  (Gelesen 12506 mal)

Faba

  • Beiträge: 18
    • Profil anzeigen
Gespeichert
« am: 04. August 2007, 22:02 »
Ich kann Assembler und C/C++, aber ich habe noch nie ein OS programmiert. Da wollte ich mal fragen, wie so die einzelnen Schritte sind, bis zum "fertigen" OS. Fertig in Anführungsstrichen, weil ein Programm ja nie fertig ist! :-D
Also hier mal etwas, was ich haben will:
  • C/C++ Standardbibliotheken
  • GUI
  • Netzwerkunterstützung
  • sicher
  • ext4-Support

Was würdet ihr mir da für einen Kernel empfehlen? Wie soll ich vorgehen? Was muss ich beachten? Ich habe schon die Magazine gelesen und war auch schon auf anderen OS-Development Seiten, aber leider kriege ich da keine echte Ordnung rein.

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 04. August 2007, 22:19 »
  • C/C++ Standardbibliotheken
  • sicher
An dieser Stelle hast du schonmal zwei konkurrierende Ziele. Einige Funktionen der C-Standard-Bibliothek sind broken by design.

Ansonsten fang einfach mal an, ein Standalone-Hello-World zu basteln, da geht schonmal ein bißchen Zeit dafür drauf. Dann kommen fortgeschrittene Sachen wie einen Interrupt überleben oder gar eine Speicherverwaltung.

GUI/Netzwerk/ext4 kannst du für den Anfang mal getrost vergessen. Bis du an einen Punkt kommst, an dem du das implementieren kannst, vergeht ein bißchen Zeit.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Faba

  • Beiträge: 18
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 04. August 2007, 22:25 »
Das Hello World hab ich schon. Ist zwar nur mit Assembler, aber immerhin. Ich habe es zurzeit nur unter MyEmu zum laufen gekriegt(mit den anderen Emulatoren komme ich noch nicht so ganz klar), aber ich kann ein Hello World sehen und den emulierten PC neustarten.

Mit C/C++ Bibliotheken meine ich, dass andere einfach Programme schreiben können, wie unter Windows und Co, die kaum geändert auch unter meinem System laufen können.

Soll ich mich dann an Speicherverwaltung und Co. machen?

sry, für die vielen Fragen, aber in OS-Development bin ich ein totaler Nichts-könner! :oops:

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 04. August 2007, 22:58 »
Das Hello World hab ich schon. Ist zwar nur mit Assembler, aber immerhin.
Dann ist die Sprache wohl das nächste, was du ändern möchtest.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Faba

  • Beiträge: 18
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 04. August 2007, 23:12 »
Dann werde ich daran arbeiten... :-)

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #5 am: 05. August 2007, 00:35 »
Ich habe es zurzeit nur unter MyEmu zum laufen gekriegt(mit den anderen Emulatoren komme ich noch nicht so ganz klar), aber ich kann ein Hello World sehen und den emulierten PC neustarten.
Ich (als einer der Programmierer von MyEmu) hab mich fast schlapp gelacht als ich das gelesen hab, aber ok... es gibt wohl doch jemand der mit MyEmu was anfangen kann. :-D :-o

So zurück zum Thema: Ich würd sagen, dass erste was du möchtest ist ein gescheiter Bootloader. Ich persöhnlich (und einige andere hier im Forum) können Grub empfehlen, da er einfach unglaublich viele lästige Dinge abnimmt. Wieder andere schreiben ihren eigenen Bootloader. Danach solltest du dich mal in den Protected-Mode begeben. Du warst bis jetzt nur im Realmode und der hat einige krasse Limitationen. Danach ist erstmal das Ziel irgendwas im Protected-Mode auf dem Bildschirm ausgeben (Schwierigkeit dabei ist, dass es im protected-mode keine BIOS-Interrupts gibt, die einem vieles abnehmen). Danach kommen dann so Sachen wie Interrupts, Multitasking, Paging (<- bis man das verstanden hat, sind glaub ich Wochen vergangen *g*), und so weiter... irgendwann wirst auch selbst feststellen, was dir noch fehlt...
Ich kann dir aber aus Erfahrung jetzt schon sagen, dass deine Ziele eher in Jahren und nicht in Monaten erreicht werden können (also nicht enttäuscht sein, wenn du morgen noch keine GUI hast ;-) )... zumindest haben die Forummitglieder hier die etwas weiter sind einiges an Zeit investieren müssen/wollen/dürfen.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 05. August 2007, 00:45 »
Jup und dann werden Tastatur, Floppy und Dateisystemtreiber benötigt...
Auch das braucht seine Zeit und kann auf Maus und HDD ausgeweitet werden...
Erst dann würde ich an G(UI) denken und vielleicht einen Compiler und Editor um am eigenen System zu arbeiten.

Gruss
Nooooooooooooos

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 05. August 2007, 14:20 »
Ich habe es zurzeit nur unter MyEmu zum laufen gekriegt(mit den anderen Emulatoren komme ich noch nicht so ganz klar), aber ich kann ein Hello World sehen und den emulierten PC neustarten.
Ich (als einer der Programmierer von MyEmu) hab mich fast schlapp gelacht als ich das gelesen hab, aber ok... es gibt wohl doch jemand der mit MyEmu was anfangen kann. :-D :-o
:-D Naja, als der andere Programmierer von MyEmu, muss ich MyEmu mal verteidigen und sagen, dass die aktuelle Version im SVN den RealMode inzwischen so ziemlich abdeckt, die Devices fehlen halt noch größtenteils. Aber du solltest doch lieber auf Bochs oder QEMU umsteigen ;) Ein Qemu Aufruf ist auch nicht schwerer:
"qemu -boot a -fda floppy.img" sollte reichen.

@Topic: Hier gibts ein Tutorial, was die einfachsten Grundlagen  des Protected Mode abdeckt. Bis man das richtig implementiert hat, kann schon einiges an Zeit vergehen und Memory Managment oder Multitasking fehlt dann immer noch.

Faba

  • Beiträge: 18
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 05. August 2007, 17:15 »
Jup und dann werden Tastatur, Floppy und Dateisystemtreiber benötigt...
Auch das braucht seine Zeit und kann auf Maus und HDD ausgeweitet werden...
Erst dann würde ich an G(UI) denken und vielleicht einen Compiler und Editor um am eigenen System zu arbeiten.

Gruss
Nooooooooooooos

dazu habe ich noch ein paar Fragen: Wie sieht das mit den Treibern aus? Sind das ganz einfach Dateien in meinem System, die sich darum kümmern? Also muss ich dann in den Kernel auch schon das Filesystem implementieren, oder? Und wie kommuniziert dann dieser Treiber mit dem Rest des Systems? Oder wie wird er von den anderen Programmen genutzt?
Zu Grub: Wie nutze ich Grub? Habt ihr dafür ein Tutorial?

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #9 am: 05. August 2007, 17:35 »
Wie sieht das mit den Treibern aus? Sind das ganz einfach Dateien in meinem System, die sich darum kümmern? Also muss ich dann in den Kernel auch schon das Filesystem implementieren, oder? Und wie kommuniziert dann dieser Treiber mit dem Rest des Systems? Oder wie wird er von den anderen Programmen genutzt?
Das kommt sehr darauf an welche Art von Kernel man haben möchte. Generell gibt es da den Microkernel und den monolithischen Kernel. Beim Microkernel werden alle Treiber in einen separaten Prozess (und damit dann auch in eine separate ausführbare Datei) verfrachtet. Beim monolithischen Kernel befinden sich alle Treiber im Kernel. Man kann die beiden Designs aber eigentlich fast beliebig mixen. zB. wäre Linux ein monolithischer Kernel welcher aber zur Laufzeit Treiber aus externen Dateien dem Kernel hinzufügen kann. Mittlerweile gibts auch ein Framework mit dem man Linuxtreiber im Userspace schreiben kann (mir fällt nur momentan der Name nicht ein). Für Linuxdateisystem treiber gabs das aber schon länger und nennt sich FUSE.
Die Treiber kommunizieren mit dem Kernel über eine API (monolithischer Kernel), d.h. eine Reihe von "normalen" Funktionsaufrufen oder über die Systemaufrufe/syscalls (das geht über Interrupts oä) die der Kernel zur Verfügung stellt (Microkernel).
Das Interface zw. Treiber & Programmen kann auch sehr vielfältig aussehen. Wieder Beispiel Linux: durch öffnen einer Datei - also zb /dev/fd0 - wird ein treiber angesprochen (hier der Diskettentreiber für das erste Diskettenlaufwerk). Bei LOST & lightOS (zwei HobbyOS) wird ein Treiber über IPC angesprochen. Im Fall von LOST über RPC (= Remote Procedure Call). Im Fall von lightOS über message-passing und shared-memory.

Zitat
Zu Grub: Wie nutze ich Grub? Habt ihr dafür ein Tutorial?
Die Multiboot Specification beschreibt eigentlich ziemlich gut was grub wie für dich macht. Es enthält auch einen kleinen Beispielkernel.
« Letzte Änderung: 05. August 2007, 17:38 von bluecode »
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

Faba

  • Beiträge: 18
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 05. August 2007, 19:15 »
Ich hab sogar noch ein Tutorial in Ausgabe 5 vom Lowlevel-Magazin gefunden. Jedenfalls wird der Kernel dort Grub-ready. Ne Frage: Wie installiere ich Grub unter qemu oder Bochs? Oder bin ich jetzt schon wieder auf dem Holzpfad?

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 05. August 2007, 19:36 »
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Faba

  • Beiträge: 18
    • Profil anzeigen
Gespeichert
« Antwort #12 am: 05. August 2007, 20:19 »
oh, danke! :-)
noch eine Frage, die aber jetzt von meiner Frage wegkommt und rein aus Interesse ist: Muss man eigentlich bei DualCore oder QuadCore Prozessoren etwas beachten? Ich nutze noch einen Pentium 4.

Homix

  • Beiträge: 138
    • Profil anzeigen
Gespeichert
« Antwort #13 am: 05. August 2007, 20:36 »
hi,
je nach dem was du machen willst. Wenn du bei einem Dual- bzw QuadCore CPU nur einen Core nutzen willst, musst du gar nichts machen, ansonsten musst du die anderen Cores per APIC aktivieren und initialisieren.

mfg,
Stefan

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #14 am: 05. August 2007, 20:47 »
Ich sags mal so: Ich würd das auf jeden Fall für die ersten Monate/Jahre getrost vergessen, va. wenn du keine Erfahrung mit mehreren Threads in einem Prozess und den damit einhergehenden Problemen & Lösungen hast. :wink:
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

Faba

  • Beiträge: 18
    • Profil anzeigen
Gespeichert
« Antwort #15 am: 05. August 2007, 20:55 »
Ich will das ja auch nicht nutzen. Das war einfach eine Interessenfrage! Aber danke für die Antworten! :-)
ich find das echt toll, wie schnell hier Antworten kommen. In einem Forum warte ich schon seit einem halben Jahr auf eine Antwort!^^Hier aber kriege ich sie in ein paar Minuten!

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #16 am: 05. August 2007, 21:04 »
Es sind Sommerferien und wir sind lichtscheue Nerds, sonst noch Fragen?  :-D 8-)
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

Faba

  • Beiträge: 18
    • Profil anzeigen
Gespeichert
« Antwort #17 am: 05. August 2007, 21:16 »
Ach, hier gibt´s noch mehr Schulbankdrücker, die lieber vor dem PC hocken als irgendwo in der Schule zu hocken, außer mir? :-D :-D :-D :-D

Homix

  • Beiträge: 138
    • Profil anzeigen
Gespeichert
« Antwort #18 am: 05. August 2007, 22:35 »
klar  :-D

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #19 am: 05. August 2007, 22:39 »
Es gibt auch noch die Studenten mit vorlesungsfreier Zeit und die Ex-Zivis, die auf den Beginn des Wintersemesters warten. :wink:
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

 

Einloggen