Scheduler — Änderungen 7697 → 7837

Zeile 2: Zeile 2:
  
  
−
= kooperativ (non-preemptive) =
+
== kooperativ (non-preemptive) ==
 
Prozesse geben Kontrolle freiwillig ab. Kooperierened Scheduling-Strategien sind für Dialogbetrieb weniger und für Echtzeit-Betrieb überhaupt nicht geeignet. Ein Benutzer könnte im ersten Fall die Rechnerbenutzung für alle anderen Benutzer unmöglich machen, im zweiten Fall könnte ein ´Langläufer´ andere Prozesse daran hindern, vor ihrer Deadline fertig zu werden – mit allen möglichen Folgen... Deshalb wird bei päemptiven Scheduling-Strategien das OS ermächtigt,  Prozessen den Prozessor wieder wegzunehmen – bei den meisten Strategien findet das auch routinemäßig statt.
 
Prozesse geben Kontrolle freiwillig ab. Kooperierened Scheduling-Strategien sind für Dialogbetrieb weniger und für Echtzeit-Betrieb überhaupt nicht geeignet. Ein Benutzer könnte im ersten Fall die Rechnerbenutzung für alle anderen Benutzer unmöglich machen, im zweiten Fall könnte ein ´Langläufer´ andere Prozesse daran hindern, vor ihrer Deadline fertig zu werden – mit allen möglichen Folgen... Deshalb wird bei päemptiven Scheduling-Strategien das OS ermächtigt,  Prozessen den Prozessor wieder wegzunehmen – bei den meisten Strategien findet das auch routinemäßig statt.
  
−
== FCFS - First Come First Served ==
+
=== FCFS - First Come First Served ===
 
Prozesse werden in der Reihenfolge in der sie erstellt werden abgearbeitet. Erst wenn der erste beendet ist kommt der nächste an die Reihe.
 
Prozesse werden in der Reihenfolge in der sie erstellt werden abgearbeitet. Erst wenn der erste beendet ist kommt der nächste an die Reihe.
 
Bsp:
 
Bsp:
Zeile 21: Zeile 21:
 
* kurz laufende Prozesse müssen u.U. sehr lange warten, daher für Dialogsysteme nicht geeignet.
 
* kurz laufende Prozesse müssen u.U. sehr lange warten, daher für Dialogsysteme nicht geeignet.
  
−
== SJF - Smallest Job First ==  
+
=== SJF - Smallest Job First ===
 
Prozess mit küzester Bedienzeit kommt zuerst.
 
Prozess mit küzester Bedienzeit kommt zuerst.
 
Bsp:
 
Bsp:
Zeile 37: Zeile 37:
 
* größerer Verwaltungsaufwand
 
* größerer Verwaltungsaufwand
  
−
== Priority scheduling ==
+
=== Priority scheduling ===
 
Reihenfolge nach Priorität der Prozesse. Prioritäten können statisch oder dynamisch vergeben werden.
 
Reihenfolge nach Priorität der Prozesse. Prioritäten können statisch oder dynamisch vergeben werden.
  
Zeile 47: Zeile 47:
 
* Vergabe der Prioritäten nicht einfach
 
* Vergabe der Prioritäten nicht einfach
  
−
= präemptiv (preemptive) =
+
== präemptiv (preemptive) ==
 
OS holt sich Kontrolle selbst zurück (Interrupt)
 
OS holt sich Kontrolle selbst zurück (Interrupt)
  
−
== Round Robin ==
+
=== Round Robin ===
 
Alle Prozesse werden gleichberechtigt. Ein Prozess kommt nach dem Anderen an die Reihe. Jeder Prozess wird nach einer festen Zeit gestoppt und der nächste gestartet.
 
Alle Prozesse werden gleichberechtigt. Ein Prozess kommt nach dem Anderen an die Reihe. Jeder Prozess wird nach einer festen Zeit gestoppt und der nächste gestartet.
 
Bsp
 
Bsp
Zeile 67: Zeile 67:
 
* langlaufende Prozesse müssen bis zu ihrem Ende lange warten
 
* langlaufende Prozesse müssen bis zu ihrem Ende lange warten
  
−
== Round Robin (mit Prioritäten) ==
+
=== Round Robin (mit Prioritäten) ===
 
Jeder Prozess bekommt zu Anfang nach Priorität eine gewisse Zeit (Ausführzeit) zugeordnet. Dabei sollte die Zeit gleich oder ein Vielfaches der Scheduler-Frequenz (Die Frequenz in der der Scheduler aufgerufen wird) sein. Die Prozesse werden wie beim "normalen" [[#Round Robin | Round Robin]] nacheinander ausgeführt. Diesmal wird aber zum nächsten Prozess erst gewechselt, wenn beim vorherigen die Ausführzeit abgelaufen ist.
 
Jeder Prozess bekommt zu Anfang nach Priorität eine gewisse Zeit (Ausführzeit) zugeordnet. Dabei sollte die Zeit gleich oder ein Vielfaches der Scheduler-Frequenz (Die Frequenz in der der Scheduler aufgerufen wird) sein. Die Prozesse werden wie beim "normalen" [[#Round Robin | Round Robin]] nacheinander ausgeführt. Diesmal wird aber zum nächsten Prozess erst gewechselt, wenn beim vorherigen die Ausführzeit abgelaufen ist.
  
−
== Scheduling mit "Prioritätswarteschlangen" ==
+
=== Scheduling mit "Prioritätswarteschlangen" ===
 
Die Prozesse werden in Klassen eingeteilt, bei denen jeder Prozess einem, seiner Klasse entsprechenden Anteil Rechenleistung zugeteilt bekommt. Der höchsten Klasse wird am wenigsten Rechenleistung zugeteilt. Je niedriger die Klasse, desto höher ist der Anteil der Rechenleistung für den Prozess. Ein Prozess steigt einen Rang ab, wenn er vom Scheduler "gestoppt" werden muss. Andernfalls steigt der Prozess einen Rang auf.
 
Die Prozesse werden in Klassen eingeteilt, bei denen jeder Prozess einem, seiner Klasse entsprechenden Anteil Rechenleistung zugeteilt bekommt. Der höchsten Klasse wird am wenigsten Rechenleistung zugeteilt. Je niedriger die Klasse, desto höher ist der Anteil der Rechenleistung für den Prozess. Ein Prozess steigt einen Rang ab, wenn er vom Scheduler "gestoppt" werden muss. Andernfalls steigt der Prozess einen Rang auf.
 
Hierzu ein Beispiel:
 
Hierzu ein Beispiel: