Sind Prozessplaner auf Betriebssystem- oder Hardwareebene implementiert?

729
EnderShadow

Sind Prozessplaner in Software oder Hardware implementiert? Wenn es in Hardware gemacht wird, wie verfolgt die Hardware die Anzahl der Prozesse und wo befinden sie sich, wenn sie inaktiv sind? Wenn es sich um Software handelt, stellt die Hardware normalerweise Anweisungen bereit, um bei der Planung zu helfen, beispielsweise beim Laden oder Speichern der Register an einer Adresse im Speicher?

0
Es gibt Prozessoranweisungen, um den Scheduler und Interrupt-Handler zu unterstützen. Einige Architekturen (z. B. Intel i386 und weiter IIRC) enthielten Anweisungen zum Speichern des Kontexts und zum Wiederherstellen des Kontexts. Siehe http://wiki.osdev.org/Context_Switching sawdust vor 8 Jahren 0

1 Antwort auf die Frage

1
LawrenceC

x86 CPUs on your normal PC platform do not implement scheduling in hardware, it is the kernel's job to do that. Neither do any other common CPUs such as ARM, MIPS, PowerPC, etc.

does the hardware normally provide instructions to help with scheduling such as for loading or storing the registers at an address in memory?

"Loading and storing registers at an address in memory" is a fundamental CPU operation that helps with just about everything a CPU does, not just scheduling tasks.

And not really - continuing with x86 as an example, there aren't any special process scheduling instructions.

About the only thing required from hardware from a scheduling perspective - if you want to have a pre-emptive multitasking system as opposed to a cooperative multitasking system - is a way to interrupt a task that is taking too long, and the PC platform provides timers that cause interrupts when they expire as a way to force a process to relinquish control of the CPU.

-1 für * "Und nicht wirklich - am Beispiel von x86 gibt es keine speziellen Anweisungen für die Prozessplanung." * sawdust vor 8 Jahren 0
Sie haben das TSS-Material, das Task * Switching * unterstützt (falls verwendet), nicht aber Task * Scheduling *. LawrenceC vor 8 Jahren 0
Wenn es keine Taskumschaltung gibt, wozu dient dann die Taskplanung? Wann würde eine neu bereite Aufgabe mit der höchsten Priorität einer aktiven Aufgabe mit niedrigerer Priorität vorgehen? Behaupten Sie, dass es nicht die Aufgabe des Planers ist, diesen Wechsel durchzuführen? sawdust vor 8 Jahren 0
Ich stimme mit Ihnen überein (ich habe die TSS-Funktionen vergessen) - aber um pedantisch zu sein, zu entscheiden, wann eine Aufgabe ausgeführt wird, und tatsächlich zu wechseln, hängt mit verschiedenen Dingen zusammen. Beim IIRC können Sie nicht einfach Task-Gates einrichten und sind dann fertig, Sie brauchen etwas "über" den Aufgaben, die "OK" sagen, die nächste Aufgabe wird ausgeführt - selbst wenn es sich um ein einfaches Round-Robin-Verfahren handelt. Anscheinend sollte ich mein Wissen darüber auffrischen. :) LawrenceC vor 8 Jahren 0
Lesen Sie dies - http://wiki.osdev.org/Context_Switching LawrenceC vor 8 Jahren 0
* "Lies das" * - Duh, ich habe diesen Link bereits gestern in einem Kommentar zum Q gepostet. * "Entscheiden, wann eine Task ausgeführt wird und tatsächlich gewechselt wird, hängt von verschiedenen Dingen ab" * - Das bedeutet nur mehr Routinen in einem Scheduler-Modul, das heißt, es liegt immer noch alles im Scheduler-Subsystem. FWIW aus anderen Gründen suchte ich in Linux [Kernel / sched / core.c] (http://lxr.free-electrons.com/source/kernel/sched/core.c?v=4.1) und fand Routinen für Bestimmen der nächsten auszuführenden Task * und * des Taskwechsels. sawdust vor 8 Jahren 0