Wie funktioniert das Schlafsystem?

968
yanpas

Eine Anwendung fordert das Betriebssystem möglicherweise auf, den Prozess für 0,5 Sekunden anzuhalten. Wie funktioniert das?

Die CPU hört nicht einfach für 0,5 Sekunden auf zu laufen, da andere Programme gleichzeitig gut funktionieren. Wie können wir also eine Anwendung für einige Zeit anhalten?

Ich denke, dass dies jedoch für alle Betriebssysteme üblich ist.

1
Eine Pause in einer Programmiersprache führt bei der Assemblierung ("NOOP" oder "NOP") zu keiner Operation. Welches Problem versuchen Sie zu lösen? Ramhound vor 9 Jahren 0
@ Ramhound Ich bin interessiert, warum, wenn das Programm angehalten wird, es keine Ressourcen verbraucht (Prozessorzeit). Der Prozessor soll Nanosekunden zählen, bis die Pause beendet ist. Oder gibt es einen Timermechanismus in der CPU? yanpas vor 9 Jahren 0
Es verbraucht keine Ressourcen, denn wie gesagt. Es führt eine NOOP-Operation aus. Vielleicht möchten Sie ein wenig recherchieren, was das eigentlich bedeutet. Dies bedeutet auch, dass das Betriebssystem einfach zu einer anderen Task wechselt, bis es unterbrochen wird, um zur anderen Task zurückzukehren. Ramhound vor 9 Jahren 1

1 Antwort auf die Frage

4
Mokubai

In einem Multitasking-Betriebssystem muss das Betriebssystem nichts so extremes tun, wie den Prozessor überhaupt nicht mehr laufen zu lassen oder die Zeit, die dieser Prozess benötigt, mit anderen Anweisungen zu füllen. Es kann etwas unendlich einfacher sein. Es kann einfach nicht geplant werden, dass die Aufgabe überhaupt ausgeführt wird.

Dies ist der springende Punkt eines Multitasking-Betriebssystems. Wenn mehrere Tasks gleichzeitig ausgeführt werden müssen, tauscht das Betriebssystem eine auf den Prozessor aus, lässt es für eine bestimmte Zeit laufen, wechselt dann die nächste Task und führt sie aus, bis alle Tasks, die ausgeführt werden müssen, ihre Aufgaben erfüllt haben .

Wenn eine Task signalisiert, dass sie für eine gewisse Zeit in den Ruhezustand versetzt werden soll oder auf einen Tastendruck warten soll, worauf sie dem Betriebssystem tatsächlich hinweist don't bother swapping me onto the processor unless time X has passed oder don't bother running me unless you have event X waiting for me to action it .

Grundsätzlich hat das Betriebssystem eine lange Liste von Aufgaben, die ausgeführt werden müssen, und für jede wäre ein Deskriptor "Warten auf Ereignisse". Alle Aufgaben, die zur Ausführung bereit sind, können eingeplant werden, und alle anderen Aufgaben werden einfach übersprungen.

Wenn es buchstäblich keine an all Aufgaben auf dem Prozessor in einem bestimmten Zeitabschnitt dann das Betriebssystem plant eine „laufen Idle “ Aufgabe, die tatsächlich H ein LT der CPU und sagen, dass es nicht um Befehle auszuführen, bis er, aufgeweckt wird in der Regel durch eine Art Interrupt. Die Verwendung dieser Methode zum Planen der Zeit zum "Nicht-Arbeiten" passt auch gut zum Paradigma eines Multitasking-Betriebssystems.

Um wieder aufzuwachen, erhält die CPU Interrupt-Ticks über die Echtzeituhr (RTC) und kann zusätzlich den HPET (High Precision Event Timer) so einstellen, dass ein Interrupt in einem bestimmten Zeitintervall ausgelöst wird. Dadurch kann das Betriebssystem die CPU für sehr genaue Zeit anhalten und dann die CPU aus dem Schlaf nehmen, um die Verarbeitung von Aufgaben erneut zu beginnen.

Wenn ich die NOOP-Anweisung erwähne, meine ich einen wörtlichen Codeblock, der das Programm anhält. Aber deine Antwort ist natürlich richtig Ramhound vor 9 Jahren 0
@Ramhound Ich hatte nicht gedacht, dass sich meine Antwort auf diesen Punkt konzentrieren sollte, und es bedeutete nicht, dass es so klang, als würde ich versuchen, dich zu korrigieren. Ich meinte es genauso wie Sie, dass es nicht nötig ist, etwas so Extremes zu tun, als die Zeit mit Code zu füllen oder den Prozessor völlig zu stoppen. Ich habe in den Kommentaren einen NOOP gesehen, der mir aus irgendeinem Grund in Erinnerung geblieben ist. Ich werde diesen ersten Absatz in Kürze klarstellen. Mokubai vor 9 Jahren 0
Wir sagen ähnliche, wenn nicht identische Dinge. Sie mussten nichts wirklich korrigieren. Sie haben etwas getan, das ich nicht mit zusätzlichen Informationen beantworten konnte. Ramhound vor 9 Jahren 0