Autor Thema: Kerneldesignfrage  (Gelesen 7650 mal)

matheguru

  • Beiträge: 113
    • Profil anzeigen
Gespeichert
« am: 22. April 2009, 14:31 »
Ich wollte fragen ob der Aufbau meines Kernel richtig ist?
Mein Kernel soll ein Mikrokernel mit einem monolithischen Teil werden:
Monolith:
 - Physische speicherverwaltung
 - Virtuelle speicherverwaltung
 - SATA/ATA treiber
 - fat32 foramt lesen (um die einzelnen Module des kernels zu laden)
 - elf format lesen
Ist das soweit richtig? was ist überflüssig? was fehlt ?
Was muss dann in den Mikroteil rein?
Und was gehört dann in die Treiber?

grüße Paul
« Letzte Änderung: 24. April 2009, 14:52 von matheguru »
Hacker zu sein bedeutet mehr, als sich nur damit auseinander zu setzen, es ist eine Lebenseinstellung

chris12

  • Beiträge: 134
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 22. April 2009, 16:35 »
ich würd sagen alles andere, wie zB
-video treiber
-floppy (vllt gleich in den mon teil)
-keyboard treiber
-etc
OS? Pah! Zuerst die CPU, dann die Plattform und _dann_ das OS!

jgraef

  • Beiträge: 67
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 22. April 2009, 17:21 »
Ich wollte fragen ob der Aufbau meines Kernel richtig ist?
Mein Kernel soll ein Mikrokernel mit einem monolithischen Teil:
Monolith:
 - Physische speicherverwaltung
 - Virtuelle speicherverwaltung
 - SATA/ATA treiber
 - fat32 foramt lesen (um die einzelnen Module des kernels zu laden)
 - elf format lesen
Ist das soweit richtig was ist überflüssig was fehlt ?
Was muss dann in den Mikroteil rein?

grüße Paul

Es gibt keinen Microkernel mit monolithischen Teil. Entweder Microkernel oder Monolith. In deinem Fall ist das wohl eher ein Monolith. Du könntest den ATA- und FAT32-Treiber auch in eigene Module machen. Laden kann die dir Grub.

chris12

  • Beiträge: 134
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 22. April 2009, 17:41 »
ist das was er will nicht eher ein hybrit kernel?
OS? Pah! Zuerst die CPU, dann die Plattform und _dann_ das OS!

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 22. April 2009, 19:25 »
Auf jeden Fall fehlt Prozeßverwaltung/Multitasking und wenn noch Mikrokernelaspekte reinsollen, brauchst du vermutlich auch irgendeine Form von IPC.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

matheguru

  • Beiträge: 113
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 24. April 2009, 14:56 »
Also floppy werde ich eh nicht unterstützen! Brauch man Prozessverwaltung um die Mikrokernelmodule zu laden und ausführen zu lassen? Keyboardtreiber gehört doch nciht unbedingt in den Kernel oder nicht ? Naja ich muss ja eine art hybrid machen, da ich ja grub etc. nicht benutzen möchte und mein eigener bootloader nur eine Binärdatei aus der ClusterKette lädt.
Hacker zu sein bedeutet mehr, als sich nur damit auseinander zu setzen, es ist eine Lebenseinstellung

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #6 am: 24. April 2009, 15:40 »
Zitat
Brauch man Prozessverwaltung um die Mikrokernelmodule zu laden und ausführen zu lassen?
Ja.

Zitat
Keyboardtreiber gehört doch nciht unbedingt in den Kernel oder nicht ?
Nein, braucht man nicht.

Zitat
Naja ich muss ja eine art hybrid machen, da ich ja grub etc. nicht benutzen möchte und mein eigener bootloader nur eine Binärdatei aus der ClusterKette lädt.
Dann ist eventuell dein Bootloader "zu dumm" für dein Projekt. Wir raten ja sowieso zu Grub (auch wenn wir jedes Mal aufs neue gegen Wände sprechen)...
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

