ProzessEin Prozess würde ich jetzt hier einfach mal als Adressraum + alle anderen Ressourcen (Dateihandles, IPC handles, ... Anmerkung: Die Ressourcen müssen nicht unbedingt im Kernel sein, zB kann ein Dateihandle auch in einem (V)FS-Server sein <-> Microkernel) + alle enthaltenen Threads bezeichnen. Ein Prozess ist nicht schedulbar.
ThreadEin Thread ist die schedulbare Einheit und gehört zu einem Prozess.
static libraryDiese Bibliothek wird zur Linkzeit, also beim Erstellen der ausführbaren Programmdatei komplett in die Programmdatei mit aufgenommen.
shared library1. Diese Bibliothek muss zur Linkzeit dem Linker mitübergeben werden, damit keine unaufgelösten externen Symbole auftreten und der Linker in die ausführbare Programmdatei schreiben kann aus welcher shared-library welche Funktionen kommen. Beim Laden der Programmdatei werden diese shared-libraries dann in den Adressraum des Prozesses eingeblendet und anhand der vom Linker erzeugten Tabellen alle Funktionsaufrufe des ausführbaren Programms korrekt auf die Adressen in der shared-library abgebildet.
2. Man kann solche Bibliotheken auch wie es RedEagle beschrieben hat zur Laufzeit laden über sowas wie load_library("mylib.so") und dann Funktionsadressen über irgendeine API-Funktion auslesen, aber das ist nur für Plugins nützlich und ist für eine libc ziemlich umständlich.
Shared-libraries können natürlich nicht nur in den Adressraum eines Prozesses, sondern sind so konzipiert (zumindest elf und PE), dass sie in mehreren Adressräumen gleichzeitig existieren können. Das läuft natürlich komplett transparent für den Prozess ab.
Das für Bibliotheken keine flat binary ausreicht sollte glaub ich jetzt klar sein, oder?
MicrokernelTreiber sind eigenständige Prozesse.
monolithischer KernelTreiber sind im Kernel enthalten.
Syscalls bzw. Kernel APISyscalls sind die Funktionen, die nicht zum Prozess selbst gehören, aber die ein Thread direkt aufrufen kann. Dies wird über Interrupts, callgates, die 'syscall' oder 'sysenter' Instruktion erreicht. Da ein Thread somit nur direkten Kontakt (d.h. ohne den Adressraum zu wechseln) mit dem Kernel haben kann ist es zugleich die Kernel API.
IPCDie Kernel API eines Microkernels muss nun mindestens einen Mechanismus zur Kommunikation mit anderen Prozessen (IPC) bereitstellen, damit du auch Funktionen in anderen Prozessen (also zB eines Treibers) nutzen kannst. Wie solche Mechanismen aussehen könnten steht in dem wikipedia-link von taljeth (wobei die englische Seite einiges mehr bietet,
en: IPC). In einem monolithischen Kernel ist IPC erstmal eigentlich kein wirklich großes Thema (wird aber von den bekannten Kernels bereitgestellt), da der Kernel ja die komplette Betriebssystemfunktionalität enthält.
Anmerkungen: Microkernel bzw. monolithischer Kernel sind nur zwei Extreme (wenn man mal den Nanokernel außen vor lässt). Alles zwischendrin ist natürlich auch denkbar.
Das ist meine Sicht der Dinge. Logische Fehler sind selbst zu klären.
Ich hoffe es hilft.