Betriebsystem Beispiele
-
Du kannst dir auch mal MINIX3 anschauen:
Das ist für den Einstieg wahrscheinlich ein wenig freundlicher, als ein Linux.
-
Der Link ist gut...
Danke!^^
-
Ich hohl den Thread mal wieder aus der versenkung wegen einer Frage die noch gut dazu passt. Und zwar!
Warum Windows in C zum größten teil ist ,ist ja klar weil damals gabs noch kein C++ wo Bill Gates angefangen hat, aber warum ist z.b das MINIX auch in C?
Würde das auch mit C++ gehen? Und am wichtigsten was sollte man verwänden C++ oder doch besser Assemble?Mfg Wikinger75!
-
Nun, C führt in den meisten Fällen wohl zu schnelleren und kleineren Programmen (zumindest auf dem Microcontroller mit dem avr-gcc, das übertrage ich jetzt einfach mal auf den PC), was ja für ein Betriebssystem durchaus relevant ist. Mit ASM kriegst du eben noch kleinere und noch schnellere Programme hin.
Ob man C oder ASM verwenden soll lässt sich wohl schlecht pauschalisieren, es kommt immer darauf an was du machen willst. Der Bootloader wird AFAIK meist in ASM geschrieben aber sobald man die Basis hat wird wohl zumeist C verwendet. Irgendwo gibt es hier glaube ich von Erhard Henkes einen recht großen Artikel zum Thema Betriebssystem Programmierung.
-
blub² schrieb:
Irgendwo gibt es hier glaube ich von Erhard Henkes einen recht großen Artikel zum Thema Betriebssystem Programmierung.
Ich weiss nicht, ob du dies meinst:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-236354.htmlIst nicht wirklich ein Artikel, aber ein recht langer Thread über Betriebsysteme und Assembler

@Wikinger75,
MINIX ist laut Wikipedia im Jahre 1987 entstanden. Da war C++ noch ziemlich jung
Wieso hauptsählich C verwendet wird, kann ich nicht genau sagen. Ich denke es ist zum Teil schon so, dass man davon ausgeht, dass C Code schneller und kleiner ist. Allerdings will ich das bis heute nicht so recht glauben, hatte aber noch nie die Möglichkeit es selber in diesem Bereich zu testen

Vielleicht liegt es aber auch daran, dass C++ erst im Jahre 1998 einen Standard bekam und seither gab es noch nicht so viele neue Betriebsysteme oder irgendwie bekanntere.Naja, ich kann selber nur mutmassen, kenne mich zu wenig in dem Bereich aus, deshalb halte ich mal lieber die Schnauze, bevor ich zu viel Unsinn erzähle

Grüssli
-
Dravere schrieb:
blub² schrieb:
Irgendwo gibt es hier glaube ich von Erhard Henkes einen recht großen Artikel zum Thema Betriebssystem Programmierung.
Ich weiss nicht, ob du dies meinst:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-236354.htmlIst nicht wirklich ein Artikel, aber ein recht langer Thread über Betriebsysteme und Assembler

Fast, ich meinte den in dem Thread verlinkten Artikel:
http://www.henkessoft.de/OS_Dev/OS_Dev1.htm
-
Das Problem mit C++ im Kernel ist einfach, dass man viel mehr tun muss, damit man damit ein Betriebsystem programmieren kann. Im Prinzip kann man am Anfang alle funktionen aus der std (und das sind seeehr viele) nicht verwenden. Die müssen zuerst auf dein eigenes Betriebsystem portiert werden. Das ist ziemlich viel Aufwand.
Ich selbst probiere ja zur Zeit ein OS mit C++ zu schreiben. Allerdings ist das gerade in der Anfangsphase eigentlich nur C mit ein paar Klassen, da die meisten Funktionen (new, delete, ...) erst geschrieben werden müssen.Und ASM muss man, egal in welcher Sprache man ein Betriebsystem schreibt, auf jeden Fall verwenden, da gewisse Befehle nur da zur Verfügung stehen.
-
Danke für die Links Leute.
Wenn ich das mal Richtig verstehe.
ASM muss man können, allein wegen den funktion, wenn ich das richtig verstanden habe. Den Kern muss ich in C Aufbauen kann ihn jedoch mit Klassen strukturieren.
Danach muss ich den C++ STD auf das System portieren und den Rest kann ich mit C++ Aufbauen.Hab ich des so Richtig verstanden?
Paar Fragen bleiben noch^^
1.) Was heißt das "portiert"?
2.) Wie komplettt auf die std verzichten muss ich dan die c bibliotheken benutzen oder wie? Z.b anstat fstream die C Variante FILE?
3.) Warum kann man denn std da nicht benutzen?Mfg Wikinger75!
-
1. Portieren heisst soviel, wie für eine Plattform implementieren, respektive die notwendigen Änderungen anzubringen.
2/3. Die Standardbibliothek benutzt schlussendlich meist ebenfalls Betriebssystemabhängige Funktionen. new fordert irgendwo den Speicher bei dem OS an und wenn du nun man dein eigenes Betriebssystem schreibst, dann gibt es da kein OS, wo du den Speicher anfordern kannst.
-
Die Standardbibliothek benutzt schlussendlich meist ebenfalls Betriebssystemabhängige Funktionen. new fordert irgendwo den Speicher bei dem OS an und wenn du nun man dein eigenes Betriebssystem schreibst, dann gibt es da kein OS, wo du den Speicher anfordern kannst.
Ah, also kann ich hier nur C++ im sinne von C mit Klassen benutzen, den new operator kann ich ja so überladen das er malloc bzw. freeloc benutzt, also die C funktionen.
Was machen die C Bibliotheken, wie bauen die auf? Direkt auf die Maschiene oder wie?
Also muss man aufjedenfall ASM und C können C++ ist da nur nebensache oder wie?
Eine weitere Frage die sich mir jetzt stellt, ich denke das der C++ Standard auf C aufbaut, warum verwendet er hier aufeinmal systemabhängige methoden? Das kapier ich einfach nicht...
Mfg Wikinger75!
-
Vielleicht interessiert dich der Link, was man auch immer davon halten mag.
http://thread.gmane.org/gmane.comp.version-control.git/57643/focus=57918
-
auch gewisse C Funktionen bauen auf Betriebsystemabhängige Funktionen auf. Malloc und Free musst du auch in C zuerst implementieren, bevor du sie verwenden kannst.
Prinzipiell gilt: Alles was irgendwie mit dem Betriebsystem zu tun hat/haben könnte (files, bildschirmausgabe, memory allocation, treiber...) musst du selbst machen. Du musst auch zuerst die C Bibliothek auf dein System portieren, bevor du etwas aus ihr verwenden kannst.
-
blitzmaster schrieb:
Malloc und Free musst du auch in C zuerst implementieren, bevor du sie verwenden kannst.