matheguru

  • Beiträge: 113
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 24. April 2009, 16:18 »
Ok kann schon sein aber wie schon im anderen Thread erwähnt ich möchte GRUB nicht. Na ja ich habe mich kurzerhand entschlossen doch ein Monolith zu machen und die Kommunikation der Komponenten werde ich irg. über nachrichten gestalten.
Hacker zu sein bedeutet mehr, als sich nur damit auseinander zu setzen, es ist eine Lebenseinstellung

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #8 am: 24. April 2009, 16:34 »
Na ja ich habe mich kurzerhand entschlossen doch ein Monolith zu machen und die Kommunikation der Komponenten werde ich irg. über nachrichten gestalten.
Dann hast du irgendwas nicht verstanden. Bei einem Monolith geschieht die Kommunikation über direkte Funktionsaufrufe. Bei einem Microkernel über Nachrichten oä. (aka IPC = Interprozesskommunikation).
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

matheguru

  • Beiträge: 113
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 24. April 2009, 16:48 »
Da habe ich mich misständlich ausgedrückt, ich meinte die Kommunikationen zu den Treibern wie Keyboard,Graka, etc. mache ich dann irg. über Nachrichten.
Hacker zu sein bedeutet mehr, als sich nur damit auseinander zu setzen, es ist eine Lebenseinstellung

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #10 am: 24. April 2009, 16:59 »
Exakt so habe ich dich verstanden. Aber bei einem Monolith sind diese ja im Kernel. Also wird eben nicht über IPC, sondern direkt über Funktionsaufrufe kommuniziert.

Es könnte natürlich sein, dass du eigentlich Microkernel meintest, als du Monolith gesagt 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

matheguru

  • Beiträge: 113
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 24. April 2009, 19:44 »
Wenn du das so sagst, dann were ich froh wenn du mir noch mal den genauen, beachte auf genau, aufbau von einem mikro- u. monolithischenkernel. vieleicht kannst ja auch erwähnen was alles rein gehört auch treibertechnisch wie dateisystem, hd-treiber, tastaturtreiber, etc.
danke
Hacker zu sein bedeutet mehr, als sich nur damit auseinander zu setzen, es ist eine Lebenseinstellung

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #12 am: 24. April 2009, 20:01 »
Ich nehme mal stark an, bei diesem Konzept kommt am Ende weder ein Monolith noch ein Mikrokernel raus, sondern irgendeine komische Art von Hybrid. ;)

Auf GRUB verzichten kann man, wenn man es unbedingt will. Aber die Entscheidung, auf einen vernünftigen Bootloader komplett zu verzichten und dafür die Möglichkeit eines sauberen Kerneldesigns zu opfern, weil er das ganze Zeug miterledigen können muß, das eigentlich ein Bootloader machen sollte - das ist für mich schwer nachvollziehbar.

Wobei ich natürlich einsehe, daß ein vernünftiger Bootloader viel Arbeit ist. Deswegen nimmt man ja normal auch GRUB.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #13 am: 24. April 2009, 20:24 »
Mikrokernel (zu den einzelnen Punkten steht was unserem Wiki :wink: ) enthält:
* Speicherverwaltung
* Prozessverwaltung
* Interprozesskommunikation (IPC)

monolithischer Kernel enthält:
* alles obere auch
* alle Treiber

Bei einem Mikrokernel werden die Treiber hingegen in eigene Prozesse, d.h. in schedulbare Einheiten die (auf x86/x64 Prozessoren) in Ring 3 laufen. Bei einem monolithischen Kernel sind die Treiber entweder statisch in die Kernelbinary gelinkt (also einfach der Kernel und alle Treiber kompiliert und alles zusammengelinkt in eine Binary) oder die Treiber werden dynamisch dem Kernelimage hinzugefügt. Bei beiden Varianten laufen die Treiber (auf x86/x64 Prozessoren) in Ring 0.

Das wäre jetzt die scharfe Trennung von Mikrokernel und monolithischem Kernel. Aber man kann jetzt natürlich beliebige Zwischenstufen auch wählen.
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

matheguru

  • Beiträge: 113
    • Profil anzeigen
