C
Also was den Scheduler angeht ist auch meine Vorstellungskraft auf eine hohe Probe gestellt. Es heist "der Kernel ist eine Sammlung von Betriebssystem-Service-Routinen die darauf warten aufgerufen zu werden". Das stimmt bis auf den Scheduler. Dieser arbeitet aus sich heraus, es ist die wichtigste Routine im ganzen Betriebssytem. Es gibt sogenannte MicroKernel-Betriebssysteme. Bei deren Kernel kommt es nicht so sehr darauf an, daß er sehr klein ist (man kann auch einen monolytischen Kernel sehr klein halten) sondern darauf daß in deren Kernel nur das wichtigste drin steckt. Ein solcher Microkernel besteht im Idealfall nur aus einem Scheduler/Dispatcher und einer Speicherverteiler. So ein Kernel macht nichts anderes als anderen Prozessen Speicherplatz und Prozessorzeit zuzuweisen. Alles andere machen verschiedene Serverprozesse. Also Netzwerk-Verkehr, Filesystem. Ein normaler User-Prozess in einem solchen System ruft dann, wenn er z.B eine Datei öffnet den Filesystem-Server auf. Dieser ist berechtigt auf die Platte zuzugreifen.
Aber der Scheduler ist der Regiseur. Wenn wir im extremfall einen Prozess haben, der eine höhre Priorität hat, als alle anderen Prozesse, bekommt dieser Prozess dauernd die Prozessor vom Scheduler, ausser wenn er blockiert ist. Wenn dieser Prozess in eine Datei schreibt, dann bekommt, dann erkennt das der Scheduler, denn die Dateioperation ist Teil seines Prozessablaufs. Dann bekommt der Fileserver den Prozessor zugeteilt, bis die Schreib-Operation fertig ist. Wenn der Prozess dann weiter aktiv ist bekommt er wieder den Prozessor.
Und so ist dann auch bei monolytischen Betriebssystemen. Der Scheduler ist das Herz des Kernels. Er vergibt den Prozessor immer für gewisse Zeitscheiben an die verschiedenen rechenfähigen (nicht blockierten) Prozesse. Wenn einer dieser Prozesse einen Dateizugriff macht, ruft er halt wiederrum den Kernel. Nun führt der Kernel diese Funktionalität für den Prozess aus. Es ist halt der gleiche Kernel, der auch den Scheduler beherbergt. Hat den Vorteil daß man keine Daten zwischen verschiedenen Server-Prozessen austauschen muss. Eine solche Betriebssystem-Routine (System-Call) die im Kernel ruht und darauf wartet ausgeführt zu werden ist dann wirklich ein Thread. Der Begriff Kernel-Thread ist aber schon belegt für normale Threads in einem User-Prozess, die aber vom Kernel geschedult werden, also nicht verwechseln mit einem Systemcall.
Wenn dem Prozess, der den System-Call aufgerufen hat, der Prozessor enzogen wird (also ein anderer Prozess an der Reihe ist) dann bleibt auch der Systemcall erst mal stecken und pausiert (ausser er steckt in einem kritischen Code-Abschnitt der nicht unterbrochen werden darf).
Um es zusammenzufassen, der Scheduler ist das zentrale Herz eines jeden Betriebssystems!
So ich genug geschwafelt. Ich hoffe daß mich jemand korrigiert, falls ich falsch liege.
Gruss Christian