Betriebssystem
-
Ich weiß. Ich kenne genug. Ich will aber nicht zu denen gehören. Ich glaube, dass ein Team sicher dazu beitragen kann, dass das Projekt weiter geht. Wobei ein Betriebssystem wohl eh kaum je wirklich fertig ist. Aber ich glaube, dass man es in 6 Monaten mit einem guten Team zumindest als simplen Router einsetzen kann. Man muss nur diese 6 Monate überbrücken. Ich möchte jetz noch nicht aufgeben. Das kann ich in 6 Monaten immer noch
Wie schon im Beitrag davor gesagt, wäre ich auch froh, wenn jemand einen kleinen Teil übernimmt. Außerdem möchte ich beweisen, dass es möglich ist, ein eigenes Betriebssystem zu schreiben. Es braucht nur ein motiviertes und kompetentes Team - in dem Fall kompetent in oop, c++ und für gewisse Aufgaben auch Low Level. Ich hab auch nicht erst vor 3 Wochen mit c++ angefangen.
Ich weiß, ich bin nicht gut im Motivieren von Leuten. Aber ich hoffe halt, dass sich jemand wirklich angesprochen fühlt und sich auch immer gedacht hat, dass er es besser kann als <derzeit verwendetes Betriebssystem einsetzen>.
Dass der Erfolg nicht vorprogrammiert ist, ist klar, aber der Misserfolg ist es, wenn sich niemand traut. Es gibt viele coole Dinge, die nur darauf warten, implementiert zu werden Vielleicht kann ich auch gerade die Leute ansprechen, die mit einem Betriebssystem begonnen haben, es aber nie beendet haben. Sie hätten die Chance, dass ein Teil ihres Codes in diesem Versuch aufgeht.@Badestrand
Das wird sich herausstellen. Aber grundsätzlich gilt, dass ich auf jeden Fall jeden gerne in das Team aufnehme. Wenn du pro Tag so viel Zeit hast, ist das eh sehr viel. Wenn du willst, kannst du aber gerne hier sagen, wie du dich einschätzt, da es vielleicht andere motiviert, auch mitzumachen oder zumindest darüber nachzudenken.
Ich kann dir auch gerne bei deinem bochs-Problem helfen. Ich hab bis jetzt auch immer bochs eingesetzt, bin aber draufgekommen, dass qemu vielleicht besser wäre.
-
was hast du später von deinem Betriebssystem? Was erhoffst du dir später alles damit machen zu können?
-
Ich wuerde mal sagen, er hat dabei ne Menge gelernt. Allein das ist/war den Aufwand wert!
-
Eine kurze technische(?) Frage (von einem der kein Interesse an der Teilnahme hat, wg. Zeit): Warum keine POSIX-API?
Edit: Im übrigen kann ich mich nur Korbinian anschliessen
-
@BorisDieKlinge
Ich möchte nichts nur deshalb machen, damit ich in Zukunft etwas davon habe. Ich möchte gleich etwas davon haben. Wenn ich das OS dann am Router starten kann und es funktioniert, wäre das natürlich perfekt. Außerdem würde es schon reichen, wenn ich (bzw. das Team natürlich) damit bewiesen hat, dass es möglich ist, ein solches Projekt auf die Beine zu stellen und noch dazu es möglichst perfekt zu machen.In meiner Wohngegend werden entweder SAP- oder Embedded-Programmierer gesucht. Die Tatsache, dass ich mich mit Low Level schon beschäftigt habe, macht es leichter, die Low Level Programmierung anderer System zu lernen und ich kann auf den SAP-&%$)!§&/" verzichten...
@Tim
Es soll neu werden. Es gibt schon genug Betriebssysteme, die auf irgendeine Art POSIX unterstützen. Keiner braucht ein weiteres. POSIX korrekt zu implementieren, ist sowieso extrem schwer. Darüber, ob jetzt jemand ein nicht-POSIX-System braucht, lässt sich natürlich streiten. Die internen Datenstrukturen und Algorithmen für Betriebssysteme sind schon seit Jahre, wenn nicht gar seit dem Anfang, maximal in Details verändert bzw. verbessert worden. Ein neues Betriebssystem kann maximal mit gutem Support der Features für seinen Einsatzzweck (z.B. für einen Router die Netzwerkprotokolle), verbesserter Usability (hier vor allem beim Paketmanagment und der Administration einzelner wie auch mehrer Rechner) und einer vereinfachten API punkten. Programme wie cp, ls, grep, sed und co sollten (wenn sie überhaupt im OS auftauchen) mit wenigen Zeilen API realisierbar sein.
-
POSIX: halte ich auch nicht für wichtig, das man POSIX implementiert. Wenn ich ein POSIX-OS haben will, nimm ich BSD und selbst für Windows gibts von MS die "UNIX Services" (oder wie sich das nennt).
Was ich genial finden würde, wäre endlich mal ein OS das eine C++-API hat. Also wo ich endlich mal nicht mit C rumhantieren muß. Und da stösst mir das hier schon mal schlecht auf:
Eine kleine Roadmap wäre vielleicht diese:
- libstandard mit verschiedenen Klasse z.B. string, list, array, map, ...Sorry, aber da kann man doch ne ISO-C++-Stdlib implementieren, oder? Das wäre das Minimum was ich von einem OS verlangen würde, das sich die API an der ISO-C++-Stdlib hält.
Und dann schön in modernem C++ gegen das OS programmieren.
Womit übrigens POSIX sowieso hinfällig wird.
-
os_programmierer schrieb:
In meiner Wohngegend werden entweder SAP- oder Embedded-Programmierer gesucht. Die Tatsache, dass ich mich mit Low Level schon beschäftigt habe, macht es leichter, die Low Level Programmierung anderer System zu lernen und ich kann auf den SAP-&%$)!§&/" verzichten...
vielleicht möchtest du dir anschauen, wie fertige betriebssystemkernel arbeiten. hier --> http://www.nilsenelektronikk.no/
findest du zwei, einer mit task switching, einer ohne.
ansonsten gibt es (für PC's, aber nicht nur), noch dieses: --> http://www.freertos.org/
(sehr rudimentär, aber nettes studienobjekt, zum auspropieren auf 'ne x86 kiste brauchst du den watcom compiler)
-
Artchi schrieb:
Sorry, aber da kann man doch ne ISO-C++-Stdlib implementieren, oder? Das wäre das Minimum was ich von einem OS verlangen würde, das sich die API an der ISO-C++-Stdlib hält.
Geil Exceptions im Kernel. Ronny hat, als ich ihn bei seinem Betriebssystem-Projekt dazu gedraengt habe, Exceptions zu unterstuetzen, gemeint, dass die dafuer noetigen 15 K Zeilen (woher der die Zahl hat? whatever) ihm zu viel seien.
-
Mr. N schrieb:
Geil Exceptions im Kernel.
exception handling im kernel ist keine frage der programmiersprache. idealerweise muss die CPU das unterstützen und dann kann's vom betriebssystem abgefangen werden.
-
@Artchi
Ich habe daran gedacht, die STL zu verwenden, bin aber davon sehr schnell abgekommen. Zum ersten is die nicht wirlich stabil. Wenn man an c++ 0x denkt (hoffentlich bleibt das bei 0x), dann wird sie die Standard Bibliothek von c++ bald ändern. So viele 0x gibt es nicht mehr. Ich möchte nicht von anderen abhängig werden wieder bei der API. Zweitens is die die c++ stdlib einfach nur grauslig in vielen sachen. Beispielweise untersützt open von fstream keine std::string klasse als parameter. Das sind meine Gründe von den Standard-APIs abzugehen.
Weiters muss API als solche noch definiert werden. Mit dem Kernel kann man sowieso nur per interrupt, sysenter/exit, callgate, ... kommunizieren. Die Programmiersprache is da unwichtig. Die restliche API wird immer mit services kommunizieren. Dabei werden einfache Nachrichten ausgetauscht. Auch hier ist die Sprache nicht wichtig. Es wird also nie DIE C++ API für das OS geben. Es ist immer nur ein Wrapper für die verscheidenen Methoden der Kommunikation mit anderen Prozessen oder dem Kernel.@pale dog
danke. Ich werde sie mir ansehen.
@pale dog 2.
Die CPU hat damit nichts zu tun. Er meint c++ Exceptions, nicht CPU Exceptions.@Mr. N
Exceptions sind sicher für den Anfang noch nicht wichtig, aber wohl dann bald danach. Man kann den Code dafür entweder selbst schreiben oder den vom GCC verwenden (compiliert wird sowieso alles mit dem g++). Der Code müsste sicher noch in manchen Teilen angepasst werden, damit er mit der OS-API zusammenarbeitet. Vielleicht hat er die Menge an Zeilen vom GCC, dort sind es aber ca "nur" 5500.
-
@pale dog:
programmiersprachen-exceptions sind rein softwareseitig, und benötigen keinen extra hardware supportin einem microkernel könnte man evtl die gcc libs nutzen um exceptions zu ermöglichen
*edit*
man muss anmerken, das programmiersprachen-exceptions in treibern grundsätzlich massive probeme erzeugen können
und die gcc libs benötigen tls support, sonst können sie nicht thread-save arbeiten (was in einem mono/exokernel recht problematisch wäre)
-
@r0nny
Ich kann dir nur zustimmen. Genauso stelle ich mir das auch vor. Die Treiber werden fast ausschließlich im Userspace als Plugins für die einzelnen Services laufen. Ich habe ein Dokument über TLS gefunden, mich aber noch nicht näher damit beschäftigt. Mit halbwegs guter Dokumentation sollte das aber schon implementierbar sein.
Wäre schön, wenn du vielleicht am OS mitmachst. Was hast du bisher gemacht?
-
r0nny schrieb:
@pale dog:
programmiersprachen-exceptions sind rein softwareseitig, und benötigen keinen extra hardware supportach so, naja, mit sowas würde ich einen kernel nicht belasten. das macht ihn nur unnötig fett und (wahrscheinlich) langsam. hardware exceptions sind schon sinnvoll für die stabilität eines kernels. misalignment, division durch 0, zugriffe auf geschützte bereiche etc. sollten nicht zum absturz führen...
-
Ich beschreib vielleicht einmal den Bootvorgang, wie ich ihn mir vorstelle:
grob:
Bootsector -> Second Stage -> Kerneldetailierter:
Bootsector:
- Sammeln wichtiger Informationen über den PC. z.B. ACPI Memory Map
- Laden des Second Stage per int 13h Extensions. Disketten hat eh kaum einer mehr heute.
- Protected ModeSecond Stage:
- Virtual x86 Mode bereitstellen
- Start aller Real Mode APIs (13h, 16h, ...) bzw Start der VBE
- EXT3 Treiber starten
- möglicherweise Konfigurationsdatei laden
- Kernel-EXE laden
- Alle dynamischen Bibliotheken für den Kernel laden (braucht ELF support im second stage)Kernel:
- API zum Second Stage starten (falls sowas nötig ist...)
- Segmentierung und Paging (neu) initialisieren
- Prozess- und Speichermanagment starten
- Informationen über geladenen Bibliotheken vom Second Stage übernehmen und in die Initialisierung einfließen lassen
- Hardware Service laden (initialisiert vor allem CPU, ACPI, PCI, USB, ...)
- Festplatten- und Dateisystem Service laden
- weitere Services laden (z.B. input, graphics, console, network, log, ...)Das Hardware Service sollte im Allgemeinen für die Hardware zuständig sein, solange diese nicht von anderen Services verwaltet werden kann. Z.B. kann das Netzwerk Service alle Netzwerkkarten selbst verwalten bzw. das Speicher Service die Festplatten plus Controller.
Vielleicht schreibt jemand seine Meinung darüber hier rein...
-
booten würd ich grundsätzlich erstmal per grub machen,
auf anderen architekturen dann entweder grub2 oder per openfirmware
auf einigen arm's gibts komische bootumgebungen, die wären dann haariger
da es ein microkernel ist, halte ich es generell für sinnvoll früher oder später ein posix api service bereitzustellen
auf real mode zeugs würde ich wenn möglich vollständig verzichten
*edit* fixed typo
-
r0nny schrieb:
auf einigen arm's gibts komische ootumgebungen, die wären dann haariger
was sind ootumgebungen?
-
Hat grub einen Dynamischen Linker an Bord? Wenn nicht, dann is er leider maximal zum Laden des Second Stage geeignet.
Außerdem möchte ich mich, da ich immer noch alleine bin, auf x86 und vielleicht dann später auf x86_64 beschränken.
Wieso grad bei einem Microkernel eine POSIX-API? Nur, damit grub geht?
Real Mode braucht man nur, wenn grub das nicht übernehmen kann.
Es existiert schon ein Bootsector, der eine statische ELF-exe läd - derzeit noch von Floppy, später dann aber von Disk. D.h., dass man wenig umschreiben muss.
-
grub hat keinen dynamsichen linker an board, packt einen aber direkt in den 32 bit mode, und kann bereits service-module pre-loaden
die grundlegenden dienste, die dynamisches laden usw bereitstellen sollten sowiso statisch in sich gelinkt sein, und des rest sollte einfach per fork von einem basisprozess der nur den dynamischen linker enthält (und alles weitere hinzulädt) erledigt werden
*edit*
posix api soll nicht im kernel sein, sondern als dienst angeboten werden, da einfach viele tools dann einfach portierbar sind, und bestimmte programmiersprachen posix als gundlage benötigen
-
In den Protected Mode komme ich schon selbst. Das ist nicht schwer. Dass grub Module laden kann, weiß ich. Aber ich weiß zum Zeitpunkt, an dem grub läuft, ja nicht, welche Bibliotheken der Kernel dann braucht.
Wieso man POSIX als Dienst anbieten soll, ist mit nicht ganz klar. Es ist nur eine API. Eine Bibliothek sollte dafür reichen. Aber wie gesagt, ich möchte kein POSIX ebenso wenig Programmiersprachen, die das voraussetzen, wobei mir nicht ganz klar ist, welche Sprache von POSIX abhängt.
Ich möchte die Tools selbst schreiben. Für einen Router braucht man ja keinen Compiler. Programme, wie die der coreutils sind schnell geschrieben.
Wie schon davor im Thread gesagt wurde: Wenn man POSIX will, kann man ja existierende Betriebssysteme verwenden. Mir ist klar, dass POSIX verlockend ist, weil man dann die GNU Programme drauf laufen lassen kann. Aber ich möchte das maximal beim gcc machen. Der Teil der POSIX API, den der gcc verwendet, ist eh noch der einfacher aber z.B. die POSIX-Threads möchte ich echt nicht nachbauen müssen.
-
os_programmierer schrieb:
Wieso man POSIX als Dienst anbieten soll, ist mit nicht ganz klar. Es ist nur eine API. Eine Bibliothek sollte dafür reichen.
Auch fuer so obskure Dinge wie Signal Handling?