Gespeichert
« Antwort #14 am: 25. April 2009, 10:42 »
Aber wenn alle Treiber im Kernel drinn sind bei einem Monolithen, dann muss es ja auch eine implementation geben um die gerätespezifischen Treiber der Firmen irg. hinein zu bekommen, oder wie? Bei Windows sind die nämlich in einem eigenem Ordner und nicht im Kernel, oder nicht?
Hacker zu sein bedeutet mehr, als sich nur damit auseinander zu setzen, es ist eine Lebenseinstellung

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #15 am: 25. April 2009, 11:15 »
"Im Kernel" heißt nicht unbedingt, daß am Ende alles in einer einzigen Datei liegt. Es heißt nur, daß die Treiber volle Kernelrechte haben (also Ring 0) und im selben Adreßraum laufen. Ladbare Kernelmodule kann man natürlich trotzdem machen - siehe Linux (von Win habe ich nicht viel Ahnung).
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

matheguru

  • Beiträge: 113
    • Profil anzeigen
Gespeichert
« Antwort #16 am: 25. April 2009, 14:42 »
Na ja wenn das so ist, stelle ich mal an dieser Stelle eine andere Frage! Was ist denn mit der Sicherheit, wenn Treiber auch die vollen Rechte erhalten, wie der Kernel. Das ist ja wiederrum eine Systemschwäche, die zum absturtzt führen kann und evtl. hackern erlaubt mithilfe von eigene Treibern Schaden zuzuführen. Ist nicht dann doch sinnvoll einen Mikrokernel zu machen wo die Treiber dann im Ring 3 laufen?
Hacker zu sein bedeutet mehr, als sich nur damit auseinander zu setzen, es ist eine Lebenseinstellung

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #17 am: 25. April 2009, 14:50 »
Zitat
Was ist denn mit der Sicherheit, wenn Treiber auch die vollen Rechte erhalten, wie der Kernel. Das ist ja wiederrum eine Systemschwäche, die zum absturtzt führen kann und evtl. hackern erlaubt mithilfe von eigene Treibern Schaden zuzuführen.
Das ist eine Systemschwäche, wenn
1. Der Benutzer der den Treiber laden möchte so etwas überhaupt darf und
2. Der Treiber überhaupt geladen werden kann
Man kann bei beidem ansetzen:
1. Bestimmten Benutzern die Rechte dafür entziehen
2. Nur (von dir/deiner Firma) signierte Treiber erlauben (Das wäre dann eine Whitelist) oder einen "Virenscanner" für Treiber (Blacklist)
In der Praxis gibts sowohl das mit den Benutzerrechten (Linux und neuere Windows) als auch Whitelisting (Neuerere Windows). Alternativ kann man natürlich das Problem ignorieren (ältere Windows, die meisten Hobby-OS).

Zitat
Ist nicht dann doch sinnvoll einen Mikrokernel zu machen wo die Treiber dann im Ring 3 laufen?
Trotz allem musst du Treibern spezielle Operationen erlauben, da sie spezielle Speicherbereiche, I/O-Bereiche und Interrupts benötigen. Insofern bekommst du auch Sicherheitsprobleme, wenn auch m.E. geringere.
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

matheguru

  • Beiträge: 113
    • Profil anzeigen
Gespeichert
« Antwort #18 am: 25. April 2009, 14:54 »
Ja aber die Treiber können im Ring 3 laufen, wenn sie nur über syscalls mit dem Kernel kommonizieren, aber ich merke schon die performence ist besser wenn sie im Ring 0 laufen und es ist auch einfacher sie zu implementieren, wenn man nicht ständig auf syscalls zugreifen möchte.
Hacker zu sein bedeutet mehr, als sich nur damit auseinander zu setzen, es ist eine Lebenseinstellung

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #19 am: 25. April 2009, 14:58 »
Der Punkt ist, daß du auch in Ring 3 keine vollkommene Sicherheit hast. Treiber brauchen Hardwarezugriff und Hardware ist außerhalb des Kernels und damit tendenziell böse. Konkretes Beispiel: Die meisten Treiber brauchen irgendeine Form von DMA und für das gelten keine Zugriffsbeschränkungen. Sobald der Treiber also an die Hardware rankommt und DMA machen kann, kann er auch den Kernel überschreiben.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

 

Einloggen