Hallo,
Und ob ich jetzt bestimmten Userspace-Programmen solchen Zugriff erteile oder ob die einfach im Kernel laufen und keine explizite Erlaubnis brauchen, ist sicherheitstechnisch gesehen eher kein Unterschied.
Nunja, wenn man einem User-Space-Prozess Zugriff auf eine bestimmte-Hardware-Komponente erlaubt dann gilt das eben nur für diese eine Komponente und nichts anderes (das lässt sich über die prozess-spezifische Page-Table recht flexibel realisieren). Wenn Code mit Kernel-Privilegien läuft dann hat er vollen Zugriff auf
alles, jede Hardware und jeden (Kernel-)Speicherbereich. Dieser deutlich bessere Schutz (jedem Prozess nur genau das zu erlauben was er wirklich benötigt und nicht mehr) gegen SW-Fehler ist ja gerade einer der Gründe für einen Micro-Kernel und gegen einen Monolithen.
Der Exo-Kernel geht da gegenüber einem
klassischem Micro-Kernel in der Hinsicht weiter das im Kernel nur noch die Schutzmechanismen selber drin sind aber deren Verwaltung ein spezieller User-Space-Prozess macht. Also z.B. eine Exception wird zwar im Kernel geworfen (die CPU wechselt bei einer Exception immer in den Kernel-Mode) aber wird dann von dem speziellem User-Mode-Prozess (welcher die Exception per IPC o.ä. gemeldet bekommt) verarbeitet. Dafür benötigt der Kernel eine recht spezielle/umfangreiche API über die jedes Detail der Schutzmechanismen ganz exakt gemanagt werden kann. Der Exo-Kernel und die speziellen User-Space-Prozesse die jene Dinge regeln die bei einem Micro-Kernel der Kernel selber macht sind eine Einheit die exakt zusammen passen muss.
Ich persönlich sehe in einem Exo-Kernel gegenüber einem schlanken Micro-Kernel keine Vorteile, aber rein theoretisch ist es besser so wenig Code wie möglich im Kernel-Space zu haben. Andererseits wirkt sich ein Fehler in den speziellen User-Mode-Prozessen von denen der Exo-Kernel exzessiv abhängig ist (fast) genau so aus wie wenn der fehlerhafte Code direkt im Kernel-Space währe. Dafür wird die eh schon wenige Funktionalität eines Micro-Kernel über mehrere Programme verteilt und ist eventuell schwerer zu warten/debuggen.
Die Frage Micro vs. Exo ist IMHO eher akademischer Natur.
Wie macht der Exokernel das eigendlich mit den libs??
Werden die mit in den kernel gelinkt oder werden die nachgeladen???
Ich verstehe absolut nicht was Du meinst. Könntest Du das bitte etwas klarer formulieren?
Grüße
Erik