OS Hilfe



  • Hab jetzt n Kernel geschrieben das drauf wartet, bis man eine Taste drückt.
    Bei "r" rebootet der PC und bei "b" fährt der PC sich runter. Bei allen anderen Tasten passiert nichts.
    Jetzt wollte ich weiter machen. Weiß aber nicht was ich jetzt machen muss. Muss ich jetzt ne Dateisystem Unterstützung schreiben oder wie?? Oder erstmal was völlig anderes schreiben?
    Wäre für jeden Link dankbar. In den FAQs hab ich net wirklich was gefunden was ich jetzt machen soll.
    MFG



  • Kommt darauf an, wofuer du dein OS einsetzen willst.
    Wenn die einzige Aufgabe deines OS sein soll, den PC auf Anfrage abzuschalten/neu zu starten, dann "musst" du dich als naechstes nur noch an der Schoenheit deines OS erfreuen.
    Also werd' dir erstmal darueber klar, was du ueberhaupt willst, und frage dann nochmal konkreter.



  • Ich wollte ja eigentlich mein kleines eigenes OS schreiben mit graphischer Oberfläche. Also irgendwann nen Explorer schreiben wie bei Windows. Aber dafür muss ich ja erstmal n Dateisystem haben und denn IDE Treiber in den Kernel packen bevor ich denn meinen Explorer starte oder seh ich das falsch?
    Und erstmal wollte ich mich mit SingleThreading zufrieden geben. Multithreading wollte ich denn irgendwann mal in mein OS einbauen wenn ich damit weiter bin.
    Aber wie gesagt muss ich ja bestimmt erstmal Treiber schreiben oder so und n Dateisystem.
    Dabei bräuchte ich n bisschen Hilfe.
    MFG



  • Desert Storm schrieb:

    Und erstmal wollte ich mich mit SingleThreading zufrieden geben. Multithreading wollte ich denn irgendwann mal in mein OS einbauen wenn ich damit weiter bin.

    Das sehe ich anders. Das ist schon eine Richtungsentscheidung, welche zu total verschiedenen Kerneln führt und ehrlich gesagt halte ich es für sehr schwierig sowas nachträglich in den Kernel einzubauen. Das führt nur zu weiteren Debuggingsessions "darker than night" und die sind leider sowieso viel zu häufig 😃
    Falls du Multitasking willst, dann würd ich mich mal mit Protected-mode beschäftigen.
    Wenn du nur singletasking (bzw. realmode, dir sollten aber schon die Einschränkungen des realmode bewusst sein! Da wirds eher nix mit fancy graphics) willst, dann würd ich mich mit nem Memorymanagement (also implementierungen für new/delete bzw. malloc/free) und dann evtl. ein paar treiber (nen dateisystemtreiber, welcher auf die BIOS ints aufsetzt zb) schreiben, das ausführen von programmen ermöglichen und anschließend ein paar syscalls implementeieren.



  • OK hast du Links dazu wie ich Multitasking implementiere? Protected Mode steht ja in den FAQs.
    Und wie schreibe ich nen Treiber für das Dateisystem oder rufe Syscalls auf?
    Wäre nett wenn du mir n paar Links schickst oder so. Weil zum Dateisystem hab ich nich wirklich was gefunden bei Google.
    Ist ein IDE Treiber unbedingt nötig?
    MFG



  • Desert Storm schrieb:

    OK hast du Links dazu wie ich Multitasking implementiere?

    Sind allgemeinere Links, aber da gibts auch was zu Multitasking:
    OSFAQ
    Lowlevel
    [url=http://www.intel.com/design/pentium4/manuals/index_new.htm]
    IA-32 Intel® Architecture Software Developer's Manuals[/url] (3A und B sind für OSDev interessant)

    Und wie schreibe ich nen Treiber für das Dateisystem

    FAT Specification direkt von Microsoft ansonsten einfach mal googlen, da findet sich schon einiges 😉

    oder rufe Syscalls auf?

    Syscalls sind aufrufe des Programms an das OS. Man realisiert des meistens über Interrupts.

    Ist ein IDE Treiber unbedingt nötig?

    Im realmode kannst die BIOS Interrupts benutzen, die stellen schon die Funktionalität zur verfügung. Ansonsten kannst natürlich auch nen floppy disk treiber schreiben.
    IDE fand ich persönlich leichter, weil da ein Standard (ATA/ATAPI) existiert und des kein so gefrickel is wie floppy.



  • Wie will der ein Betriebssystem schreiben bei den Fragen?



  • Christoph K. schrieb:

    Wie will der ein Betriebssystem schreiben bei den Fragen?

    Jeder fängt mal klein an (ausser TGGC, der war schon immer Gott) 😃
    Oder gehst du so immer an neue Themengebiete ran: Ich hab keine Ahnung, also lass ichs lieber?



  • bluecode schrieb:

    Christoph K. schrieb:

    Wie will der ein Betriebssystem schreiben bei den Fragen?

    Jeder fängt mal klein an (ausser TGGC, der war schon immer Gott) 😃
    Oder gehst du so immer an neue Themengebiete ran: Ich hab keine Ahnung, also lass ichs lieber?

    Nein, aber ich würde kein Projekt in Angriff nehmen, das meinen Wissenshorizont bei weitem übersteigt, ohne mein Wissen den Anforderungen anzupassen.
    In diesem Fall würde das bedeuten sehr lange zu recherchieren und nicht einen Kernel aus einem Tutorial abzutippen und danach dumme Fragen in einem Forum zu stellen, die nur zeigen, dass man unfähig ist google zu verwenden und keine Ahnung von der Thematik hat.
    Ich habe mich selber im Zuge einer Fachbereicharbeit in das Thema Betriebsysteme eingelesen, unter anderen mit Werken wie Moderne Betriebssystem (ast) oder anderen "Standardwerken". Nach 10 Büchern, also über 10.000 Seiten traue ich mich zu behaupten, einen guten Überblick über die Thematik zu haben. Wenn man nun aber z.B. ein File System implementieren will, werden meiner Ansicht nach weitere 10.000 notwendig sein, selbiges bei Speicherverwaltung, Threadmanagment, ... .
    Es wird nicht ausreichen, keine Ahnung von dem Thema zu haben und Fragen wie die obrigen in einem Forum zu stellen, das ist der Punkt.



  • Christoph K. schrieb:

    Nein, aber ich würde kein Projekt in Angriff nehmen, das meinen Wissenshorizont bei weitem übersteigt, ohne mein Wissen den Anforderungen anzupassen.

    Ich habe selbst mal so angefangen. Ihm wird mit Sicherheit klar sein, dass er nach 2 Monaten noch keine gui hat und wie gesagt jeder fängt mal klein 🙂

    Christoph K. schrieb:

    Ich habe mich selber im Zuge einer Fachbereicharbeit in das Thema Betriebsysteme eingelesen, unter anderen mit Werken wie Moderne Betriebssystem (ast) oder anderen "Standardwerken". Nach 10 Büchern, also über 10.000 Seiten traue ich mich zu behaupten, einen guten Überblick über die Thematik zu haben. Wenn man nun aber z.B. ein File System implementieren will, werden meiner Ansicht nach weitere 10.000 notwendig sein, selbiges bei Speicherverwaltung, Threadmanagment, ... .

    Bitte folgendes nicht zu persönlich nehmen:
    ROFLMAO, sry... aber des klingt ja nach nem richtigen Theoretiker. Weißt wahrscheinlich dann auswendig wie man mit den "sicheren Zuständen" (oder so), Deadlocks verhindert :p Aber mal ehrlich, wer braucht so nen Schmarn schon beim Programmieren 😉 Lesen können ist nicht immer alles. Und die tollsten Theorien nutzen dir beim OSDev sowieso rel. wenig...

    Nur so aus Interesse: Progs du nen Kernel, wenn ja, Homepage/Links?
    Für meine Facharbeit (Mathe) hat das Internet und ein bisschen Zeit ausgereicht 😉 und es waren trotzdem genug Punkte :p Was war dein FA-Thema und darf man mal lesen?

    Christoph K. schrieb:

    Es wird nicht ausreichen, keine Ahnung von dem Thema zu haben und Fragen wie die obrigen in einem Forum zu stellen, das ist der Punkt.

    Immer locker bleiben 😉 Irgendwann fängt jeder mal ein neues thematisches Gebiet an und ich finde es dann beim Programmieren eigentlich immer besser ein bisschen Source zu produzieren bzw. zu fragen warum irgendwas nicht funktioniert. Ich könnt mich net durch 10k Seiten durchquälen ohne irgendwas praktisches zu machen. Da bleibt der Spass dann auf der Strecke und darum sind die meisten ja schließlich da.



  • bluecode schrieb:

    Christoph K. schrieb:

    Ich habe mich selber im Zuge einer Fachbereicharbeit in das Thema Betriebsysteme eingelesen, unter anderen mit Werken wie Moderne Betriebssystem (ast) oder anderen "Standardwerken". Nach 10 Büchern, also über 10.000 Seiten traue ich mich zu behaupten, einen guten Überblick über die Thematik zu haben. Wenn man nun aber z.B. ein File System implementieren will, werden meiner Ansicht nach weitere 10.000 notwendig sein, selbiges bei Speicherverwaltung, Threadmanagment, ... .

    ROFLMAO, sry... aber des klingt ja nach nem richtigen Theoretiker. Weißt wahrscheinlich dann auswendig wie man mit den "sicheren Zuständen" (oder so), Deadlocks verhindert :p Aber mal ehrlich, wer braucht so nen Schmarn schon beim Programmieren 😉

    jeder dessen programm sich total komisch verhält, nach unverhersehbarer zeit abstürzt, zufällige ergebnisse ausspuckt usw...



  • net schrieb:

    jeder dessen programm sich total komisch verhält, nach unverhersehbarer zeit abstürzt, zufällige ergebnisse ausspuckt usw...

    Klar, der sollte wissen was Deadlocks sind und wo/wie sie entstehen können, aber das war nicht mit "sicheren Zuständen" gemeint. Das is ne spezielle Technik, welche in dem Buch "moderne Betriebssysteme" von ast erwähnt wird, und welche es theoretisch unmöglich macht Deadlocks überhaupt zu produzieren. Da jede Aktion einer Anwendung, welche mit Sicherheit zum Deadlock führt, verhindert (vorausgesetzt man hat dann auch den Scheduler, der das dann auch noch richtig umsetzt), Aber das geht logischerweise auf die Performance.



  • bluecode schrieb:

    net schrieb:

    jeder dessen programm sich total komisch verhält, nach unverhersehbarer zeit abstürzt, zufällige ergebnisse ausspuckt usw...

    Klar, der sollte wissen was Deadlocks sind und wo/wie sie entstehen können, aber das war nicht mit "sicheren Zuständen" gemeint. Das is ne spezielle Technik, welche in dem Buch "moderne Betriebssysteme" von ast erwähnt wird, und welche es theoretisch unmöglich macht Deadlocks überhaupt zu produzieren.

    um sowas gleich aus dem wege zu gehen baut man besser alles vollständig mit lock-free algorithmen. dafür braucht man atomare 'read-modify-write' instructions. hat der prozessor die nicht, dann braucht man nur einen lock um sich eine solche zu simulieren. viele betriebsysteme machen's leider anders (windows z.b.) und haben dann mit so fiesen sachen wie 'priority inversion' zu kämpfen weil tasks aufeinander warten müssen (sowas muss dann mit ausgeklügelten verfahren wieder ausgebügelt werden)...



  • Langsam wirds OT 🙂

    Du kannst mit "read-modify-write" nicht alle Deadlocks vermeiden. Einfaches vllt. unrealistisches Beispiel: Wenn zwei Apps die gleiche Datei öffnen und die eine einen Lock von 0 bis byte x hat, die andere von x bis ende. Beide Apps wollen nun auch noch auf den jeweils anderen Teil zugreifen. Das geht wohl für beide Apps nicht -> Deadlock. Sowas zu verweiden ist a bisl schwieriger als die atomic operations der cpu.



  • bluecode schrieb:

    Wenn zwei Apps die gleiche Datei öffnen und die eine einen Lock von 0 bis byte x hat, die andere von x bis ende. Beide Apps wollen nun auch noch auf den jeweils anderen Teil zugreifen. Das geht wohl für beide Apps nicht -> Deadlock. Sowas zu verweiden ist a bisl schwieriger als die atomic operations der cpu.

    in einem lock-free system gibts keine deadlocks. wenn, wie in deinem beispiel, der zugriff auf teile einer datei nicht möglich ist, dann wird der abgebrochen (mit fehlercode z.b.). die tasks bleiben niemals hängen weil auf ressourcen nicht gewartet wird.



  • Es wird aber wohl eher kein OS ohne locks geben, nehm ich jetzt einfach mal an 🙂 Mir fällt aber leider grad kein Beispiel ein, wo es wirklich nicht ohne geht bzw. es vom Standpunkt des Programmierers eigentlich sinnvoll ist locks zu nehmen...



  • bluecode schrieb:

    Mir fällt aber leider grad kein Beispiel ein, wo es wirklich nicht ohne geht bzw. es vom Standpunkt des Programmierers eigentlich sinnvoll ist locks zu nehmen...

    guckst du:
    http://www.nwcpp.org/Downloads/2005/Lock-Free.pdf
    http://www.uni-koblenz.de/~zoebel/ws2004/Synchronisierung.pdf
    http://www.cs.cmu.edu/~410/lectures/L31_LockFree.pdf
    usw. das internet ist (mal wieder) voll davon 😉



  • Bitte folgendes nicht zu persönlich nehmen:
    ROFLMAO, sry... aber des klingt ja nach nem richtigen Theoretiker. Weißt wahrscheinlich dann auswendig wie man mit den "sicheren Zuständen" (oder so), Deadlocks verhindert :p Aber mal ehrlich, wer braucht so nen Schmarn schon beim Programmieren 😉 Lesen können ist nicht immer alles. Und die tollsten Theorien nutzen dir beim OSDev sowieso rel. wenig...

    Stimmt ich liebe die Theorie. Für mich stellt sie die Basis dar.
    Wie soll ich eine Schleife schreiben wenn ich die Theorie, die Syntax, nicht kenne?
    Woher soll ich wissen welcher Sortier-Algorithmus für meinen Container am schnellsten (oder wie es hier üblich ist: performantesten 😉 ) ist, wenn ich die Theorie dahinter nicht kenne?
    Wie soll ich ein Betriebsystem planen, wenn ich mir über die theoretische Funktionsweise nicht bewusst bin?
    Und meine Vorgehensweise ist zunächst wirklich immer theoretisch: ich lese mich ein, sammle Informationen, plane mein Programm um es einfach auszudrücken. Was daran verwerflich sein soll würde mich echt interessieren, oder stehst du auf nächtelange Debug-Sessions? 😉


Anmelden zum Antworten