Basisfragen zum Paging



  • Hallo,

    erik.vikinger schrieb:

    Erhard Henkes schrieb:

    Ich hoffe, Dir gefällt das neue Modul von Badestrand.

    Wo finde ich das?

    Ich dachte wir reden über das Tutorial. Euren Source-Code hab ich mir noch gar nicht angesehen.

    Ich hab mir mal die 3 Seiten Deines Tutorials angesehen und muss ganz ehrlich sagen das sich mein erster Eindruck bestätigt hat. Es wird zwar an realem Code gezeigt wie es geht aber es wird quasi kaum eine Designentscheidung näher erläutert. Das Thema "Micro-Kernel vs. Monolith" wird mit ein paar platten Vorurteilen (meine persönliche Meinung) abgehandelt. Dazu könnte auch mal erwähnt werden das ein Monolith einen großen virtuellen Adressraum (z.B. 1GB) benötigt da alle Speicherbereiche der physischen Hardware (Graka-RAM usw.) da hinein gemappt werden müssen wohingegen ein Micro-Kernel mit sehr wenig virtuellem Speicher auskommt (z.B. 64MB) da die physischen Speicherbereiche der Hardware jeweils in den User-Space-Teil der entsprechenden Treiber-Prozesse landen können. Wenn der Leser dessen Hintergründe verstanden hat klappt der Rest bestimmt besser. Das es dann noch prozessspezifische Daten gibt (z.B. die individuellen Paging-Tabellen), die an einer bestimmten Stelle liegen müssen (eventuell sogar im User-Teil) aber für den User trotzdem nicht zugänglich sind, interessiert den Anfänger bestimmt auch.
    Das Thema "Lower-Half-Kernel vs. Upper-Half-Kernel" wird, so wie alle Entscheidungen über den virtuellen Adressraum, gar nicht angegangen.

    Dein Tutorial ist zwar ganz nett aber vermittelt keine allgemeinen Infos sondern ist extrem stark an PrettyOS geknüpft und die Designentscheidungen, die eben zu PrettyOS geführt haben, werden nicht erläutert. Der Leser ist danach zwar in der Lage ein zweites PrettyOS zu schreiben aber die ganzen Designentscheidungen, die für eine Eigenkreation notwendig sind, sind ihm nach wie vor unbekannt.

    Grüße
    Erik



  • Hallo,

    @Erhard Henkes:
    War mein Urteil zu hart? Sorry falls ich zu direkt war.
    Ich bin nicht der Meinung das Dein Tutorial schlecht ist, es fehlen (mir persönlich) nur ein paar wesentliche Aspekte.
    Ich will auch nicht Deine Designentscheidungen als schlecht oder falsch abstempeln, ich finde nur das diese Entscheidungen (von dehnen Du manche vielleicht noch nicht mal bewusst getroffen hast) deutlich sichtbar (und eventuell nachvollziehbar) gemacht werden sollten. In Deinem Tutorial geht es einfach von einer Problemlösung zur nächsten ohne das dem Leser klar wird warum die Probleme gerade so und nicht anders gelöst wurden, was nicht heißen soll das Deine Problemlösungen falsch oder unpassend sind. Ich finde einfach das der "Handlungsstrang" in Deinem Tutorial zu linear ist. Es gibt keine Abzweigungen. Das soll nicht heißen das Du X verschiedene OSe entwickeln sollst sondern nur das diese Abzweigungen im Tutorial deutlich beschrieben werden sollten eventuell mit einer kleinen Begründung warum Du gerade diesen Weg und nicht einen anderen genommen hast. Damit würde Dein Tutorial aus der breiten Masse deutlich positiv herausragen.

    Und der ein oder andere Blick über den Tellerrand ist bei einer so komplexen und vielfältigen Materie wie der OS-Entwicklung einfach Pflicht.

    Auch typische Anfängerfragen, wie jene die diesen Thread gestartet haben, sollten angegangen werden. Uns zweien sind diese Zusammenhänge so selbstverständlich das wir gar nicht mehr darüber nachdenken aber jemand der davon keine Ahnung hat steht vor einem unlösbaren geistigen Knoten. Deswegen fand ich es so unpassend das Du einfach auf Dein Tutorial verweist obwohl dort wirklich gar keine einzige Antwort auf die Fragen vom OP drin sind. Ich persönlich finde Du setzt in Deinem Tutorial zu viel Wissen voraus das ein Anfänger einfach noch nicht hat.

    Wenn Du Dein Tutorial weiter entwickeln möchtest lese ich mir das gerne noch mal durch.

    Grüße
    Erik


  • Mod

    Wenn Du Dein Tutorial weiter entwickeln möchtest lese ich mir das gerne noch mal durch.

    Schau Dir lieber den Sourcecode von Badestrand an und gib dazu deine konstruktive Meinung ab. Das Tutorial ist Geschichte.



  • Hallo,

    Erhard Henkes schrieb:

    Das Tutorial ist Geschichte.

    Warum den das? 😕
    Ich dachte der didaktische Ansatz steht im Vordergrund. Das war eigentlich der einzigste Grund warum ich diesem Projekt hin und wieder ein klein wenig meiner Aufmerksamkeit gewidmet hatte.
    Ein wirklich gutes OS-Dev-Tutorial fehlt im Internet tatsächlich! Normale Hobby-OSe gibt es mehr als man zählen kann!
    In welche Richtung soll es den nun gehen? Wollt Ihr was besonderes in Eurem OS verwirklichen?

    Erhard Henkes schrieb:

    Schau Dir lieber den Sourcecode von Badestrand an und gib dazu deine konstruktive Meinung ab.

    Außer das ich das allozieren von virtuellem und physischen Speicher trennen würde fällt mir nicht viel dazu ein.

    const uint32_t virt_addr = virt_alloc(1**20 , false); //alloziert virtuellen Speicher für den User-Space (bei Fehler kommt 0 zurück)
    alloc_map_phys(virt_addr , 1**20); //alloziert und mappt echten physischen Speicher in diesen virtuellen Speicher (Rückgabewert mit Fehlercode sollte überprüft werden)
    
    /** oder **/
    
    const struct pci_infos; //enthält Infos über ein PCI-Device, mir geht es hier um den Speicher des Gerätes
    const uint32_t virt_addr = virt_alloc(pci_infos.mem_size , true); //alloziert virtuellen Speicher für den Kernel-Space (bei Fehler kommt 0 zurück)
    map_phys(virt_addr , pci_infos.mem_phys_addr , pci_infos.mem_size); //mappt den vorhandenen physischen Speicher in diesen virtuellen Speicher (Rückgabewert mit Fehlercode sollte überprüft werden)
    

    Grüße
    Erik


  • Mod

    Ich dachte der didaktische Ansatz steht im Vordergrund.

    Ja, das stimmt. Aber heute würden wir Badestrands Code verwenden und erläutern. Das kommt alles noch, wie darüber denke ich noch nach. Momentan fehlen einfach die Ressourcen.



  • Hallo,

    Erhard Henkes schrieb:

    Aber heute würden wir Badestrands Code verwenden und erläutern. Das kommt alles noch ...

    Aber dann ist es doch nicht mehr authentisch, nebst dessen das dann wieder die ganzen Designentscheidungen nicht im Tutorial landen. Also ich möchte so ein Tutorial nicht lesen müssen, da kann ich mir auch ne trockene Spec nehmen. Außerdem sollte guter Code selbsterklärend sein.

    Ich kann nur wiederholen :

    erik.vikinger schrieb:

    Ein wirklich gutes OS-Dev-Tutorial fehlt im Internet tatsächlich**!** Normale Hobby-OSe gibt es mehr als man zählen kann**!**

    Grüße
    Erik


  • Mod

    Ein wirklich gutes OS-Dev-Tutorial fehlt im Internet tatsächlich!

    Mein Tutorial ist eher ein Logbook meines eigenen Einstiegs gewesen, also kann es didaktisch noch nicht überlegen sein, also mit allen Möglichkeiten und Gründen für einzelne Wege. Ich habe mich dabei an dem Tutorial von James Molloy orientiert, das leider auch lediglich straight forward geschrieben ist: http://www.jamesmolloy.co.uk/tutorial_html/index.html

    @erik...: wie findest Du eigentlich das neue, sehr ausführliche Tutorial von www.brokenthorn.com? Hier: http://www.brokenthorn.com/Resources/OSDevIndex.html



  • Hallo,

    Erhard Henkes schrieb:

    Mein Tutorial ist eher ein Logbook meines eigenen Einstiegs gewesen,

    Dann verstehe ich erst recht nicht warum da nicht Deine Designentscheidungen, die Du ganz sicher treffen musstest, drin beschrieben (oder zumindest erwähnt) sind.

    Erhard Henkes schrieb:

    also kann es didaktisch noch nicht überlegen sein,

    Das habe ich auch nicht erwartet!

    Erhard Henkes schrieb:

    also mit allen Möglichkeiten und Gründen für einzelne Wege.

    Es würde fürs erste reichen die Möglichkeiten aufzuzählen und für die Gründe ein "Coming Soon" zu schreiben. Zumindest selbst getroffene Entscheidungen sollte man aber begründen können.

    Erhard Henkes schrieb:

    wie findest Du eigentlich das neue, sehr ausführliche Tutorial von www.brokenthorn.com?

    Ich hab das nur kurz überflogen, mein englisch ist leider nicht so perfekt, und ein paar wenige Abschnitte genauer gelesen. Meine vorläufige Meinung: ich hab keine Beschreibung von Designentscheidungen gesehen und eine Antwort auf die Frage 1 des OP dieses Threads hab ich auch (noch) nicht gefunden. Solche wichtigen Basis-Infos muss man sich als Anfänger wohl zwischen den Textzeilen bzw. im Quell-Code zusammensuchen oder in irgendeinem Forum hoffen das sich jemand in klaren Sätzen ausdrückt.

    Grüße
    Erik


  • Mod

    Dein Ansatz ist auf jeden Fall richtig, werde ich in Zukunft stärker berücksichtigen. Es gibt leider auch viele Punkte, die man nur instinktiv richtig machen kann, z.B. C anstelle C++ verwenden, wobei ich da sogar eigene Erfahrungen im Robotikbereich habe.


  • Mod

    Das Thema C vs C++ bei OSDEV wurde von mir wegen seiner Bedeutung in einen separaten Thread abgetrennt: http://www.c-plusplus.net/forum/viewtopic-var-t-is-260046.html

    Hier sollte es vorwiegend um das spezielle Thema "Basisfragen zum Paging" gehen.


Anmelden zum Antworten