Wozu soll das gut sein? Der gesamte Speicher gehört einem doch schon.
-
Ich spiele auch mit dem Gedanken, ein Betriebssystem zu entwickeln. (Nur so aus Interesse, wie bei Linus übrigens
).
Meine Ziel ist vor allem ein OS mit unheimlich viel Kontrolle des Benutzers und natürlich Sicherheit.
Auf Grafik kommt es mir dann erst mal nicht so an, ich muss mir allerdings noch überlegen, ob ich es DOSmäßig mache,
oder eher so wie Win3.1 (95 oder gar XP bzw. Vista wären dann wahrscheinlich doch zu hoch, Linux equivalente habe ich nicht im Kopf).
Ich habe mir absichtlich eher weniger Beispiele angeschaut,
um mit meinen Gedanken nicht so an andere Betriebssysteme gebunden zu sein (jaja, erfolreiche, geprüfte Konzepte ignorieren, ich weiß...).
Anfangen müsst' ma' halt mal :D.
Ach ja: Auf Realmode, wie er irgendwo als "Einstieg" empfohlen wird (hier?),
werde ich verzichten, dort werde ich nur das nötigste machen (GDTR, LDTR und IDTR aufsetzen seien als Beispiele genannt).
Literaturempfehlungen: Das habe ich erst gestern studiert:
Ziemlich schwere Kost beim ersten mal lesen (war ja auch schon nach Mitternacht),
aber wenn es dann (mit einer kurzen Denkpause dazwischen) noch mal liest und
auch alles unbekannte beispielsweise bei Wikipedia nachschaut, dann ist es schon zu verstehen: http://www.tecchannel.de/server/prozessoren/402223/x86_programmierung_und_betriebsarten_teil_4/index1.html
(Das "402223" durch "402220" bis "402225" ersetzen und die Zahl vor ".html" korrigieren (1 entspricht erster Seite),
wenn man den Teil wechseln möchte, die Links gingen (zumindest bei mir) nicht.)Dem Threadersteller viel Glück wünschend
Fast2Edit: Mich würde auch mal interessieren, wie viel Aufwand die Portierung ist, könnte man dem Compiler nicht einfach sagen,
dass er (z.B. bei "new" eine andere Aufrufadresse) reinschreiben soll? (Nämlich die des Speicherverwalters,
welcher dann allerdings u.U. doch in ASM geschrieben werden sollte).
@hm: Ich würde auch nicht davon ausgehen, das einem "alles" gehört,
denn es wäre doch nett, eine zentrale Stelle zu haben,
die weiß was frei ist, anstatt vllt. sogar ein bestimmtes Muster
zur Erkennung freien Speichers nutzen zu müssen.
-
@Fast2: Das "dem Compiler sagen" ist im Prinzip auch das portiern. Du musst im Falle von new/delete die beiden operatoren einfach überladen, mit dienen eigenen Funktionen.
Achja, und noch ein Tip am Rande: Nimm lieber einen fix fertigen Bootloader wie GRUB, das erspart dir am Anfang schon viel Ärger. Der wechselt dir in den PM und setzt dir die GDT und so auf...
-
Hmm ja gut alle eigentlich fragen währen dann jetzt eig. geklärt.
Gut ich muss sowieso noch anständig C++ lernen und dan hau ich noch C drauf, damit ich C/C++ Perfekt behersche und erst dan lern ich Assembler.
Hab noch was zu tun diese Thread war nur aus neugier eig.
Naja die links heb ich mir aufjedenfall auf
.Jetzt bleibt nur noch eine Frage^^
Wie müsste ich vorgehen, wenn ich das OS auf einem UNIX Standard bauen will?
Wo finde ich infos dazu, usw.?Mfg Wikinger75!
-
Wikinger75 schrieb:
Wie müsste ich vorgehen, wenn ich das OS auf einem UNIX Standard bauen will?
Wo finde ich infos dazu, usw.?http://en.wikipedia.org/wiki/POSIX könnte interessant sein.