2009-04-12 11 views
11

Immer wenn der Bootloader das Betriebssystem lädt, ist vermutlich nur EIN Programmfluss aktiv, oder? Dies würde bedeuten, dass ein Prozessor den Befehlszeiger hält und die Befehle ausführt, die er an der Position findet, auf die das EIP-Register zeigt. An welchem ​​Punkt und wie beginnt das System mehr Prozesse und/oder Threads zu nutzen (keine userland-Threads, sondern CPU-Threads)?Low-Level-Programmierung: Wie startet das Betriebssystem einen neuen Thread/Prozess?

Antwort

5

Das Betriebssystem bootet (nachdem das BIOS und der Bootloader fertig sind) in einer speziellen Rolle - als das erste Programm, das es ausführen soll Zugriff auf alle CPU-Befehle.

So wird es verschiedene Teile des Systems einrichten - wie Einrichten Interrupt Handlers (oder Interrupt Service Routinen). Nachdem Sie dies getan haben, können Sie einen "Scheduler" erstellen.

Die eigentliche "Prozess/Thread" -Behandlung wird von diesem Scheduler durchgeführt. Es entscheidet, welche Threads ausgeführt werden. Es verwaltet auch alle aktiven Threads. Die CPU ist sich all dieser Dinge nicht bewusst.

Sobald der Hauptleiter des Schedulers beschließt, Thread (oder "Process") A auszuführen, übernimmt er die Prozessdaten in die Register (und speichert die Register im InfoBlock des kürzlich laufenden Threads). Es teilt der CPU/einem Zeitgeber mit, einen Interrupt in n Mikrosekunden (oder andere Zeiteinheit) zu verursachen. Dann wird es der CPU sagen, das "Programm" (das einzige, was die CPU kennt) im Nicht-Betriebssystem-Modus auszuführen (so dass es keine kritischen Daten modifizieren oder eigene Unterbrechungs-Handler ohne Erlaubnis registrieren kann).

Während Thread A jetzt ausgeführt wird, wird der Hardware-Timer ausgeführt. Sobald der gewünschte Zeitversatz erreicht ist, wird ein Interrupt ausgelöst. Die Hardware stoppt dann die Ausführung des aktuellen Programms und ruft stattdessen das registrierte Interrupt Handler auf. Dieser Handler wird eine Methode des Schedulers sein (um genau zu sein).

Diese Methode wird dann erneut evaluieren, welcher Thread geplant werden soll, und so wird die Planung fortgesetzt.

+0

Vielen Dank für Ihre Erklärung. Können Sie mir sagen, wie sich dieses Bild ändert, wenn mehrere unabhängige Prozessoren/Kerne beteiligt sind? – prinzdezibel

+0

Die meisten Multicores haben mindestens einen "Master" -Prozessor (siehe andere Antworten) - L1 + -Caches würden ohne eine zentrale Verwaltung nicht funktionieren. Der Scheduler muss nur den gewünschten Prozessor für jede Registeroperation adressieren. Alles andere bleibt gleich (Timer mit festen Intervallen). –

+0

@prinzdezible: Der OS-Scheduler läuft im Allgemeinen auf jedem CPU-Kern, wenn der aktuelle Thread durch einen Interrupt oder einen Systemaufruf gestoppt wird. Um auf viele Cores skalierbar zu sein, werden nicht alle Threads betrachtet, sondern nur Threads, die dieser CPU zugewiesen sind. Wenn es zu beschäftigt ist, wird es Threads zu anderen CPUs schieben. Wenn es nicht beschäftigt ist, wird es Threads von anderen CPUs ziehen. Der Scheduler wird die Balancetasks von Zeit zu Zeit oder über einen Zähler auf alle CPUs laden (das ist langsam, also nicht oft) –

3

Eines der ersten Dinge, die ein (Multithread-) Betriebssystem starten muss, ist der Scheduler, der für die Verwaltung mehrerer Prozesse verantwortlich ist (und daher auch mehrere CPU-Threads verwaltet, zB auf Multicore-Rechnern).

Der erste Prozess, der von diesem Scheduler gestartet wird, ist typischerweise eine Art "init" -Prozess, der wiederum für das anschließende Laden der anderen Programme/Prozesse verantwortlich ist.

4

Korrekt, während des Startvorgangs gibt es nur einen Ausführungsthread. Normalerweise ist dies der Fall, bis das Betriebssystem bis zu dem Punkt initialisiert ist, an dem Low-Level-Speicherverwaltung, Scheduler usw. funktionsfähig sind.

Dies ist sogar in Multi-CPU-Systemen der Fall - ein Kern ist der "Master-Prozessor", der den frühen Start übernimmt, bis die Infrastruktur da ist, um die anderen Kerne anzustoßen.

Am Ende ist es sehr Betriebssystem-spezifisch; Die Intel Architecture Software Developer's Manuals haben die Details der Hardware-Spezifikationen. (Angenommen, Sie sprechen über Intel-Architektur; andere Architekturen können sich stark unterscheiden.)