David Schirrmeister e7480b304f update
2024-05-13 11:28:56 +02:00

5.8 KiB

Scheduling

Prozess, wie das Betriebssystem die Ausführung von Aufgaben (Prozessen, Threads, ...) plant und verwaltet

  • Hauptziel: Effiziente Nutzung der Systems
    • Erfüllung der Anforderungen des Systems und des Benutzers
  • Kritisches Element im BS-Design
    • direkter Einfluss auf Leistung, Benutzererfahrung

Aufgaben eines Schedulers

  • Prozessorzuweisung
    • welcher Prozess als nächstes?
  • Prozessorwechsel
    • Wechsel von einem laufenden Prozess zu einem anderen
  • Prioritätszuweisung
    • Bestimmt Priorität von Prozessen → wichtige Aufgaben werden bevorzugt behandelt
  • Warteschlangenmanagement
    • Verwaltung der Warteschlangen mit Prozessen

Entscheidungsverfahren

  • CPU-Auslastung
    • Maximierung der CPU-Auslastung
  • Durchsatz
    • Anzahl abgeschlossene Aufgaben pro Zeit
  • Wartezeit
    • Minimierung der Wartezeit der Prozesse in der Warteschlange
  • Umlaufzeit
    • Gesamtzeit die ein Prozess benötigt um abgeschlossen zu werden
  • Antwortzeit
    • Zeit zwischen der Anforderung eines Benutzers und der ersten Reaktion des Systems

Nicht präemptives Scheduling

  • Art von Prozessorscheduling beo dem der laufende Prozess nicht unterbrochen werden kann
    • bis CPU-Zeitscheibe vollständig oder andere Blockierungsbedingung
  • Eingesetz in
    • einfache Systeme, Batch-Verarbeitung-Umgebungen
      • Vorhersagbarkeit, einfache Implementierung wichtiger als schnelle Reaktion auf Benutzerinteraktion

Präemptives Scheduling

  • Betriebssystemkern kann Kontrolle über CPU von einem laufenden Prozess übernehmen
    • kann anderem Prozess CPU-Zeit zuweisen, falls best. Bedingungen erfüllt

Prioritätengesteuertes Scheduling

  • Ausführungsreihenfolge der Prozesse hängt von deren Priorität ab
    • Jeder Prozess kriegt bestimmte Prio
    • Scheduler nimmt Prozess mit höchster Prio
      • es gibt präemptive und nicht präemptive Ansätze
  • Wird in Echtzeitsystemen und vielen anderen verwendet
    • wichtige oder zeitkritische Aufgaben werden bevorzugt behandelt

Zeitscheiben-Scheduling

  • spezielle Form des präemptiven Schedulings
    • Jeder Prozess wird für eine festgelegte Zeitscheibe auf dem Prozessor ausgeführt
      • sobald abgelaufen → nächster Prozess
      • wiederholt sich zyklisch
  • Wird verwendet in
    • Mehrbenutzersystemen

Weitere Scheduling-Strategien

  • First Come First Served
  • Shortest / Longest Process next
  • Shortest / Longest Remaining Time next
  • Highest Response Ratio next
  • Earliest Deadline next
  • Fair-Share-Scheduling
  • Multilevel-Scheduling
  • ...

Scheduling unter Linux

image_161.png

Youtube: Linux Completely Fair Scheduler

Completely Fair Scheduler (CFS)

  • faire Verteilung der CPU-Ressourcen zwischen verschiedenen Prozessen oder Threads
  • erstmals in Linux im Kernel 2.6.23
    • Bemühung bessere Leistung und Gerechtigkeit bei Verteilung von Ressourcen in Mehrbenutzersystemen
      • Implementierungen und genutzte Algorithmen können variieren

Grundprinzipien des CFS

  • Fairness
    • jeder ausführbare Prozess sollte proportional zur Anzahl der CPU-Ressourcen, die er benötigt, bedient werden
  • Keine festen Zeitscheiben
    • Ausführungszeit wird dynamisch an Prozesse angepasst
  • Gewichtungen
    • Prozesse mit höherem "Gewicht" erhalten größere Zeiteinteilung an CPU
  • Virtual Runtime
    • Gewicht und Ausführungszeit → vRuntime
      • Prozesse mit kürzerer vRuntime priorisiert
      • Entscheidungsstruktur: Rot-Schwarz-Baum
        • image_162.png

Beispiel Funktionsweise des CFS

image_163.png

  • Neue Prozesse können während Latenz des Schedulers eingefügt werden
    • vruntime wird initialisiert mit minimaler Laufzeit (min_vruntime)der bereits vorhanden Tasks
    • weil jetzt ein zusätzlicher Task da ist, wird allen vorhandenen Tasks automatisch anteilig weniger Laufzeit zugeteilt
    • image_164.png

Manchmal möchte man die Priorität eines Prozesses verändern. Sie kann mit nice gesetzt werden
und mit renice angepasst werden

Jeder Prozess kann einen nice-Wert von -20 bis 19(20) haben. Standard ist 0

Berechnung der Gewichtung (CFS)

  • 1024/1,25niceWert
  • Falls niceWert abnimmt, steigt Gewicht an
    • Zeitscheibe ist proportional zur Gewichtung dividiert durch Gesamtgewichtung aller Prozesse
      • image_165.png

Beispiel

  • 131 Tasks (nice = 0) => Gewicht w = 1024

  • 20 Tasks (nice = -20) => Gewicht w = 88817,84

  • Alle Tasks mit nice=0 belegen ca. 7% der CPU

    • 1311024 / (1311024 + 20*88817,84) => ca. 7%
    • tun i.d.R nichts → genug runtime
  • Alle Tasks mit nice=-20 belegen ca. 93% der CPU

niceWert

Befehle mit POSIX-API

  • setpriority - niceLevel eines Prozesses setzen
  • getpriority - niceLevel eines Prozesses lesen

Real-Time Scheduling

  • zielt darauf ab, dass Prozesse oder Aufgaben spezifische zeitliche Anforderungen erfüllen

  • Bsp.:

    • Dekodierung von Bildern eines Videostreams
      • 30 Bilder / Sekunde
        • Jedes Bild muss in 1/30s dekodiert und angezeigt werden
  • in harten Echtzeitsystemen müssen Aufgaben ihre zeitlichen Anforderungen strikt und zuverlässig erfüllen

    • bspw. Flugzeug, medizinische Geräte, ...
  • Scheduling-Algorithmen

    • Rate Monotonic Scheduling (RMS)
    • Earliest Deadline First (EDF)
  • in weichen Echtzeitsystemen sind zeitliche Anforderung auch wichtig, aber Versäumnis ist nicht katastrophal

    • bspw. Multimediale Anwendungen, Spiele
  • Scheduling-Algorithmen

    • Weighted Fair Queuing (WFQ)
    • Proportional Share Scheduling