[gesichtete Version] | [gesichtete Version] |
Kwastg (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
|||
(25 dazwischenliegende Versionen von 7 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
Beim Scheduling geht es um die Zuteilung des Betriebsmittels ''CPU'' zu den einzelnen Prozessen. | Beim Scheduling geht es um die Zuteilung des [[Betriebsmittel|Betriebsmittels]] ''CPU'' zu den einzelnen Prozessen. | ||
</p> | |||
<br /> | <br /> | ||
== Definition: Scheduling == | |||
<p> | <p> | ||
<loop_index id="5fa978789fb33">Scheduling</loop_index><loop_index id="5fa978789fb3d">Prozess-Scheduling</loop_index><loop_index id="5fa978789fb43">CPU-Scheduling</loop_index> | |||
<loop_area type="definition"> | <loop_area type="definition"> | ||
<p> | <p> | ||
Zeile 16: | Zeile 18: | ||
<br /> | <br /> | ||
== Definition: Scheduler == | |||
<p> | <p> | ||
<loop_index id="5fa978789fb4a">Scheduler|Prozess-Scheduler|CPU-Scheduler</loop_index> | |||
<loop_area type="definition"> | <loop_area type="definition"> | ||
<p> | <p> | ||
Zeile 26: | Zeile 28: | ||
</p> | </p> | ||
<p> | <p> | ||
Der Scheduler ist | Der Scheduler ist somit dafür zuständig zu entscheiden, welcher Prozess als nächstes die CPU zugeteilt bekommt. Die Umsetzung dieser Entscheidung obliegt dem Dispatcher. | ||
</p> | </p> | ||
<br /> | <br /> | ||
== Definition: Dispatcher == | |||
<p> | <p> | ||
<loop_index id="5fa978789fb50">Dispatcher</loop_index> | |||
<loop_area type="definition"> | <loop_area type="definition"> | ||
<p> | <p> | ||
Zeile 40: | Zeile 43: | ||
</p> | </p> | ||
<br /> | |||
<p> | |||
Die folgende Abbildung zeigt den zeitlichen Verlauf auf der CPU: Bei jedem Kontextwechsel entscheidet der Scheduler darüber, welcher Prozess als nächstes die CPU zugeteilt bekommt, der Dispatcher führt anschließend den Wechsel vom "alten" zum "neuen" Prozess auf der CPU durch. | |||
</p> | |||
<p> | |||
<loop_figure title="Scheduler und Dispatcher werden bei einem Kontextwechsel aktiv" description="" copyright="CC-BY" index=true show_copyright=true id="5fa978789fb57"> | |||
[[Datei:Kontextwechsel.jpg|700px]] | |||
</loop_figure> | |||
</p> | |||
<br /> | |||
<p> | <p> | ||
Man kann sich leicht vorstellen, dass der Dispatcher bei einem Kontextwechsel eine Reihe von kleinen Dingen erledigen muss. | Man kann sich leicht vorstellen, dass der Dispatcher bei einem [[Kontextwechsel]] eine Reihe von kleinen Dingen erledigen muss. | ||
</p> | </p> | ||
<br /> | <br /> | ||
== Aufgabe 1 == | |||
<p> | <p> | ||
<loop_area type="task"> | <loop_area type="task"> | ||
<loop_task title="Ein Dispatcher muss tun, was ein Dispatcher tun muss..."> | <loop_task title="Ein Dispatcher muss tun, was ein Dispatcher tun muss..." id="5fa978789fb5d"> | ||
<p> | <p> | ||
Überlege, recherchiere und diskutiere in deiner Lerngruppe, um eine Liste mit kleinen Tätigkeiten zusammenzustellen, welche der Dispatcher bei einem Kontextwechsel zu erledigen hat! | Überlege, recherchiere und diskutiere in deiner Lerngruppe, um eine Liste mit kleinen Tätigkeiten zusammenzustellen, welche der Dispatcher bei einem Kontextwechsel zu erledigen hat! | ||
Zeile 62: | Zeile 77: | ||
<br /> | <br /> | ||
== Definition: Non-preemptive Scheduling == | |||
<p> | <p> | ||
<loop_index id="5fa978789fb63">Non-preemptive Scheduling</loop_index><loop_index id="5fa978bf0f886">Scheduling, non-preemptive</loop_index><loop_index id="5fa978bf0f892">nicht-unterbrechendes Scheduling</loop_index><loop_index id="5fa978bf0f89d">Scheduling, nicht-unterbrechend</loop_index><loop_index id="5fa978bf0f8a7">nicht-verdrängendes Scheduling</loop_index><loop_index id="5fa978bf0f8b0">Scheduling, nicht-verdrängend</loop_index> | |||
<loop_area type="definition"> | <loop_area type="definition"> | ||
<p> | <p> | ||
Man spricht von '''non- | Man spricht von '''non-preemptive Scheduling''' (oder auf Deutsch: '''nicht-unterbrechendes Scheduling''' oder '''nicht-verdrängendes Scheduling'''), wenn ein Prozess die exklusive Nutzung der CPU nur dann aufgeben muss, wenn er | ||
* in den Zustand ''Blockiert'' wechselt, | * in den Zustand ''Blockiert'' wechselt, | ||
* freiwillig und von selbst die CPU abgibt, oder | * freiwillig und von selbst die CPU abgibt, oder | ||
Zeile 81: | Zeile 95: | ||
<br /> | <br /> | ||
== Definition: Preemptive Scheduling == | |||
<p> | <p> | ||
<loop_index id="5fa978789fb6a">Preemptive Scheduling</loop_index><loop_index id="5fa97878eca9d">Scheduling, preemptive</loop_index><loop_index id="5fa97878ecaab">unterbrechendes Scheduling</loop_index><loop_index id="5fa97878ecab8">Scheduling, unterbrechend</loop_index><loop_index id="5fa97878ecac3">verdrängendes Scheduling</loop_index><loop_index id="5fa97878ecace">Scheduling, verdrängend</loop_index> | |||
<loop_area type="definition"> | <loop_area type="definition"> | ||
<p> | <p> | ||
Man spricht von ''' | Man spricht von '''preemptive Scheduling''' (oder auf Deutsch: '''unterbrechendes Scheduling''' oder '''verdrängendes Scheduling'''), wenn einem Prozess die exklusive Nutzung der CPU zu einem beliebigen Zeitpunkt entzogen werden kann, um sie einem anderen Prozess zu übertragen. | ||
</p> | </p> | ||
</loop_area> | </loop_area> | ||
Zeile 98: | Zeile 112: | ||
<br /> | <br /> | ||
== Definition: Zeitscheibe (Quantum) == | |||
<p> | <p> | ||
<loop_index id="5fa978789fb71">Zeitscheibe</loop_index><loop_index id="5fa978789fb77">Quantum</loop_index><loop_index id="5fa978789fb7d">Zeit-Quantum</loop_index> | |||
<loop_area type="definition"> | <loop_area type="definition"> | ||
<p> | <p> | ||
Unter einer '''Zeitscheibe''' oder einem '''Quantum''' | Unter einer '''Zeitscheibe''' oder einem '''Quantum''' versteht man den (i.d.R. sehr kleinen) zusammenhängenden Zeitraum, innerhalb dessen ein Prozess auf einem preemptiven Betriebssystem die CPU nutzen darf, ohne dabei von einem anderen Prozess verdrängt zu werden. | ||
</p> | </p> | ||
</loop_area> | </loop_area> | ||
Zeile 113: | Zeile 128: | ||
<br /> | <br /> | ||
== Aufgabe 2 == | |||
<p> | <p> | ||
<loop_area type="task"> | <loop_area type="task"> | ||
<loop_task title="Früher als spätestens"> | <loop_task title="Früher als spätestens" id="5fa978789fb85"> | ||
<p> | <p> | ||
Bei den Erläuterungen zum | Bei den Erläuterungen zum preemptiven Scheduling heisst es: "''(spätestens) am Ende einer Zeiteinheit entscheidet der Scheduler neu''". | ||
</p> | </p> | ||
<p> | <p> | ||
Nenne mindestens zwei Gründe, warum der Scheduler auch schon früher als am Ende der Zeiteinheit eine Scheduling-Entscheidung treffen könnte/müsste. | Nenne mindestens zwei Gründe, warum der Scheduler auch schon früher als "''am Ende der Zeiteinheit''" eine Scheduling-Entscheidung treffen könnte/müsste. | ||
</p> | </p> | ||
</loop_task> | </loop_task> | ||
Zeile 129: | Zeile 145: | ||
<br /> | <br /> | ||
== Aufgabe 3 == | |||
<p> | <p> | ||
<loop_area type="task"> | <loop_area type="task"> | ||
<loop_task title="Der Nächste ist der Vorherige?"> | <loop_task title="Der Nächste ist der Vorherige?" id="5fa978789fb8c"> | ||
<p> | <p> | ||
Ist es beim unterbrechenden Scheduling denkbar, dass am Ende der Zeitscheibe der Scheduler dem gerade aktiven Prozess erneut die CPU zuteilt, ohne dass zwischendurch ein anderer Prozess an der Reihe war? | Ist es beim unterbrechenden Scheduling denkbar, dass am Ende der Zeitscheibe der Scheduler dem gerade aktiven Prozess erneut die CPU zuteilt, ohne dass zwischendurch ein anderer Prozess an der Reihe war? | ||
Zeile 144: | Zeile 160: | ||
<br /> | <br /> | ||
== Aufgabe 4 == | |||
<p> | <p> | ||
<loop_area type="task"> | <loop_area type="task"> | ||
<loop_task title="Wenn ein Prozess blockiert"> | <loop_task title="Wenn ein Prozess blockiert" id="5fa978789fb93"> | ||
<p> | <p> | ||
Denke dir folgende Situation: Der gerade auf der CPU aktive Prozess blockiert. | Denke dir folgende Situation: Der gerade auf der CPU aktive Prozess blockiert. | ||
Zeile 164: | Zeile 180: | ||
</p> | </p> | ||
</loop_task> | </loop_task> | ||
</loop_area> | |||
</p> | |||
<br /> | |||
== So geht es weiter: == | |||
<p> | |||
<loop_area type="arrangement"><loop_toc> </loop_toc></loop_area> | |||
</p> | |||
<br /> | |||
== Alternative Webquelle zum Thema == | |||
<p> | |||
<loop_area type="websource"> | |||
<p> | |||
Operating Systems: CPU Scheduling<br /> | |||
<small>http://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/6_CPU_Scheduling.html</small> | |||
</p> | |||
<p> | |||
[http://www.cs.uic.edu/~jbell/ Dr. John T. Bell]<br /> | |||
Department of Computer Science<br /> | |||
University of Illinois, Chicago<br /> | |||
</p> | |||
</loop_area> | </loop_area> | ||
</p> | </p> |
Beim Scheduling geht es um die Zuteilung des Betriebsmittels CPU zu den einzelnen Prozessen.
Unter Scheduling (genauer: Prozess-Scheduling oder CPU-Scheduling) versteht man die Tätigkeit des Aufteilens der verfügbaren Prozessorzeit auf alle Prozesse.
Es sei an die im Kapitel Nur ein Prozessor mit einem Kern genannte Bedingung erinnert.
Unter einem Scheduler (genauer: Prozess-Scheduler oder CPU-Scheduler) versteht man den Teil des Betriebssystems, welcher die Scheduling-Tätigkeit durchführt.
Der Scheduler ist somit dafür zuständig zu entscheiden, welcher Prozess als nächstes die CPU zugeteilt bekommt. Die Umsetzung dieser Entscheidung obliegt dem Dispatcher.
Unter einem Dispatcher versteht man den Teil eines Betriebssystems, welcher bei einem Kontextwechsel dem derzeit aktiven Prozess die CPU entzieht, um sie anschließend dem nächsten Prozess zuzuteilen.
Die folgende Abbildung zeigt den zeitlichen Verlauf auf der CPU: Bei jedem Kontextwechsel entscheidet der Scheduler darüber, welcher Prozess als nächstes die CPU zugeteilt bekommt, der Dispatcher führt anschließend den Wechsel vom "alten" zum "neuen" Prozess auf der CPU durch.
Man kann sich leicht vorstellen, dass der Dispatcher bei einem Kontextwechsel eine Reihe von kleinen Dingen erledigen muss.
Überlege, recherchiere und diskutiere in deiner Lerngruppe, um eine Liste mit kleinen Tätigkeiten zusammenzustellen, welche der Dispatcher bei einem Kontextwechsel zu erledigen hat!
Bei der Bearbeitung dieser Aufgabe ist es ausdrücklich erwünscht, dass in der erstellten Liste Fachbegriffe verwendet werden. Hier ein Beispiel für eine kleine Tätigkeit mit Fachbegriffen:
Man spricht von non-preemptive Scheduling (oder auf Deutsch: nicht-unterbrechendes Scheduling oder nicht-verdrängendes Scheduling), wenn ein Prozess die exklusive Nutzung der CPU nur dann aufgeben muss, wenn er
Hierbei ist es also denkbar, dass ein Prozess, sobald er die CPU bekommt, diese erst wieder bei seiner Terminierung abgibt, egal wie lange es bis dahin dauert. Alle weiteren Prozesse müssen sich unter Umständen also sehr lange gedulden.
Man spricht von preemptive Scheduling (oder auf Deutsch: unterbrechendes Scheduling oder verdrängendes Scheduling), wenn einem Prozess die exklusive Nutzung der CPU zu einem beliebigen Zeitpunkt entzogen werden kann, um sie einem anderen Prozess zu übertragen.
Üblicherweise wird die Prozessorzeit dabei in kleine Zeiteinheiten eingeteilt und (spätestens) am Ende einer Zeiteinheit entscheidet der Scheduler neu darüber, welcher Prozess als nächstes die CPU bekommt.
Diese kleine Zeiteinheit ist in der Literatur unter verschiedenen Namen anzutreffen:
Unter einer Zeitscheibe oder einem Quantum versteht man den (i.d.R. sehr kleinen) zusammenhängenden Zeitraum, innerhalb dessen ein Prozess auf einem preemptiven Betriebssystem die CPU nutzen darf, ohne dabei von einem anderen Prozess verdrängt zu werden.
Innerhalb eines Quantums ist es möglich, dass der auf der CPU aktive Prozess durch Interrupts unterbrochen wird. Jedoch bekommt er nach der Abarbeitung der jeweiligen Interruptbehandlungsroutine die CPU zurück und darf diese weiter nutzen; maximal bis das Quantum aufgebraucht ist. (Siehe hierzu auch die folgende Aufgabe:)
Bei den Erläuterungen zum preemptiven Scheduling heisst es: "(spätestens) am Ende einer Zeiteinheit entscheidet der Scheduler neu".
Nenne mindestens zwei Gründe, warum der Scheduler auch schon früher als "am Ende der Zeiteinheit" eine Scheduling-Entscheidung treffen könnte/müsste.
Ist es beim unterbrechenden Scheduling denkbar, dass am Ende der Zeitscheibe der Scheduler dem gerade aktiven Prozess erneut die CPU zuteilt, ohne dass zwischendurch ein anderer Prozess an der Reihe war?
Diskutiere mögliche dafür- oder dagegen-sprechende Gründe in deiner Lerngruppe!
Denke dir folgende Situation: Der gerade auf der CPU aktive Prozess blockiert.
In dieser Situation kommen Scheduler und Dispatcher ins Spiel. Aber in welcher Reihenfolge?
Diskutiere die Varianten in deiner Lerngruppe und begründe deine Entscheidung!
Operating Systems: CPU Scheduling
http://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/6_CPU_Scheduling.html
Dr. John T. Bell
Department of Computer Science
University of Illinois, Chicago
Diese Seite steht unter der Creative Commons Namensnennung 3.0 Unported Lizenz http://i.creativecommons.org/l/by/3.0/80x15.png