Hochschule Muenchen Logo

Scheduling Simulator

Standardmodus: lernfokussiert Bereit
📊 Scheduler
🖥 Multi-Core
⚡ DVFS
🔒 Synchronisierung
📈 Statistiken
⚖ A/B Vergleich
📖 Handbuch
Prozess hinzufügen▼
Erweiterte Eigenschaften Mutex, Task-Typ, Threads, Affinität, Abhängigkeiten …
Nur für periodische Tasks. Bei sporadisch/aperiodisch ignoriert.
Algorithmus Round Robin▼
Round Robin
Preemptiv
FCFS
Non-preemptiv
SJF
Non-preemptiv
SRTF
Preemptiv
Priority
Preemptiv
Linux CFS
vruntime
Linux EEVDF
eligible VD
SCHED_FIFO
Linux RT
SCHED_RR
Linux RT
SCHED_DEADLINE
Linux RT
MLQ
Multilevel
MLFQ
Feedback
EDF
Echtzeit
Rate Mono.
Echtzeit
LLF
Least Laxity
Systemparameter Cores, Dauer, Mutex-Protokoll, Overhead
Presets:
Gantt-Overlay▼
Prozesse 0▼
Sync-Ressourcen ▼
Keine Sync-Ressourcen
ℹ Algorithmus-Info ▼
Speed:
Zeit: 0 | Schritt: 0/0
100%
Multi-Core Konfiguration
Cores: 2
Global SMP
Globale Queue
Partitioned
Core-Affinität
Work Stealing
Idle→Steal
Gang Sched.
Parallel
G-EDF
Global EDF
P-EDF
Partitioned EDF
Mit fixem Seed sind tie-breaks und Zufallsanteile reproduzierbar.
Load Balancing
Migrationen: 0
Ø Core-Auslastung: —
Algorithmus-Info
Wähle eine Strategie für Details.
Zeit: 0 | Schritt: 0/0
Entscheidung: —
Skalierungs- und Strategieanalyse
Skalierungsstudie noch nicht ausgeführt.
Strategievergleich noch nicht ausgeführt.
Core Status
Per-Core Ready Queues
NUMA Topologie
Scheduling-Overhead
Migration Events
Migration Timeline
Warnungen & Antipatterns
Noch keine Analyse.
DVFS Algorithmus
Performance
f=max immer
Powersave
f=min immer
Ondemand
Reaktiv
Conservative
Graduell
Schedutil
Util-basiert
Interactive
Latenz-opt.
25%
100%
70%
Energie-Statistik
—
Energie (J)
—
Einsparung
—
Ø Frequenz
—
Perf.-Verlust
Algorithmus-Beschreibung
Performance
Läuft immer bei maximaler Frequenz. Beste Performance, höchster Energieverbrauch.
Geeignet für Latenz-kritische Systeme.
Frequenz-Verlauf & CPU-Last über Zeit
Frequenz-Tabelle
ZeitAuslastungFrequenzLeistung
Sync-Konfiguration
Sync-Metriken
Klicke "Sync aufbauen".
Deadlock-Erkennung

⚠ Deadlock erkannt!

✓ Kein Deadlock erkannt
Mutex
Semaphore
Condition Variables
RW-Lock
Producer-Consumer
Sync-Legende
Causal Timeline (State + Cause + Effect)
Thread-State-Ribbon
Resource Inspector
Klicke "Sync aufbauen".
Sync Event Log
—
Ø Wartezeit
—
Ø Turnaround
—
Ø Antwortzeit
—
CPU-Auslastung
—
Durchsatz
—
Ctx Switches
👩‍🏫 Lehrenden-Analytics
Noch keine Daten erfasst.
Prozess-Details
ProzessAnkunftExec. TimeStartFertigWartenTurnaroundAntwort
Algorithmus-Vergleich (Ø Wartezeit)
🎲 Stochastische Workloads (Monte Carlo)
Monte-Carlo zeigt Verteilungen statt Einzelwerten: starte die Analyse mit dem aktuellen Setup.
🎯 Multi-Objective Optimization (Pareto)
Pareto-Front zeigt nicht-dominierte Trade-offs zwischen Latenz, Durchsatz, Energie und Deadline-Misses.
🧭 Real OS Mapping
Wird nach der nächsten Simulation mit einem praxisnahen OS-Mapping befüllt.
📐 Schedulierbarkeits-Rechner
🧮 WCRT-Analyse (Response Time Analysis)
Simulation ausführen, dann WCRT berechnen.
🧪 Modular Regression & Parity
Noch nicht ausgeführt.
Algorithmus A RR
Algorithmus B EDF
Verwendet die Prozesse aus dem Scheduler-Tab. Prozesse zuerst dort laden/erstellen.
⚖
Wähle zwei Algorithmen und klicke "Vergleichen"

📖 Scheduling Simulator — Handbuch

Browserbasiertes Lehr- und Analysewerkzeug für Betriebssystem-Vorlesungen. Läuft komplett im Browser, es werden keine Daten an einen Server gesendet.

Kernfunktionen

⚙ Scheduling-Algorithmen
Lernmodus: FCFS, SJF, SRTF, RR, Priority, EDF, RM · Experte zusätzlich: Linux CFS/EEVDF, SCHED_FIFO/RR/DEADLINE, MLQ, MLFQ, LLF
🖥 Multi-Core (bis 8 Kerne)
6 Strategien: Global SMP, Partitioned, Work Stealing, Gang, G-EDF, P-EDF
📊 Analyse-Suite
Schedulierbarkeitstests, WCRT, Laxity-Heatmap, Histogramm, Jitter, Fairness-Index, Messreihe
🎲 Taskset-Generator
UUniFast mit Profilen und Seed, Schedulierbarkeits-Rechner
⚡ DVFS-Energiesimulation
6 Governor-Strategien, P-States, P∝f³-Modell
📂 Lehr-Beispiele & Traces
22 Szenarien mit Leitfaden; Import echter Linux-/LTTng-Traces

Begriffe & Definitionen

Scheduling-Literatur verwendet teils unterschiedliche Begriffe für ähnliche Konzepte. Diese Tabelle klärt die wichtigsten Terme. Besonders wichtig: „Response Time“ bedeutet in OS-Lehrbüchern etwas anderes als in der Echtzeit-Literatur.

Zeitgrößen eines Tasks

bereitbereitläuft (C₁=2)läuft (C₂=2)Ankunft a=1Deadline d=11fertig f=9R = 2Reaktionszeit (OS-Sicht): erster CPU-Zugriff − Ankunft0123456789101112W₁=2W₂=2W = W₁ + W₂ = 4 (= TAT − C)TAT = f − a = 8 = W + Cbei t=5:rem_C=2L(5) = d − t − rem_C = 4
Abb. 1 – Zeitgrößen eines Jobs (C = 4, wird bei t=5 verdrängt). Die Reaktionszeit im OS-Sinn endet beim ersten CPU-Zugriff, die Wartezeit summiert alle Bereit-Phasen, die Turnaround-Zeit reicht bis zur Fertigstellung. In der Echtzeit-Literatur heißt genau diese Spanne response time Rᵢ (hier 8); die WCRT ist ihr Worst Case.
BegriffSymbolDefinitionIm Simulator
Execution Time
auch: CPU-Burst, Compute Time
C / Cᵢ Die reine CPU-Rechenzeit, die ein Task benötigt. Enthält keine Warte-, Blockier- oder I/O-Zeiten. Feld „Execution Time (C)“ beim Anlegen eines Prozesses (ganzzahlig, ≥ 1).
WCET
Worst-Case Execution Time
C Die maximale Execution Time über alle möglichen Eingaben und Codepfade. Schedulierbarkeitsanalysen rechnen mit Cᵢ = WCET. Modell „WCET (determin.)“: jeder Job rechnet genau C.
ACET
Average-Case Execution Time
C̄ Durchschnittliche Execution Time unter realistischer Last. Für Garantien ungeeignet, für Leistungsmessungen sinnvoll. Modell „ACET (Ø-Zeit)“: vereinfachend 0,7 · C. Modell „Zufällig“: C ± 20 %.
Reaktionszeit
OS-Lehrbücher: response time
R Zeit von der Ankunft bis zum ersten CPU-Zugriff. Maß für Interaktivität.
R = firstCPU − arrival
Spalten Min/Ø/Max Resp. im Metriken-Panel, Overlay „Reaktionszeit“ im Gantt.
WCRT
Worst-Case Response Time
R* Begriff der Echtzeit-Literatur: dort ist die Response Time eines Jobs die Zeit von der Freigabe bis zur Fertigstellung (also die Turnaround-Zeit des Jobs), nicht bis zum ersten CPU-Zugriff. Die WCRT ist ihr garantierter Worst Case; schedulierbar, wenn R* ≤ D.
Rᵢ = Cᵢ + Σⱼ∈hp(i) ⌈Rᵢ/Tⱼ⌉·Cⱼ
Statistik-Tab, Karte 🧮 WCRT-Analyse, und automatische Analyse im Scheduler-Tab.
Turnaround Time
auch: Durchlaufzeit
TAT Zeit von der Ankunft bis zur vollständigen Fertigstellung.
TAT = finish − arrival = W + C
Spalte Turnar. im Metriken-Panel.
Waiting Time
auch: Wartezeit
W Gesamte Zeit zwischen Ankunft und Fertigstellung, in der der Task nicht rechnet – alle Bereit-Phasen zusammen, bei Mutex-Konflikten inklusive Blockierzeit.
W = TAT − C
Spalte Wait im Metriken-Panel; gelb mit „!“, wenn mehr als das 1,5-Fache des Durchschnitts.
Laxity / Slack
auch: Spielraum
L(t) Zeitpuffer bis zur Deadline unter Berücksichtigung der noch nötigen Rechenzeit, mit der absoluten Deadline dᵢ = Ankunft + Dᵢ.
L(τᵢ, t) = dᵢ − t − rem_Cᵢ
L = 0: Task muss sofort laufen, L < 0: Miss unvermeidlich.
Gantt-Overlay ⚡ Kritischer Pfad; Grundlage von LLF.
Tardiness
auch: Verspätung
Überschreitung der absoluten Deadline.
tardiness = max(0, finish − d)
Spalte Tardin. im Metriken-Panel, rot markiert wenn > 0.

Abgrenzung: drei Fragen, drei Größen

Merkhilfe: „Wie lange rechnet der Task?“ → Execution Time C. „Wann kommt er zum ersten Mal dran?“ → Reaktionszeit R. „Wann ist er fertig?“ → Turnaround-Zeit (in der Echtzeit-Literatur: response time). Die Wartezeit ist die Differenz TAT − C.

Termini in verschiedenen Quellen

Dieser SimulatorTanenbaum / SilberschatzLiu & Layland / Buttazzo
Execution Time (C)CPU burst (time)computation time Cᵢ
Reaktionszeit (Resp.)response time— (eigener Begriff fehlt)
Turnaround Timeturnaround timeresponse time Rᵢ (je Job)
WCRT—worst-case response time Rᵢ*
Laxity—laxity / slack

Tabs & Navigation

TabInhalt
📊 SchedulerHauptansicht: Prozesse anlegen, Algorithmus wählen, Gantt animieren, Metriken und automatische Schedulierbarkeitsanalyse
🖥 Multi-Core (Experte)Parallele Ausführung auf 1–8 Kernen mit sechs Verteilungsstrategien
⚡ DVFS (Experte)Energiesimulation mit Frequenz-Governor und P-State-Konfiguration
🔒 SynchronisierungMutex, Semaphore, Condition Variables, RW-Lock, Producer-Consumer, Deadlock-Demo
📈 StatistikenKennzahlen, Prozess-Details, Algorithmus-Vergleich, Monte Carlo, Pareto, OS-Mapping, Schedulierbarkeits-Rechner, WCRT-Analyse
⚖ A/B VergleichZwei Algorithmen direkt gegenüberstellen: Gantt und Metriken
📖 HandbuchDiese Seite
Tipp: Im Header befinden sich: 🌙/☀ (hell/dunkel), 💾 Presets (Szenarien speichern/laden/teilen), 🎲 Taskset-Gen, 📂 Beispiele, Export/Import und Reset. Im Expertenmodus zusätzlich 🐧 Trace ▾ für Kernel-Trace-Import.

Lernmodus und Expertenmodus

Umschalten oben links über Lernen | Experte. Das Szenario bleibt beim Wechsel erhalten.

ModusUmfang
LernenFCFS, SJF, SRTF, RR, Priority, EDF, RM. Fünf Kernmetriken (weitere über „+N weitere“); erweiterte Prozess-Eigenschaften, Systemparameter und die Pro-Prozess-Analyse sind zugeklappt (▸ öffnet sie).
ExperteZusätzlich Linux CFS/EEVDF, SCHED_FIFO/RR/DEADLINE, MLQ, MLFQ, LLF, die Tabs Multi-Core und DVFS, Trace-Import, Deadline-Debugger und Lehrenden-Analytics. Alle Details sind standardmäßig aufgeklappt.
Lädt ein Beispiel oder Import eine Expertenfunktion, wechselt der Simulator automatisch in den Expertenmodus und zeigt einen Hinweis.

Darstellung

Standard ist der Skin „Modern“ im Stil der Folien zu Betriebssysteme 1 (hell oder dunkel). Mit ?cd=hm in der Adresse schaltet der Simulator auf das HM-Corporate-Design, mit ?cd=bs1 zurück; die Wahl wird gemerkt. An Szenarien und Exporten ändert der Skin nichts.

Prozesse anlegen

Alle Felder im linken Panel des Scheduler-Tabs. Pflichtfelder: Name und Execution Time. Die Felder ab „Queue-Level“ liegen unter ▸ Erweiterte Eigenschaften.

FeldBedeutungHinweis
NameProzessbezeichnungz. B. P1, τ1
AnkunftAnkunfts- bzw. erste Freigabezeit0 = sofort verfügbar
Execution Time (C)Reine CPU-Rechenzeit des Tasks (= Cᵢ)ganzzahlig, ≥ 1
Priorität1 = höchste PrioritätFür Priority, SCHED_FIFO und SCHED_RR (bei diesen auch Reihenfolge der WCRT-Karte)
PeriodeWiederholungsintervall TFür EDF/RM/LLF und die Job-Erzeugung periodischer Tasks
DeadlineRelative Deadline D ab jeder FreigabeIm Formular mit 10 vorbelegt, unabhängig von der Periode; für implizite Deadlines D = T eintragen. Beim Import ohne Angabe: die Periode, ohne Periode keine Deadline.
Queue-LevelMLQ-Ebene (0 = Highest, 1 = Interactive, 2 = Batch)Nur für MLQ
MutexBenötigtes Mutex-Objekt (mutex_0 … mutex_2)Der ganze Job läuft dann als kritischer Abschnitt
Task-TypPeriodisch / Sporadisch (MIT) / AperiodischPeriodisch: Freigabe alle T ab der Ankunft. Sporadisch: Abstand mindestens MIT, schwankt um bis zu 50 % (für dasselbe Szenario immer gleich). Aperiodisch: genau ein Job zur Ankunftszeit.
MITMinimum Inter-arrival TimeNur für sporadische Tasks
AktivierungenAnzahl Freigaben eines periodischen Tasks0 = automatisch über das Simulationsfenster (siehe FAQ)
ThreadsAnzahl paralleler Threads1–8; im Gantt als Unterzeilen, für Gang-Scheduling
WCET-ModellWCET (determin.) / ACET (Ø-Zeit) / Zufällig [C ± 20 %]ACET rechnet vereinfachend mit 0,7 · C
Core-AffinitätBevorzugter Kern bei Multi-CoreAuto oder Core 0–3
FarbeFarbe in Gantt und LegendeJe nach Skin etwas gedämpft dargestellt; gespeichert wird der gewählte Wert
Abhängigkeiten„wartet auf“: Prozess startet erst, wenn die gewählten fertig sindIm Gantt als Pfeile; für Pipelines und Fork-Join. Werden mit Export, Import und Share-Link gespeichert. Der Multi-Core-Tab beachtet sie nicht

Schnelles Setup

  1. Name und Execution Time eingeben → + Prozess hinzufügen
  2. Für Echtzeit: Periode und Deadline setzen, Task-Typ auf „Periodisch“
  3. ✏ zum Bearbeiten, × zum Löschen

Scheduling-Algorithmen

AlgorithmusTypQuantumEigenschaft / geeignet für
FCFSNon-preemptiv—Einfache Stapelverarbeitung; zeigt den Konvoi-Effekt
SJFNon-preemptiv—Minimale Ø Wartezeit unter den non-preemptiven Verfahren (bei gleichzeitiger Ankunft optimal); braucht Kenntnis von C
SRTFPreemptiv—Minimiert die Ø Wartezeit (beweisbar optimal); lange Jobs können verhungern
Round Robin (RR)Preemptiv✓Interaktive Systeme, gleichmäßige CPU-Verteilung. FIFO-Ready-Queue: Prozesse, die während einer Zeitscheibe ankommen, reihen sich vor dem verdrängten ein
PriorityPreemptiv (Standard) oder non-preemptiv—Prioritätsbasierte Systeme; zeigt Starvation. Die Checkbox Preemptiv neben dem Quantum legt fest, ob eine höher priorisierte Ankunft den laufenden Prozess verdrängt; die Kachel zeigt den Modus.
EDFPreemptiv, dynamisch—Optimal auf einem Prozessor: bei D = T schedulierbar genau dann, wenn ΣU ≤ 100 %. Gleiche Deadline: Reihenfolge in der Prozessliste
Rate MonotonicPreemptiv, statisch—Kürzere Periode = höhere Priorität; optimal unter den statischen Verfahren (D = T)
LLF (Experte)Preemptiv, dynamisch—Kleinste Laxity zuerst; wechselt bei gleicher Laxity häufig
MLQ (Experte)Mehrere QueuesfestStrikte Priorität zwischen den Ebenen; innerhalb der Ebenen Round Robin mit Q = 2 (Highest) bzw. Q = 4 (Interactive), Batch FCFS
MLFQ (Experte)Feedback2 / 4 / 8Neue Prozesse oben, Round Robin je Ebene; wer seine Zeitscheibe ganz verbraucht, sinkt eine Ebene; eine höhere Ebene verdrängt (der Verdrängte behält seinen Rest); Priority Boost alle S Zeiteinheiten. Quanten und S sind einstellbar, die Ebene steht als Q0/Q1/Q2 im Gantt
Linux CFS / EEVDF (Experte)Fair (SCHED_OTHER)—CFS: kleinste vruntime zuerst. EEVDF (ab Linux 6.6): früheste virtuelle Deadline unter den „eligible“ Tasks
SCHED_FIFO / SCHED_RR (Experte)Linux EchtzeitRR: ✓Statische RT-Prioritäten; FIFO ohne, RR mit Zeitscheibe innerhalb einer Prioritätsstufe
SCHED_DEADLINE (Experte)Linux Echtzeit—EDF mit Budget-Überwachung (Constant Bandwidth Server)
P1P2P3P4Ø WØ RØ TATFCFSP1P2P3P44,754,758,75SJFP1P3P2P44,004,008,00SRTFP1P2P3P2P4P13,000,507,000246810121416
Abb. 2 – Dieselbe Last, drei Verfahren (P1: a=0, C=7 · P2: a=2, C=4 · P3: a=4, C=1 · P4: a=5, C=4; Lehrbuchbeispiel nach Silberschatz). Werte aus der Simulator-Engine. SJF senkt die mittlere Wartezeit gegenüber FCFS, SRTF (preemptiv) senkt sie weiter und verbessert vor allem die Reaktionszeit – um den Preis von mehr Kontextwechseln (5 statt 3).

Algorithmen im Quellcode

Jeder Ein-Kern-Algorithmus steht in einer eigenen, kommentierten Datei sim_modules/algorithms/<id>.js (z. B. rr.js, edf.js). Genau dieser Code berechnet den Ablauf im Simulator: Wer eine Datei ändert und die Seite neu lädt, sieht das Ergebnis sofort im Gantt. Eigene Algorithmen lassen sich als weitere Datei ergänzen und erscheinen im Expertenmodus automatisch als Button. Schnittstelle und ein vollständiges Beispiel (HRRN) stehen in sim_modules/README.md.

Systemparameter

  • Quantum: Zeitscheibe für RR (Standard: 2). Größeres Q → weniger Kontextwechsel, schlechtere Reaktionszeit
  • Preemptiv: nur für Priority (Standard an); an = höher priorisierte Ankünfte verdrängen den laufenden Prozess
  • Deadline-Miss: bei EDF, RM und LLF „Job rechnet weiter“ (Standard) oder „Job wird abgebrochen“: Ein Job, der seine Frist erreicht, ohne fertig zu sein, wird verworfen und zählt als Miss (Konvention der BS1-Folien)
  • Cores: Anzahl simulierter CPU-Kerne (1–8). Bei mehr als einem Kern simuliert der Scheduler-Tab automatisch mit Global SMP.
  • Dauer: Auto (bis alle Jobs fertig) oder Manuell mit t_max (begrenzt auch die Job-Erzeugung periodischer Tasks)
  • Mutex-Protokoll: Legacy, Inversion (ohne Schutz) oder Priority Inheritance (PIP), wirkt im Priority-Scheduler
  • δ_cs: Kontextwechsel-Overhead pro Wechsel (0–5 in 0,5-Schritten), im Gantt als graues Band „C“. Fließt in Wartezeit, Turnaround, Reaktionszeit und CPU-Auslastung ein
  • δ_sched: Scheduler-Overhead pro Dispatch-Entscheidung, im Gantt als violettes Band „S“
U = CPU_busy_time / (totalTime × numCores)

Gantt-Diagramm & Overlays

Steuerleiste

  • ⏮ ▶ ⏭ — Schritt zurück / Play-Pause / Schritt vor
  • Speed-Slider — Animationsgeschwindigkeit
  • − / + / 1:1 — Gantt-Zoom (auch per Mausrad über dem Diagramm)
  • 👁 Ansichten ▾ — Zusatzansichten ein-/ausblenden: Erklärmodus, Ready-Queue, Explain-Timeline, Zustandsdiagramm, Core-Ansicht (ab 2 Cores) und im Expertenmodus der Deadline-Debugger. Die Zahl in Klammern zeigt, wie viele aktiv sind.
  • 🎯 Predict — eigenen Gantt vorhersagen und mit dem Ergebnis vergleichen; ⬇ PNG exportiert das Diagramm als Bild

Links neben jeder Zeile stehen Prozessname, ein kleiner Auslastungsbalken mit Prozentwert und bei Deadline-Verletzung „⚠ miss“. Ein Klick auf einen Block oder ein Symbol öffnet den Tooltip mit Details.

Prozess läuftFarbe = ProzessKritischer Abschnittschraffiert (HM-Skin: gelb)Blockiert (Mutex)rot schraffiertWartet (bereit)feine SchraffurCOverheadBand „C“ bzw. „S“Ankunft▼ je Job (blasser: Folgejobs)DDeadlineProzessfarbe, rot bei Miss✕Deadline-MissSpanne d → f, ✕ bei EndeTPeriodengrenzegestrichelt, „T“R=3Reaktionszeitbis zum 1. CPU-Zugriff
Abb. 3 – Symbole im Gantt. Alle Overlays lassen sich in der Karte Gantt-Overlay einzeln schalten. Ein Klick auf einen Block oder ein Symbol zeigt Details im Tooltip.

Ein-/Ausblendbare Overlays

Die Overlays werden in der linken Karte Gantt-Overlay geschaltet (standardmäßig zugeklappt).

OverlayDarstellung
Sync-EreignisseKritischer Abschnitt (Mutex gehalten) und Blockierung. Kritischer Abschnitt im Modern-Skin: Prozessfarbe, schraffiert, Amber-Rahmen, 🔒; im HM-Skin gelb-orange. Blockiert: rot schraffiert mit „BLOCK“.
Ressourcen-ZeileEigene Spur pro Mutex unter den Prozessen: wer hält den Lock wann, wer wartet
DVFS-FrequenzFrequenzverlauf als Linie unterhalb der Zeitachse
Core-MigrationenPfeile zwischen Kernen (Multi-Core-Gantt)
DeadlinesRaute mit „D“ und gestrichelter Linie bei jeder absoluten Deadline, in Prozessfarbe, rot bei Miss
AnkunftszeitenGrünes Dreieck bei jeder Job-Ankunft (Folgejobs blasser)
Deadline-MissesRote Spanne von der Deadline bis zur Fertigstellung, ✕ am Ende
Perioden-GrenzenGestrichelte Linien in Prozessfarbe mit „T“ an jedem Periodenende
ReaktionszeitGestrichelter Pfeil von der Ankunft bis zum ersten CPU-Zugriff mit „R=…“
Ctx-Switch-OverheadBand über alle Zeilen: grau „C“ = Kontextwechsel, violett „S“ = Scheduler
Kritischer PfadLaxity-Farbstreifen am linken Rand jedes Blocks, siehe Kritischer Pfad

Metriken-Panel

Erscheint nach jeder Simulation unterhalb des Gantts, einklappbar über den Titel-Balken. Ein Klick auf eine Kennzahl erklärt sie.

Zusammenfassungs-Chips

Im Lernmodus sind fünf Kernmetriken sichtbar (Ø Wartezeit, Ø Response, Ø Turnaround, CPU-Util., Deadline-Misses); „+N weitere“ zeigt den Rest.

MetrikFormel
CPU-Util.Σ(CPU-Blöcke) / (totalTime × Cores)
Durchsatzfertige Prozesse / totalTime (P/t)
Ø WartezeitΣ(TAT_i − C_i) / n
Ø ResponseΣ(firstCPU_i − arrival_i) / n (Reaktionszeit)
Ø TurnaroundΣ(finish_i − arrival_i) / n
Ø NTTTAT_i / C_i gemittelt (normierte Turnaround-Zeit, 1,0 = nie gewartet)
Ø Netto- / Brutto-ExecTNetto = C; Brutto = finish − erster Start (inklusive Unterbrechungen)
Tardiness ΣΣ max(0, finish_i − d_i)
Jain Fairness(Σx_i)² / (n · Σx_i²) mit x_i = CPU-Anteil von Prozess i; 1,0 = alle gleich, 1/n = einer bekommt alles
OH-AnteilOverhead-Zeit / Gesamtzeit (Summe der C- und S-Bänder)

Grafiken im Panel

  • Verteilungs-Histogramm — Response-, Warte- oder Turnaround-Zeiten (umschaltbar), wahlweise als Häufigkeit oder CDF, mit Median, Mittelwert, Streuung und p95. Erscheint ab zwei Datenpunkten, bei mindestens drei Jobs je Job.
  • Jitter-Verlaufskurve — Response-Zeit je Job-Instanz über die Zeit für periodische Tasks (ab 2 Instanzen).
Messreihe: + Lauf festhalten übernimmt die aktuelle Simulation als Tabellenzeile (Algorithmus, Parameter, Kernmetriken, Makespan); der beste Wert je Spalte ist hervorgehoben. ▶ Sweep simuliert das Szenario für einen Parameterbereich (Quantum, δ_cs oder Cores) und zeigt den Verlauf als Diagramm. ⬇ CSV exportiert die Tabelle für Excel/LibreOffice, z. B. für Praktikumsabgaben.

Automatische Schedulierbarkeitsanalyse

Bei EDF, RM oder LLF und immer, wenn alle Tasks eine Periode haben, prüft der Scheduler-Tab das Taskset analytisch und vergleicht mit der Simulation:

TestBedingungAussagekraft
Liu & LaylandΣ C_i/T_i ≤ n(2^(1/n) − 1)hinreichend für RM
Hyperbolic BoundΠ (C_i/T_i + 1) ≤ 2hinreichend für RM, schärfer als Liu & Layland
EDFΣ C_i/D_i ≤ 1exakt bei D = T, sonst hinreichend
RTAWCRT je Task in RM-Reihenfolge (kürzeste Periode zuerst)exakt für RM bei D ≤ T

🎲 Taskset-Generator (UUniFast)

Header-Button 🎲 Taskset-Gen. Generiert zufällige periodische Tasksets mit vorgegebener Gesamtauslastung.

Parameter

ParameterBeschreibung
nAnzahl Tasks (2–12)
U (%)Ziel-Gesamtauslastung 10–99 %
T_min / T_maxPeriodenbereich
Generator-ProfilBalanced (Perioden gleichverteilt), Bursty (mehr kurze Perioden, einige Tasks mit hoher Last), Harmonic (Perioden als Vielfache einer Basis)
Task-MixNur periodisch, Gemischt oder Sporadic-heavy
SeedMit „Seed fixieren“ ist das Taskset reproduzierbar, z. B. für Übungsblätter
Deadline-TypImplizit (D = T) / Constrained (C ≤ D ≤ T) / Arbiträr (D kann größer als T sein)
AlgorithmusEDF, Rate Monotonic, Round Robin oder FCFS; wird für die Simulation übernommen

UUniFast-Algorithmus

Erzeugt gleichverteilte Auslastungsvektoren mit Σ U_i = U (Bini & Buttazzo, 2005):

sumU = U_total for i = 1 to n-1: nextSumU = sumU × rand(0,1)^(1/(n-i)) U_i = sumU - nextSumU sumU = nextSumU U_n = sumU

Daraus folgt C_i = round(U_i · T_i), mindestens 1. Die Vorschau zeigt Σ U, die Liu-&-Layland-Schranke und die EDF-Schedulierbarkeit. 🎲 Generieren erzeugt einen neuen Satz, ✓ Übernehmen & Simulieren lädt ihn.

Prioritäten und Auslastung: Die Prioritäten werden nach Rate Monotonic vergeben (kürzeste Periode = 1). Die Vorschau zeigt die tatsächliche Auslastung nach dem Runden von C und daneben die Ziel-Auslastung; bei Deadline-Typ Constrained/Arbiträr prüft sie EDF mit dem (nur hinreichenden) Dichte-Test Σ C/min(D,T) ≤ 1.

⚖ A/B Vergleichsmodus

Tab ⚖ A/B Vergleich. Führt dasselbe Prozess-Set mit zwei Algorithmen aus und stellt die Ergebnisse direkt gegenüber.

Workflow

  1. Prozesse im Scheduler-Tab anlegen (oder Beispiel laden)
  2. A/B-Tab öffnen → Algorithmus A und B wählen
  3. Quantum für beide einstellen
  4. ⚖ Vergleichen klicken; mit Live-Vergleichsmodus laufen beide Gantts schrittweise synchron

Ausgabe

  • Gantt-Vergleich: beide Timelines übereinander auf derselben Zeitachse
  • Metriken-Tabelle: Ø Wartezeit, Ø Response, Ø Turnaround, CPU-Auslastung, Ctx-Switches; der bessere Wert ist hervorgehoben
Tipp: Lade das Lehr-Beispiel „Konvoi-Effekt“ und vergleiche FCFS mit SJF: Der Effekt ist sofort sichtbar.

🧮 WCRT-Analyse (Response Time Analysis)

Im Tab 📈 Statistiken, Karte 🧮 WCRT-Analyse → ▶ Berechnen. Berechnet die Worst-Case Response Time (Freigabe bis Fertigstellung) aller Tasks.

Algorithmus (Joseph & Pandya / Audsley et al.)

R_i^(0) = C_i R_i^(k+1) = C_i + Σ_{j ∈ hp(i)} ⌈ R_i^(k) / T_j ⌉ × C_j Konvergiert → R* wenn R^(k+1) = R^(k) Schedulable ↔ R* ≤ D_i

hp(i) = alle Tasks mit höherer Priorität als τ_i. Die Reihenfolge richtet sich nach dem gewählten Algorithmus: bei Priority, SCHED_FIFO und SCHED_RR nach dem Feld Priorität (1 = höchste), sonst nach Rate Monotonic (kürzeste Periode zuerst). Die verwendete Reihenfolge steht über der Tabelle. Die automatische Analyse im Scheduler-Tab rechnet immer mit RM-Reihenfolge und liefert dann dieselben Werte.

Ausgabe-Spalten

SpalteBedeutung
CExecution Time
TPeriode (ohne Periode wird mit T = 100 gerechnet)
DRelative Deadline
UAuslastung C/T
WCRT R*Berechnete Worst-Case Response Time (∞ = Iteration divergiert)
SlackD − R* (positiv = Puffer vorhanden)
Gültigkeit: Die RTA ist exakt für preemptive feste Prioritäten (RM, DM) mit D ≤ T, unabhängigen Tasks und gleichzeitiger erster Freigabe. Blockierung durch Mutexe ist nicht eingerechnet. Für EDF mit D = T gilt stattdessen: schedulierbar genau dann, wenn Σ U_i ≤ 1.

⚡ Kritischer Pfad / Laxity-Heatmap

Overlay-Checkbox in der Karte Gantt-Overlay. Zeigt die Laxity jedes Blocks zu seinem Startzeitpunkt als Farbstreifen am linken Blockrand.

Laxity(τ_i, t) = d_i − t − rem_C(τ_i) d_i = absolute Deadline des Jobs
FarbeBedeutung
GrünHohe Laxity (mehr als ⅔ des Spielraums übrig) — Task liegt gut im Zeitplan
GelbMittlere Laxity — Aufmerksamkeit empfohlen
RotGeringe Laxity; bei L ≤ 0 zusätzlich roter gestrichelter Rahmen: Deadline-Miss unvermeidlich

Blöcke mit L ≤ 2 tragen die Beschriftung „L=…“. Der Block mit der global niedrigsten Laxity wird mit ⚡ L=X.X annotiert.

Anwendung: Bei EDF, RM oder LLF aktivieren. Laxity = 0 bedeutet: Dieser Task muss sofort laufen. Vergleiche die Verfahren: Welches hält die Laxity stabiler?

📐 Schedulierbarkeits-Rechner

Im Tab 📈 Statistiken. Interaktiver Chart der Auslastungsschranken; über Algo lassen sich RM, EDF oder beide anzeigen.

0 %20 %40 %60 %80 %100 %120 %12345678910Anzahl Tasks nEDF: U ≤ 100 % (exakt, D = T)ln 2 ≈ 69,3 % (n → ∞)Kurve: RM-Schranke n(2^(1/n) − 1)RM und EDF garantiertEDF garantiert · RM: mit RTA prüfenÜberlast: kein Verfahren schafft esharmonisch (T = 2, 4), U = 100 %: RM schafft es
Abb. 4 – Auslastungsschranken. Unterhalb der Liu-&-Layland-Kurve ist RM garantiert schedulierbar. Die Schranke ist nur hinreichend: Darüber (gelbe Zone) kann RM trotzdem funktionieren, z. B. bei harmonischen Perioden bis 100 %. Dort entscheidet die exakte Response-Time-Analyse.

Anzeige

  • Kurve — Liu & Layland RM-Schranke n(2^(1/n) − 1), gegen ln 2 ≈ 69,3 % für n → ∞
  • Waagrechte Linie — EDF-Grenze U = 100 %
  • Punkt — aktuelles Taskset: grün = unter der RM-Schranke, gelb = nur EDF garantiert, rot = Überlast

Interaktive Slider

Unter dem Chart lässt sich U_i der ersten acht Tasks per Slider ändern; der Punkt wandert mit. Die Slider arbeiten auf einer Kopie, das Szenario bleibt unverändert.

RM: Σ U_i ≤ n(2^(1/n) − 1) ⇒ schedulierbar (nur hinreichend) EDF: Σ U_i ≤ 1 ⇔ schedulierbar (D = T, ein Prozessor)

💬 Schritt-Erklärung

Im Menü 👁 Ansichten ▾ → 📖 Erklärmodus über dem Gantt. Zeigt für jeden Simulationsschritt, warum der aktuelle Task gewählt wurde.

Beispiele nach Algorithmus

AlgorithmusBeispiel-Erklärung
FCFSP1 ist an erster Stelle der Warteschlange (Ankunft t=0). Läuft bis Fertig.
EDFP3 hat die früheste Deadline (D=8). Ready-Queue: [P1(D=12), P3(D=8)].
RRP2 ist an der Reihe. Zeitscheibe Q=2. Ready: [P1, P2, P3].
RMP2 hat kürzeste Periode (T=5) = höchste Priorität. Ready: [P1(T=10), P2(T=5)].
PriorityP1 hat höchste Priorität (Prio=1). Ready: [P1(P=1), P3(P=3)].

Bei Overhead-Blöcken wird Typ und Dauer angezeigt (δ_cs oder δ_sched).

💾 Preset-Bibliothek

Header-Button 💾 Presets. Szenarien lokal speichern, verwalten und teilen.

Features

  • Speichern: Aktuelles Szenario mit Namen versehen → sofort in der Liste
  • Laden/Löschen: Per Knopfdruck in der Liste
  • Export: Alle Presets als JSON-Datei herunterladen
  • Import: JSON-Datei einlesen und mit bestehenden zusammenführen
  • 🔗 Share-URL: Generiert eine URL mit dem aktuellen Szenario als Base64-Hash. Beim Öffnen des Links wird es automatisch geladen.
Tipp: Presets werden im localStorage des Browsers gespeichert — beim Löschen des Browser-Caches gehen sie verloren. Für dauerhafte Archivierung regelmäßig exportieren.

🖥 Multi-Core Simulation

Tab 🖥 Multi-Core (Expertenmodus): Kernanzahl, Basis-Algorithmus (RR, FCFS, SJF, Priority, EDF), Quantum und Seed wählen, dann eine Strategie. Zwei Strategien lassen sich direkt vergleichen.

Global SMP / G-EDFCPU 0CPU 1eine Queue, jede CPU nimmt den nächstenPartitioned / P-EDFCPU 0CPU 1feste Zuordnung, keine MigrationWork StealingstiehltCPU 0CPU 1leere Queue holt Arbeit von anderen
Abb. 5 – Queue-Topologien. Global verteilt Last am besten, kostet aber Migrationen; partitioniert vermeidet Migrationen, kann aber Kerne leer laufen lassen; Work Stealing liegt dazwischen. Gang Scheduling startet alle Threads eines Prozesses gleichzeitig auf mehreren Kernen.
StrategieBeschreibung
Global SMPEine globale Ready-Queue, alle Kerne teilen sich die Tasks
PartitionedFeste Kernzuordnung per Affinität, keine Migration
Work StealingLeer laufende Kerne holen Tasks aus den Queues anderer Kerne
Gang SchedulingThreads eines Prozesses laufen gleichzeitig auf mehreren Kernen
G-EDFGlobales EDF: die m frühesten Deadlines laufen auf den m Kernen
P-EDFPartitioniertes EDF mit Bin-Packing-Zuweisung
Schnell-Setup: Im Scheduler-Tab unter Systemparameter Cores > 1 setzen → ▶ Simulieren: Das Szenario läuft dann automatisch mit Global SMP.

Die CPU-Auslastung ist core-normalisiert: U = busy / (totalTime × n_cores). Migrationen erscheinen im Gantt als Pfeile (Overlay „Core-Migrationen“).

⚡ DVFS (Dynamic Voltage/Frequency Scaling)

Tab ⚡ DVFS (Expertenmodus). Leitet aus der Auslastung des berechneten Schedules einen Frequenzverlauf ab und schätzt die Energie.

P ∝ f³ (CMOS-Näherung) E = Σ f(t)³ · Δt f relativ zu f_max
GovernorVerhalten im Simulator
PerformanceImmer f_max
PowersaveImmer f_min
Ondemandf_max ab der Lastschwelle, darunter proportional zur Last
ConservativeSchritte von 10 % des Bereichs: hoch ab der Schwelle, runter unter der halben Schwelle
Schedutilf proportional zur aktuellen Auslastung (Linux ab 4.7)
Interactivef_max, solange in den letzten Zeiteinheiten Last anlag, sonst f_min

Einstellbar sind Min- und Max-Frequenz (in % von f_max), die Lastschwelle und optional diskrete P-States als kommagetrennte Prozentliste (Standard 25,50,75,100).

Modellgrenze: Die Frequenz verändert hier nicht die Ausführungszeiten; der Schedule bleibt gleich. Deshalb spart „Powersave“ im Simulator immer am meisten. Real verlängert eine niedrige Frequenz die Rechenzeit, und oft ist „race to idle“ (schnell rechnen, dann schlafen) sparsamer.

🔒 Synchronisierung

Im Scheduler-Tab

Prozesse können ein Mutex (mutex_0 … mutex_2) belegen; dann läuft der ganze Job als kritischer Abschnitt. Blockierte Prozesse erscheinen im Gantt rot schraffiert, die Ressourcen-Zeile zeigt die Lock-Belegung. Das Mutex-Protokoll (Systemparameter) bestimmt, ob Prioritätsinversion auftritt oder durch Priority Inheritance verhindert wird.

Tab Synchronisierung

  • Unterreiter: Mutex, Semaphore, Condition Variables, RW-Lock, Producer-Consumer
  • Konfiguration: bis zu 4 Mutexe, Semaphor-Startwert bis 10, Producer-/Consumer-Threads und Puffergröße
  • Protokolle: ohne Priority Inheritance, mit Priority Inheritance, Priority Protect (Ceiling-Boost), Priority Ceiling Protocol (vereinfacht)
  • ⚠ Deadlock provozieren: erzeugt eine zyklische Wartebedingung; die Deadlock-Erkennung findet den Zyklus im Wait-For-Graph
  • Ansichten: Resource Inspector, Sync-Event-Log, Causal Timeline (Zustand → Ursache → Wirkung) und Thread-State-Ribbon

Import / Export

  • ⬇ Export: Speichert Prozesse, Konfiguration und Simulations-Meta als JSON-Datei
  • ⬆ Import ▾ → Datei öffnen: Lädt eine exportierte JSON-Datei und stellt den Zustand wieder her
  • ⬆ Import ▾ → JSON einfügen: Szenario-JSON direkt einfügen, z. B. den Szenario-Block aus einer Übungsaufgabe (auch mit Markdown-Codeblock); Fehler werden im Dialog angezeigt
  • Szenario-Links: #scenario=<Base64> oder #example=<id> in der Adresse lädt ein Szenario bzw. Lehrbeispiel. Zusätze: &autorun=0 (laden ohne Ergebnis, ▶ startet; in den Presets: „ohne Ergebnis teilen“), &embed=1 (reduzierte Ansicht für ein iframe, z. B. auf Folien), &theme=light|dark. Details in der README.
  • 💾 Presets: Für dauerhaftes Speichern und Teilen (siehe Preset-Bibliothek)
Tipp: Exportiere interessante Konfigurationen vor dem Experimentieren, um zur Ausgangslage zurückzukehren.

🐧 Trace-Import (Expertenmodus)

Über 🐧 Trace ▾ lassen sich aufgezeichnete Scheduler-Abläufe echter Systeme einlesen und als Gantt darstellen:

  • 🧾 Trace importieren: Linux sched_switch-Ereignisse aus ftrace/trace-cmd (Text), kanonisches JSON oder CSV
  • 🧪 LTTng-JSON importieren: Kernel-Traces aus LTTng (über Babeltrace als JSON exportiert)
  • ❓ Trace-Formate: Beschreibung der erwarteten Felder mit Beispielen
  • 🐧 Linux-Trace: ON/OFF schaltet zwischen dem importierten Trace und der Simulation um

Beispiel-Traces liegen im Repository unter trace_examples/.

📂 Lehr-Beispiele

22 vorgefertigte Szenarien in 7 Kategorien. Öffnen über den Header-Button 📂 Beispiele. Nach dem Laden erscheint rechts ein Analyse-Leitfaden mit Beobachtungshinweisen, klickbaren Experiment-Buttons und Theorie-Hintergrund.

KategorieBeispiele
Klassisch🚛 Konvoi-Effekt · ⚖️ SJF vs. SRTF · ⏱️ Round Robin: Quantum-Effekt · ⏳ Starvation & Priority · 🗂️ Multi-Level Queue
Synchronisierung🔒 Prioritätsinversion · ⧖ Kontextwechsel-Overhead
Echtzeit📡 EDF vs. Rate Monotonic · ⚡ Sporadische & Aperiodische Tasks · 📊 RM Auslastungsgrenze · 🚦 SCHED_FIFO · 🔁 SCHED_RR · 🎯 SCHED_DEADLINE
Multi-Core🖥️ Global SMP vs. Work Stealing · 📈 Skalierung 1 → 4 Cores
DVFS🔋 Energie-Tradeoff
Analyse📉 Jitter-Analyse · 🧾 Trace-Replay Grundlagen · 🐧 Linux CFS + Trace-Lab
Interprozess-Kommunikation🔗 Pipeline-Abhängigkeiten (DAG) · ⑂ Fork-Join-Muster (DAG) · 🏭 Producer-Consumer (Semaphor)

Musterlösungen mit Gantt-Diagramm, Kennzahlen aller Experimente und Erklärung stehen unter ✅ Lehrbeispiele – Lösungen. Die klassischen Beispiele (Konvoi, SJF/SRTF, RR, MLQ, Kontextwechsel, Multi-Core, DAG) bestehen aus einmaligen Prozessen wie im Lehrbuch; die Echtzeit-Beispiele aus periodischen Tasks.

Für Übungsaufgaben: Szenarien lassen sich als Link mit #scenario=… verteilen (siehe Share-URL in den Presets); ein Klick öffnet sie direkt im Simulator.

✅ Lehrbeispiele – Lösungen

Zu jedem Lehrbeispiel: Szenario, der vom Simulator berechnete Ablauf, die Kennzahlen des Basis-Laufs und aller Experimente sowie eine Erklärung. Die Werte gelten für die Standard-Einstellungen (keine Overhead-Kosten, sofern nicht anders angegeben). Gantt-Bilder zeigen periodische Szenarien bis t = 60. Ein Klick auf einen Titel klappt die Lösung auf.

Für Übungen: Erst selbst das Gantt-Diagramm zeichnen und Ø W / Ø R berechnen, dann hier vergleichen. Mit 🎯 Predict lässt sich das auch direkt im Simulator prüfen.
🚛 Konvoi-Effekt (FCFS)Klassisch

Ein langer CPU-Burst blockiert alle kurzen Prozesse dahinter. Das Herzstück von FCFS's Schwäche.

Szenario

ProzessAnkunftCPrioDTyp
CPU-Last020130einmalig
IO-112125einmalig
IO-222125einmalig
IO-332125einmalig

Algorithmus FCFS

Lösung

CPU-LastIO-1IO-2IO-3CPU-LaIO-1IO-2IO-302468101214161820222426
Basis-Lauf (FCFS).
LaufEinstellungØ WØ RØ TATCPU-Util.WechselDeadline-Misses
BasisFCFS15,0015,0021,50100.0%30
Vergleich: SJF (non-preemptiv)SJF15,0015,0021,50100.0%30
Vergleich: SRTF (preemptiv)SRTF2,250,758,75100.0%40
Round Robin Q=2Round Robin, Q=23,502,0010,00100.0%50

Erklärung

FCFS arbeitet strikt in Ankunftsreihenfolge: CPU-Last belegt die CPU von 0 bis 20, danach laufen IO-1 bis IO-3 je 2 Zeiteinheiten. Die kurzen Prozesse warten 19, 20 und 21 Zeiteinheiten, Ø W = 60/4 = 15. SJF ändert nichts, weil bei t = 0 nur CPU-Last bereit ist und SJF nicht verdrängt. SRTF verdrängt CPU-Last bei t = 1 und senkt Ø W auf 2,25, RR (Q = 2) auf 3,5. Merksatz: Der Konvoi entsteht durch fehlende Verdrängung, nicht durch die Auswahlregel.

⚖️ SJF vs. SRTFKlassisch

Non-preemptives SJF lässt laufende Jobs zu Ende; SRTF verdrängt sie sofort wenn ein kürzerer ankommt. Unterschied in Ø Wartezeit und Reaktionszeit.

Szenario

ProzessAnkunftCPrioDTyp
P_lang08120einmalig
P223115einmalig
P342112einmalig
P451110einmalig

Algorithmus SJF · Quantum 1

Lösung

P_langP2P3P4P_langP4P3P201234567891011121314
Basis-Lauf (SJF).
LaufEinstellungØ WØ RØ TATCPU-Util.WechselDeadline-Misses
BasisSJF4,254,257,75100.0%30
Wechsel zu SRTFSRTF2,000,505,50100.0%40
Wechsel zu SJFSJF4,254,257,75100.0%30
δ_cs = 0.5 (Overhead)SRTF3,251,256,7587.5%40
Vergleich: FCFSFCFS5,255,258,75100.0%30

Erklärung

SJF: P_lang ist bei t = 0 allein und läuft durch (0–8). Danach entscheidet die kürzeste Rechenzeit: P4 (8–9), P3 (9–11), P2 (11–14). Wartezeiten 0, 9, 5, 3 → Ø W = 4,25. SRTF: Bei t = 2 hat P2 (3) weniger Restzeit als P_lang (6) und verdrängt ihn; danach P4 (5–6), P3 (6–8), P_lang ab t = 8. Wartezeiten 6, 0, 2, 0 → Ø W = 2,00, dafür 4 statt 3 Kontextwechsel. FCFS liegt bei 5,25. Mit δ_cs = 0,5 steigt SRTF auf 3,25 und bleibt hier trotzdem vorn.

⏱️ Round Robin: Quantum-EffektKlassisch

Das Zeitquantum Q bestimmt den Tradeoff zwischen Reaktionszeit und Overhead. Zu klein = Thrashing, zu groß = degeneriert zu FCFS.

Szenario

ProzessAnkunftCPrioDTyp
P1081100einmalig
P2151100einmalig
P3231100einmalig
P4061100einmalig

Algorithmus Round Robin · Quantum 2

Lösung

P1P2P3P4P1P4P2P3P1P4P2P3P1P4P2P10246810121416182022
Basis-Lauf (Round Robin, Q = 2).
LaufEinstellungØ WØ RØ TATCPU-Util.WechselDeadline-Misses
BasisRound Robin, Q=212,752,2518,25100.0%110
Quantum = 1Round Robin, Q=112,001,0017,50100.0%200
Quantum = 2 (Start)Round Robin, Q=212,752,2518,25100.0%110
Quantum = 5Round Robin, Q=512,756,7518,25100.0%50
δ_cs = 0.5 + Q=1Round Robin, Q=120,501,8826,0068.8%200

Erklärung

Ablauf mit Q = 2 (FIFO-Ready-Queue, neue Prozesse reihen sich vor dem verdrängten ein): P1, P4, P2, P3, P1, P4, P2, P3, P1, P4, P2, P1. Das Quantum verschiebt vor allem die Reaktionszeit und die Zahl der Wechsel: Q = 1 → Ø R 1,0 bei 20 Wechseln, Q = 2 → 2,25 bei 11, Q = 5 → 6,75 bei 5. Die mittlere Wartezeit bleibt fast gleich (12,0–12,75). Kosten Wechsel Zeit (δ_cs = 0,5), steigt Ø W bei Q = 1 von 12,0 auf 20,5: Ein zu kleines Quantum wird teuer.

⏳ Starvation & Priority SchedulingKlassisch

Niedriger priorisierte Prozesse "verhungern" wenn ständig höher priorisierte ankommen. Das Problem und seine Lösung (Aging) sind Kernthema im OS-Design.

Szenario

ProzessAnkunftCPrioTDTyp
HP-10812020periodisch
HP-22611515periodisch
HP-34522020periodisch
LP-10453030periodisch

Algorithmus Priority · Preemptiv · periodische Jobs bis t = 60

Lösung

HP-1HP-2HP-3LP-1HP-1HP-2HP-2HP-1HP-2HP-1HP-2HP-3LP-1051015202530354045505560
Basis-Lauf (Priority) — Ausschnitt bis t = 60.
LaufEinstellungØ WØ RØ TATCPU-Util.WechselDeadline-Misses
BasisPriority15,2512,4221,17100.0%114 (HP-3: d=24→39, HP-3: d=44→58, LP-1: d=30→67 …)
Vergleich: Round RobinRound Robin, Q=316,086,3322,00100.0%249 (HP-1: d=20→21, HP-1: d=40→48, HP-1: d=60→71 …)
Vergleich: FCFSFCFS11,0011,0016,92100.0%114 (HP-2: d=17→18, HP-2: d=47→52, HP-2: d=62→71 …)
Alle gleiche PrioritätPriority11,0011,0016,92100.0%114 (HP-2: d=17→18, HP-2: d=47→52, HP-2: d=62→71 …)

Erklärung

Die drei HP-Tasks allein lasten die CPU zu 105 % aus (8/20 + 6/15 + 5/20). Bei strikter Priorität bekommt LP-1 deshalb erst ab t = 63 Rechenzeit, als im Simulationsfenster keine neuen HP-Jobs mehr ankommen. Es ist echte Starvation, beide LP-Jobs verpassen ihre Deadline. Mit RR (Q = 3) läuft LP-1 schon bei t = 3, mit FCFS oder gleicher Priorität bei t = 8. Die Überlast verschwindet dadurch nicht, sie verteilt sich auf alle Tasks (RR: 9 Misses). Aging würde LP-1 nach einer Wartezeit hochstufen.

🗂️ Multi-Level Queue (MLQ)Klassisch

Prozesse werden in Queues unterschiedlicher Priorität eingeteilt. Queue-0 läuft mit kleinem Quantum (interaktiv), Queue-2 mit großem Quantum (Batch).

Szenario

ProzessAnkunftCPrioDTypWeiteres
System031100einmaligQueue 0
Interactive152100einmaligQueue 1
Interactive2342100einmaligQueue 1
Batch0103100einmaligQueue 2

Algorithmus MLQ · Quantum 2

Lösung

SystemInteractiveInteractive2BatchSystemInteraInteraBatch0246810121416182022
Basis-Lauf (MLQ, Q = 2).
LaufEinstellungØ WØ RØ TATCPU-Util.WechselDeadline-Misses
BasisMLQ5,504,5011,00100.0%40
Vergleich: Round RobinRound Robin, Q=29,002,2514,50100.0%100
Vergleich: FCFSFCFS7,507,5013,00100.0%30
Batch erst späterMLQ3,002,008,50100.0%40

Erklärung

System (Queue 0) läuft zuerst (0–3). Interactive und Interactive2 (Queue 1) teilen sich die CPU mit Q = 4: 3–7, 7–11, 11–12. Batch (Queue 2) startet erst bei t = 12, als die höheren Queues leer sind, und läuft durch. Ø W = 5,5. Mit FCFS läuft Batch schon bei t = 3 und hält die interaktiven Prozesse bis t = 13 auf (Ø W 7,5). Mit RR sinkt die Reaktionszeit (2,25), die Wartezeit steigt aber auf 9,0. Kommt Batch erst bei t = 10, sinkt seine Wartezeit auf 2.

🔒 PrioritätsinversionSynchronisierung

LP hält Mutex, HP braucht ihn → HP blockiert, MP läuft stattdessen. Klassisches Mars Pathfinder-Problem. Lösung: Priority Inheritance Protocol (PIP).

Szenario

ProzessAnkunftCPrioTDTypWeiteres
HP4312010periodischMutex 0
MP2522020periodisch—
LP0833030periodischMutex 0

Algorithmus Priority · Mutex-Protokoll Inversion (ohne Schutz) · Preemptiv · periodische Jobs bis t = 60

Lösung

HPMPLPLPMPLPHPMPHPMPLPMPHPMP05101520253035404550
Basis-Lauf (Priority) — Ausschnitt bis t = 60. Amber-Rahmen = kritischer Abschnitt.
LaufEinstellungØ WØ RØ TATCPU-Util.WechselDeadline-Misses
BasisPriority2,501,137,5080.0%101 (HP: d=14→16)
Mit PIP (Priority Inheritance)Priority2,880,757,8880.0%100
Ohne Schutz (Inversion)Priority2,501,137,5080.0%101 (HP: d=14→16)
Ohne Mutex (kein Block)Priority2,130,007,1380.0%110

Erklärung

LP sperrt Mutex 0 bei t = 0. MP (Priorität 2) verdrängt LP bei t = 2, noch bevor HP ankommt. HP erscheint bei t = 4, braucht Mutex 0 und muss warten. Ohne Schutz läuft zuerst MP (bis 7), dann LP bis zur Freigabe bei t = 13. HP rechnet 13–16 und verpasst seine Deadline 4 + 10 = 14. Mit Priority Inheritance erbt LP ab t = 4 die Priorität von HP, verdrängt MP und gibt den Mutex bei t = 10 frei. HP ist bei t = 13 fertig, rechtzeitig. Die Inversionszeit sinkt von 9 auf 6 Zeiteinheiten. Ohne Mutex startet HP sofort bei t = 4.

⧖ Kontextwechsel-OverheadSynchronisierung

Jeder Kontextwechsel kostet Zeit (Register speichern/laden, TLB flush, Cache-Pollution). Zu viele Wechsel schaden dem Durchsatz — sichtbar mit δ_cs.

Szenario

ProzessAnkunftCPrioDTyp
P1061100einmalig
P2041100einmalig
P3051100einmalig
P4031100einmalig

Algorithmus Round Robin · Quantum 2

Lösung

CPUP1P2P3P4P1P2P3P4P1P30246810121416182022
Lauf mit δ_cs = 0,5: graue Lücken = Kontextwechsel.
LaufEinstellungØ WØ RØ TATCPU-Util.WechselDeadline-Misses
BasisRound Robin, Q=211,003,0015,50100.0%90
δ_cs = 0 (kein Overhead)Round Robin, Q=211,003,0015,50100.0%90
δ_cs = 0.5Round Robin, Q=214,633,7519,1380.0%90
δ_cs = 1.0Round Robin, Q=218,254,5022,7566.7%90
Q=1 + δ_cs=0.5Round Robin, Q=117,882,2522,3867.9%170
FCFS + δ_cs=0.5FCFS8,508,5013,0092.3%30

Erklärung

Vier gleichzeitig ankommende Prozesse unter RR (Q = 2) erzeugen 9 Wechsel. Jeder Wechsel kostet δ_cs und verschiebt alles Folgende: Ø W steigt von 11,0 (δ_cs = 0) auf 14,6 (0,5) und 18,3 (1,0), der produktive Anteil der CPU sinkt auf 80 % bzw. 67 %. Halbiert man zusätzlich das Quantum (Q = 1, 17 Wechsel), wird es noch teurer. FCFS braucht nur 3 Wechsel und kommt mit δ_cs = 0,5 auf Ø W 8,5.

📡 EDF vs. Rate MonotonicEchtzeit

Utilization U ≈ 94% liegt über der RM-Grenze für n=3 (~78%). RM kann Deadlines verpassen, EDF hält sie in diesem Set ein.

Szenario

ProzessAnkunftCPrioTDTyp
τ103177periodisch
τ202255periodisch
τ301399periodisch

Algorithmus Rate Monotonic · Quantum 1 · periodische Jobs bis t = 60

Lösung

τ1τ2τ3τ2τ1τ2τ1τ2τ3τ2τ1τ2τ1τ2τ1τ2τ2τ1τ2τ1τ2τ3τ2τ1τ2τ1051015202530354045505560
Basis-Lauf (Rate Monotonic) — Ausschnitt bis t = 60.
LaufEinstellungØ WØ RØ TATCPU-Util.WechselDeadline-Misses
BasisRate Monotonic1,541,323,6196.7%282 (τ3: d=9→13, τ3: d=45→48)
Rate Monotonic (RM)Rate Monotonic1,541,323,6196.7%282 (τ3: d=9→13, τ3: d=45→48)
EDF (optimal)EDF1,251,113,3296.7%280
Vergleich: FCFSFCFS1,251,253,3296.7%270

Erklärung

U = 3/7 + 2/5 + 1/9 ≈ 94 % liegt über der RM-Schranke 78 % (n = 3). Unter RM hat τ3 (längste Periode) die niedrigste Priorität. Sein erster Job (Deadline t = 9) kommt erst bei t = 12 dran und ist bei t = 13 fertig; der zweite Miss folgt bei t = 45 → 48. EDF entscheidet nach der absoluten Deadline und lässt τ3 bei t = 5 laufen: keine Misses. FCFS kommt bei diesem Set zufällig ebenfalls ohne Miss aus. Garantiert ist das nur bei EDF (U ≤ 100 %).

⚡ Sporadische & Aperiodische TasksEchtzeit

Periodische, sporadische (mit MIT) und aperiodische Tasks koexistieren. EDF reagiert dynamisch, FCFS kann Deadlines nicht garantieren.

Szenario

ProzessAnkunftCPrioTDTyp
Periodisch02188periodisch
Sporadisch121—4sporadisch (MIT 6)
Aperiodisch362—20einmalig

Algorithmus EDF · Quantum 1 · periodische Jobs bis t = 60

Lösung

PeriodischSporadischAperiodisch051015202530354045505560
Basis-Lauf (EDF) — Ausschnitt bis t = 60.
LaufEinstellungØ WØ RØ TATCPU-Util.WechselDeadline-Misses
BasisEDF0,500,172,7265.6%190
EDF (dynamisch)EDF0,500,172,7265.6%190
FCFS (blind)FCFS0,560,562,7865.6%171 (Sporadisch: d=11→12)
Rate MonotonicRate Monotonic0,560,112,7865.6%190

Erklärung

Der sporadische Task hat eine enge Deadline (D = 4). Sein zweiter Job kommt bei t = 7, absolute Deadline t = 11. Unter FCFS läuft da noch der aperiodische Job (C = 6, 4–10), der Sporadische ist erst bei t = 12 fertig: Miss. EDF unterbricht den aperiodischen Job (Deadline t = 23) zugunsten des Jobs mit Deadline 11, RM wegen der höheren statischen Priorität: beide ohne Miss. Dichte-Test für EDF: 2/8 + 2/4 + 6/20 = 1,05 > 1 ist nur hinreichend; das Set ist trotzdem schedulierbar.

📊 RM AuslastungsgrenzeEchtzeit

3 Tasks mit Gesamtauslastung U=100% in einem nicht-harmonischen Set: RM verpasst Deadlines, EDF schafft das Set. Demonstriert die Lücke zwischen RM-Bound und EDF-Bound.

Szenario

ProzessAnkunftCPrioTDTyp
τ102155periodisch
τ20121010periodisch
τ30631212periodisch

Algorithmus Rate Monotonic · Quantum 1 · periodische Jobs bis t = 60

Lösung

τ1τ2τ3τ1τ3τ1τ3τ1τ3τ1τ3τ1τ3τ1τ3τ1τ3τ1τ3τ1τ3τ1τ3τ1τ3τ1τ3051015202530354045505560
Basis-Lauf (Rate Monotonic) — Ausschnitt bis t = 60.
LaufEinstellungØ WØ RØ TATCPU-Util.WechselDeadline-Misses
BasisRate Monotonic2,091,004,70100.0%294 (τ3: d=12→14, τ3: d=24→25, τ3: d=36→38 …)
Rate Monotonic (FAIL)Rate Monotonic2,091,004,70100.0%294 (τ3: d=12→14, τ3: d=24→25, τ3: d=36→38 …)
EDF (optimal, U=100%)EDF2,351,784,96100.0%280
Utilization auf 80% senkenRate Monotonic0,500,501,5081.4%360

Erklärung

U = 2/5 + 1/10 + 6/12 = 100 %. Unter RM läuft τ3 (T = 12) nur in den Lücken von τ1 und τ2. Die Antwortzeitanalyse ergibt R3 = 14 > D = 12, und tatsächlich verpasst τ3 vier Deadlines. EDF nutzt die CPU lückenlos und hält alle Deadlines. Das Experiment mit U = 80 % (T = 2, 5, 10) liegt immer noch über der Schranke 78 %, und trotzdem schafft RM es ohne Miss: Die Liu-&-Layland-Schranke ist nur hinreichend, nicht notwendig.

🚦 Linux RT: SCHED_FIFOEchtzeit

Feste RT-Prioritaeten ohne Zeitscheibe innerhalb gleicher Prioritaet. Zeigt deterministisches Verhalten und Starvation-Risiko.

Szenario

ProzessAnkunftCPrioTDTyp
RT-High0712010periodisch
RT-Mid1522014periodisch
RT-Low0442420periodisch

Algorithmus SCHED_FIFO · periodische Jobs bis t = 60

Lösung

RT-HighRT-MidRT-LowRT-HigRT-MidRT-HigRT-MidRT-HigRT-Mid0510152025303540455055
Basis-Lauf (SCHED_FIFO) — Ausschnitt bis t = 60.
LaufEinstellungØ WØ RØ TATCPU-Util.WechselDeadline-Misses
BasisSCHED_FIFO4,674,6710,0085.7%80
SCHED_FIFO aktivSCHED_FIFO4,674,6710,0085.7%80
Vergleich: SCHED_RRSCHED_RR, Q=24,674,6710,0085.7%80
Vergleich: EDFEDF4,674,6710,0085.7%80

Erklärung

Pro Periode läuft RT-High (Prio 1) 0–7 durch, dann RT-Mid 7–12, dann RT-Low 12–16. Der erste Job von RT-Low wartet 12 Zeiteinheiten, der zweite (Freigabe t = 24) 8. SCHED_RR und EDF liefern hier exakt denselben Ablauf: Alle Prioritäten sind verschieden, es gibt also nichts zu rotieren, und die Deadlines (10, 15, 20) ergeben dieselbe Reihenfolge. Den Rotationseffekt zeigt das Beispiel SCHED_RR.

🔁 Linux RT: SCHED_RREchtzeit

RT-Policy mit fester Prioritaet plus Zeitscheibe fuer faire Rotation innerhalb einer Prio-Stufe.

Szenario

ProzessAnkunftCPrioTDTyp
RR-A0622016periodisch
RR-B0622016periodisch
RT-High2311810periodisch

Algorithmus SCHED_RR · Quantum 2 · periodische Jobs bis t = 60

Lösung

RR-ARR-BRT-High0510152025303540455055
Basis-Lauf (SCHED_RR, Q = 2) — Ausschnitt bis t = 60.
LaufEinstellungØ WØ RØ TATCPU-Util.WechselDeadline-Misses
BasisSCHED_RR, Q=24,401,709,2081.4%210
SCHED_RR, Q=2SCHED_RR, Q=24,401,709,2081.4%210
SCHED_RR, Q=1SCHED_RR, Q=14,701,109,5081.4%390
SCHED_RR, Q=8SCHED_RR, Q=83,202,908,0081.4%100
Vergleich: SCHED_FIFOSCHED_FIFO3,202,908,0081.4%100

Erklärung

RR-A und RR-B haben dieselbe Priorität und wechseln sich mit Q = 2 ab. RT-High (Prio 1) kommt bei t = 2 und verdrängt sofort (2–5). Mit Q = 1 wird feiner rotiert (39 statt 21 Wechsel, Ø R 1,1), mit Q = 8 läuft jeder Job am Stück, und der Ablauf ist identisch mit SCHED_FIFO (10 Wechsel, Ø W 3,2).

🎯 Linux RT: SCHED_DEADLINEEchtzeit

Deadline-getriebene Linux-RT-Policy mit Runtime/Deadline/Period. Zeigt Deadline-Fokus und Budget-Effekt.

Szenario

ProzessAnkunftCPrioTDTyp
DL-A02166periodisch
DL-B03199periodisch
DL-C122—7sporadisch (MIT 8)

Algorithmus SCHED_DEADLINE · Quantum 1 · periodische Jobs bis t = 60

Lösung

DL-ADL-BDL-C051015202530354045505560
Basis-Lauf (SCHED_DEADLINE) — Ausschnitt bis t = 60.
LaufEinstellungØ WØ RØ TATCPU-Util.WechselDeadline-Misses
BasisSCHED_DEADLINE0,960,713,2590.2%250
SCHED_DEADLINE aktivSCHED_DEADLINE0,960,713,2590.2%250
Vergleich: EDFEDF0,880,793,1790.2%240
Vergleich: SCHED_FIFOSCHED_FIFO1,000,753,2990.2%261 (DL-C: d=8→9)

Erklärung

SCHED_DEADLINE ordnet jedem Task ein Budget (C) pro Periode zu und plant nach der frühesten Server-Deadline. Bei t = 2 läuft deshalb DL-C (Deadline 1 + 7 = 8) vor DL-B (Deadline 9). Ergebnis: keine Misses, sehr ähnlich zu reinem EDF. Unter SCHED_FIFO mit festen Prioritäten kommt DL-C (Prio 2) zu spät und verpasst seine erste Deadline (8 → 9).

🖥️ Global SMP vs. Work StealingMulti-Core

4 Cores mit ungleichmäßiger Last: ein Heavy-Task mit 2 Threads + mehrere leichte Tasks. Vergleicht eine globale Queue, Queues pro Core mit Stehlen und feste Partitionierung.

Szenario

ProzessAnkunftCPrioDTypWeiteres
Heavy0121100einmalig2 Threads
Med-1051100einmaligCore 0
Med-2141100einmaligCore 1
Light222100einmalig—
Light2322100einmalig—

Algorithmus FCFS · Multi-Core-Tab: 4 Cores, Strategie work-stealing

Lösung

Multi-Core-Tab (4 Cores, FCFS je Core):

StrategieØ WØ TATMakespanAuslastung Core 0–3Migrationen
Global SMP0,835,00785.7 % / 100.0 % / 85.7 % / 85.7 %0
Work Stealing0,835,00785.7 % / 85.7 % / 100.0 % / 85.7 %2
Partitioned4,839,0013100.0 % / 92.3 % / 0.0 % / 0.0 %0
Gang2,336,5011100.0 % / 81.8 % / 27.3 % / 18.2 %0
G-EDF0,835,00785.7 % / 100.0 % / 85.7 % / 85.7 %0
P-EDF2,006,1711100.0 % / 90.9 % / 18.2 % / 18.2 %0
Core 0Core 1Core 2Core 3H.t0Med-1H.t1Med-2LightLight201234567
Global SMP: alle vier Cores arbeiten, Makespan 7.
Core 0Core 1Core 2Core 3H.t0Med-1LightH.t1Med-2Light2012345678910111213
Partitioned: feste Zuordnung, Core 2 und 3 bleiben leer, Makespan 13.

Erklärung

Bei 4 Cores und 6 Recheneinheiten (Heavy mit 2 Threads) entscheidet die Verteilung. Global SMP: Jeder freie Core nimmt den nächsten Prozess, alle Kerne arbeiten, Makespan 7. Work Stealing erreicht mit zwei Diebstählen dieselbe Verteilung. Partitioned hält die Bindungen ein (Med-1 → Core 0, Med-2 → Core 1) und verteilt den Rest reihum: Core 2 und 3 bleiben leer, Makespan 13. Hinweis: Die Strategien wirken im Tab Multi-Core; der Scheduler-Tab zeigt das Szenario auf einem Kern.

📈 Skalierung: 1 → 4 CoresMulti-Core

Wie skaliert Durchsatz mit Anzahl der Cores? 5 CPU-intensive Tasks — Speedup und Amdahls Gesetz beobachtbar.

Szenario

ProzessAnkunftCPrioDTyp
Task-A061100einmalig
Task-B051100einmalig
Task-C071100einmalig
Task-D041100einmalig
Task-E051100einmalig

Algorithmus FCFS

Lösung

Task-ATask-BTask-CTask-DTask-ETask-ATask-BTask-CTask-DTask-E02468101214161820222426
Basis-Lauf (FCFS).
LaufEinstellungØ WØ RØ TATCPU-Util.WechselDeadline-Misses
BasisFCFS11,4011,4016,80100.0%40
1 Core (seriell)FCFS11,4011,4016,80100.0%40
2 CoresFCFS, 2 Cores4,204,209,6090.0%30
4 CoresFCFS, 4 Cores0,800,806,2075.0%10

Erklärung

Fünf gleichzeitig ankommende Tasks mit zusammen 27 Zeiteinheiten Rechenzeit. 1 Core: Makespan 27, Ø W 11,4. 2 Cores (Global SMP): Makespan 15, Ø W 4,2, Speedup 1,8. 4 Cores: Makespan 9, Ø W 0,8, Speedup 3,0. Der Speedup bleibt unter 4, weil sich 5 unteilbare Tasks nicht gleichmäßig auf 4 Kerne verteilen lassen (Auslastung 75 %).

🔋 DVFS Energie-TradeoffDVFS

Burstartige Last gefolgt von Idle-Phasen. Zeigt den Energie-Performance-Tradeoff verschiedener DVFS-Gouverneure.

Szenario

ProzessAnkunftCPrioTDTyp
Burst10512020periodisch
Idle6121515periodisch
Burst28612020periodisch
IO2231212periodisch

Algorithmus Round Robin · Quantum 3 · periodische Jobs bis t = 60

Lösung

Burst1IdleBurst2IOIOBurst2IOIOBurst2IOBurst1IO0510152025303540455055
Basis-Lauf (Round Robin, Q = 3) — Ausschnitt bis t = 60.
LaufEinstellungØ WØ RØ TATCPU-Util.WechselDeadline-Misses
BasisRound Robin, Q=30,870,474,0082.5%170
Governor: PerformanceRound Robin, Q=30,870,474,0082.5%170
Governor: PowersaveRound Robin, Q=30,870,474,0082.5%170
Governor: OndemandRound Robin, Q=30,870,474,0082.5%170

DVFS-Tab (f_min 25 %, Schwelle 70 %):

GovernorEnergieErsparnisØ Frequenz
Performance57,000,00 %100 %
Ondemand47,2017,30 %87 %
Schedutil47,2017,30 %87 %
Conservative44,8021,40 %90 %
Interactive56,001,70 %99 %
Powersave0,9098,40 %25 %

Erklärung

Der Schedule ist für alle Governors identisch; im Modell ändert die Frequenz die Rechenzeiten nicht. Unterschiedlich ist nur die geschätzte Energie (E = Σ f³·Δt). Performance braucht am meisten, Powersave fast nichts, die adaptiven Governors liegen dazwischen. Real würde Powersave die Jobs verlängern und Deadlines gefährden. Diese Kosten zeigt das Modell bewusst nicht.

📉 Jitter-Analyse (Periodische Tasks)Analyse

Wie stark schwankt die Reaktionszeit periodischer Tasks von Job zu Job? Vergleicht RR, EDF und FCFS — mit überraschendem Ergebnis.

Szenario

ProzessAnkunftCPrioTDTyp
Periodic-A02166periodisch
Periodic-B02188periodisch
Periodic-C0311010periodisch

Algorithmus Round Robin · Quantum 2 · periodische Jobs bis t = 60

Lösung

Periodic-APeriodic-BPeriodic-C0510152025303540455055
Basis-Lauf (Round Robin, Q = 2) — Ausschnitt bis t = 60.
LaufEinstellungØ WØ RØ TATCPU-Util.WechselDeadline-Misses
BasisRound Robin, Q=21,461,043,7191.5%280
Round Robin Q=2Round Robin, Q=21,461,043,7191.5%280
EDFEDF1,211,043,4691.5%250
RR Q=1Round Robin, Q=11,830,584,0891.5%470
FCFS (deterministisch)FCFS1,251,253,5091.5%220

Jitter (Standardabweichung der Reaktionszeiten, in Klammern min–max):

Verfahrenσ Periodic-Aσ Periodic-Bσ Periodic-C
RR Q=20,66 (0–2)0,83 (0–2)1,21 (0–4)
EDF0,40 (0–1)0,87 (0–2)1,61 (0–4)
RR Q=10,46 (0–1)0,43 (0–1)0,69 (0–2)
FCFS0,98 (0–3)0,99 (0–3)1,21 (0–4)

Erklärung

Jitter ist hier die Standardabweichung σ der Reaktionszeiten aller Jobs eines Tasks. Das Ergebnis widerlegt eine verbreitete Annahme: EDF macht Periodic-A (kürzeste Periode) so gleichmäßig wie kein anderes Verfahren, Periodic-C (späteste Deadline) aber am unruhigsten. EDF optimiert Deadlines, nicht den Jitter. RR mit Q = 1 hat insgesamt den kleinsten Jitter (höchstens 0,69), weil jeder neue Job sofort eine Zeitscheibe bekommt (um den Preis von fast doppelt so vielen Wechseln).

🔗 Pipeline-Abhängigkeiten (DAG)Interprozess-Kommunikation

Drei Prozesse bilden eine Pipeline: Lesen → Verarbeiten → Schreiben. Jeder Schritt wartet auf den vorherigen. Zeigt wie Precedence Constraints den Scheduler einschränken.

Szenario

ProzessAnkunftCPrioDTypWeiteres
Lesen04120einmalig—
Verarbeiten05125einmaligwartet auf Lesen
Schreiben03120einmaligwartet auf Verarbeiten

Algorithmus FCFS

Lösung

LesenVerarbeitenSchreibenLesenVerarbSchrei0123456789101112
Basis-Lauf (FCFS).
LaufEinstellungØ WØ RØ TATCPU-Util.WechselDeadline-Misses
BasisFCFS4,334,338,33100.0%20
Vergleich: FCFSFCFS4,334,338,33100.0%20
Vergleich: SJFSJF4,334,338,33100.0%20
Vergleich: Round RobinRound Robin, Q=24,334,338,33100.0%20
Parallele Zweige hinzufügenFCFS4,334,338,33100.0%20

Erklärung

Die Abhängigkeiten erzwingen die Reihenfolge Lesen (0–4) → Verarbeiten (4–9) → Schreiben (9–12), unabhängig vom Algorithmus. FCFS, SJF und RR liefern denselben Ablauf, denn zu jedem Zeitpunkt ist genau ein Prozess bereit. Ø W = (0 + 4 + 9)/3 = 4,33: Verarbeiten und Schreiben warten nicht auf die CPU, sondern auf ihre Vorgänger.

⑂ Fork-Join-Muster (DAG)Interprozess-Kommunikation

Ein Haupt-Prozess gabelt sich in zwei parallele Teilaufgaben auf. Ein abschließender Join-Prozess wartet auf beide. Klassisches paralleles Berechnungsmuster.

Szenario

ProzessAnkunftCPrioDTypWeiteres
Main03125einmalig—
Worker-A04120einmaligwartet auf Main
Worker-B06120einmaligwartet auf Main
Join02125einmaligwartet auf Worker-A, Worker-B

Algorithmus Round Robin · Quantum 2

Lösung

MainWorker-AWorker-BJoinMainWorkerWorkerWorkerWorkerJoin0123456789101112131415
Basis-Lauf (Round Robin, Q = 2).
LaufEinstellungØ WØ RØ TATCPU-Util.WechselDeadline-Misses
BasisRound Robin, Q=26,255,2510,00100.0%50
FCFS — sequenziellFCFS5,755,759,50100.0%30
SRTF — überlappendSRTF5,755,759,50100.0%30
Round Robin Q=2Round Robin, Q=26,255,2510,00100.0%50
SJFSJF5,755,759,50100.0%30

Erklärung

Main läuft 0–3. Danach sind Worker-A (4) und Worker-B (6) bereit. FCFS, SJF und SRTF lassen A zuerst laufen (3–7), dann B (7–13). RR verzahnt beide (A 3–5, B 5–7, A 7–9, B 9–13). Join startet in allen Fällen erst bei t = 13, wenn beide Worker fertig sind, und endet bei 15. Der kritische Pfad Main + Worker-B + Join = 11 wäre die Laufzeit auf zwei Kernen; auf einem Kern bleibt es bei 15.

🏭 Producer-Consumer (Semaphor)Interprozess-Kommunikation

Klassisches Producer-Consumer-Problem mit einem Counting Semaphor als Buffer. Die Kapazität steuert, wie viele gleichzeitige Inhaber logisch erlaubt sind.

Szenario

ProzessAnkunftCPrioTDTypWeiteres
Prod-A0522020periodischMutex 0
Prod-B1421818periodischMutex 0
Prod-C2321515periodischMutex 0
Consumer0612525periodischMutex 1

Algorithmus Round Robin · Quantum 2 · Kapazitäten S0 = 2, S1 = 1 · periodische Jobs bis t = 60

Lösung

Prod-AProd-BProd-CConsumer051015202530354045505560
Basis-Lauf (Round Robin, Q = 2) — Ausschnitt bis t = 60. Amber-Rahmen = kritischer Abschnitt.
LaufEinstellungØ WØ RØ TATCPU-Util.WechselDeadline-Misses
BasisRound Robin, Q=25,932,0010,29100.0%311 (Prod-C: d=17→18)
Semaphor-Kapazität = 1Round Robin, Q=25,362,799,71100.0%271 (Prod-C: d=17→20)
Kapazität = 3Round Robin, Q=26,001,6410,36100.0%320
Vergleich: ohne SyncRound Robin, Q=26,001,6410,36100.0%320

Erklärung

Die drei Producer brauchen Semaphor S0, der Consumer Mutex S1. Unter Round Robin werden Producer mitten im kritischen Abschnitt verdrängt. Die Kapazität von S0 bestimmt dann, wie viele gleichzeitig „drin“ sein dürfen. Mit Kapazität 1 muss jeder Producer warten, bis der Halter fertig ist (Ø R 2,79), mit 2 sinkt die Reaktionszeit auf 2,00, mit 3 auf 1,64. Bei Kapazität 1 und 2 verpasst Prod-C knapp seine Deadline, bei 3 nicht. Ohne Synchronisation ergibt sich derselbe Ablauf wie mit Kapazität 3, nur ohne Schutz des Puffers.

🧾 Trace-Replay GrundlagenAnalyse

Zeigt, wie externe Laufzeit-Traces in ein Szenario ueberfuehrt und anschliessend mit klassischen Algorithmen analysiert werden.

Szenario

ProzessAnkunftCPrioTDTyp
T10412020periodisch
T21322020periodisch
T33232020periodisch

Algorithmus FCFS · periodische Jobs bis t = 60

Lösung

T1T2T3T1T2T3T1T2T3T1T2T3051015202530354045
Basis-Lauf (FCFS) — Ausschnitt bis t = 60.
LaufEinstellungØ WØ RØ TATCPU-Util.WechselDeadline-Misses
BasisFCFS2,332,335,3355.1%80
CSV-Trace importierenFCFS2,332,335,3355.1%80
Vergleich: Round Robin Q=2Round Robin, Q=23,331,336,3355.1%140
Vergleich: SJFSJF2,002,005,0055.1%80

Erklärung

Das Beispiel steht für ein importiertes Trace: drei Prozesse mit 4, 3 und 2 Zeiteinheiten, Ankünfte 0, 1, 3 (Periode 20). FCFS: T1 0–4, T2 4–7, T3 7–9, Ø W 2,33. SJF zieht T3 vor T2 (Ø W 2,0), RR verzahnt T1 und T2 (Ø W 3,33, aber bessere Reaktionszeit 1,33). Der eigentliche Lerninhalt ist der Import selbst (🐧 Trace ▾ im Expertenmodus).

🐧 Linux CFS + Trace-LabAnalyse

Kombiniert Linux-aehnliches CFS-Scheduling mit Trace-Import, um Replay-Daten und Simulationsmodell systematisch zu vergleichen.

Szenario

ProzessAnkunftCPrioTDTypWeiteres
T10104202020periodischCore 0
T20213202020periodischCore 1
T30322222020periodisch—

Algorithmus Linux CFS · Quantum 1 · Multi-Core-Tab: 2 Cores, Strategie global-smp · periodische Jobs bis t = 60

Lösung

T101T202T303T101T101T101051015202530354045
Basis-Lauf (Linux CFS) — Ausschnitt bis t = 60.
LaufEinstellungØ WØ RØ TATCPU-Util.WechselDeadline-Misses
BasisLinux CFS2,440,005,4455.1%130
Algorithmus: CFSLinux CFS2,440,005,4455.1%130
Deterministisch + Seed 42Linux CFS2,440,005,4455.1%130
Strict Linux aktivierenLinux CFS2,440,005,4455.1%130
Noisy Trace importierenLinux CFS2,440,005,4455.1%130
Golden Baseline speichernLinux CFS2,440,005,4455.1%130

Erklärung

CFS wählt immer den Prozess mit der kleinsten virtuellen Laufzeit. T303 hat einen höheren nice-Wert (Priorität 22 → geringeres Gewicht), seine vruntime wächst schneller. Jeder neu ankommende Prozess kommt sofort dran (Ø R 0), danach wechseln sich die Prozesse ab. Für den Vergleich mit echten Traces dienen die Diagnosepanels nach einem Import aus trace_examples/.

⚠ Modellgrenzen

Der Simulator vereinfacht bewusst. Wer Ergebnisse mit Lehrbuch- oder Klausurlösungen vergleicht, sollte diese Punkte kennen:

BereichVereinfachung
ZeitmodellDiskrete, ganzzahlige Zeiteinheiten; I/O-Phasen innerhalb eines Jobs werden nicht modelliert.
OverheadKontextwechsel-Kosten werden nach der Planung eingefügt und verschieben die folgenden Blöcke; Leerlauf fängt die Verzögerung wieder auf. Die Scheduling-Entscheidungen selbst ändern sich dadurch nicht.
MutexeEin Job mit Mutex hält es während seiner gesamten Rechenzeit. MLFQ berücksichtigt keine Mutexe.
E/AProzesse rechnen ohne E/A-Phasen; „blockiert vor Ablauf der Zeitscheibe“ (MLFQ-Folie) lässt sich daher nur über einzelne kurze Prozesse nachbilden.
Periodische TasksJobs werden in einem festen Fenster erzeugt (t = 60 oder t_max), nicht automatisch über die Hyperperiode. Ein Job wartet bei Abhängigkeiten auf die bis zu seiner Freigabe freigegebenen Jobs seiner Vorgänger.
WCRTBlockierzeiten durch Mutexe fließen nicht ein.
Multi-CoreProzesse laufen einmalig (keine periodischen Jobs), Abhängigkeiten werden nicht beachtet, Gang Scheduling ist vereinfacht (bis zu n bereite Prozesse laufen gemeinsam). Overhead verschiebt dort alle folgenden Blöcke.
DVFSFrequenz ändert die Ausführungszeiten nicht; Energie nur dynamisch (f³), ohne statische Leistung.

❓ Häufige Fragen

EDF simuliert keine Wiederholungen?

Periode setzen und Task-Typ auf „Periodisch“. Der Simulator erzeugt Job-Instanzen bis t = 60, bei Dauer „Manuell“ bis t_max. Mit dem Feld „Aktivierungen“ lässt sich die Anzahl der Freigaben fest vorgeben. Hinweis: Das Fenster ist fest, nicht die Hyperperiode; für eine vollständige Analyse t_max auf die Hyperperiode (kgV der Perioden) setzen.

CPU-Util. bei Multi-Core erscheint zu niedrig?

Korrekt — die Auslastung ist core-normalisiert: U = busy / (totalTime × n_cores). 2 Kerne mit je 80 % = 80 % Util., nicht 160 %.

Kontextwechsel-Overhead hat keinen sichtbaren Effekt?

δ_cs und δ_sched stehen standardmäßig auf 0. Werte unter Systemparameter setzen; dann werden sie als Bänder eingefügt. Bei FCFS gibt es wenige Wechsel → kaum Overhead, bei RR mit kleinem Quantum sehr deutlich.

WCRT zeigt ∞?

Die Fixpunktiteration divergiert → Task nicht schedulierbar. Auslastung reduzieren oder Prioritäten prüfen (RM: kürzere Periode = höhere Priorität).

Taskset-Generator trifft die Auslastung nicht genau?

UUniFast trifft die Ziel-Auslastung exakt, aber C_i wird auf ganze Zahlen gerundet (mindestens 1). Bei kurzen Perioden weicht die tatsächliche Auslastung deshalb spürbar ab. Größere Perioden (T_min / T_max) verringern den Rundungsfehler.

Share-URL funktioniert nicht?

Der Browser muss Clipboard-Zugriff erlauben. Falls die automatische Kopie fehlschlägt, öffnet sich ein Dialog mit der URL zum manuellen Kopieren.

Preset verschwunden nach Browser-Update?

Presets liegen im localStorage. Browser-Datenlöschung oder Inkognito-Modus löscht sie. Regelmäßig über „⬇ Alle exportieren“ sichern.

∑ Formelreferenz

GrößeFormelAnmerkung
WartezeitW_i = TAT_i − C_iAlle Bereit- und Blockierphasen
TurnaroundTAT_i = finish_i − arrival_iGesamtdurchlaufzeit
ReaktionszeitR_i = firstCPU_i − arrival_iOS-Sicht („response time“)
Normierte TATNTT_i = TAT_i / C_i1,0 = ohne Wartezeit
Tardinesstard_i = max(0, finish_i − d_i)d_i = absolute Deadline
LaxityL_i(t) = d_i − t − rem_C_iVerbleibender Puffer
CPU-Util.U = Σ busy / (T_max × n_cores)Core-normalisiert
Jain-Fairness(Σx_i)² / (n · Σx_i²)x_i = CPU-Anteil; 1,0 = perfekt fair
Auslastung TaskU_i = C_i / T_iAnteil der CPU pro Periode
RM-SchrankeΣ U_i ≤ n(2^(1/n) − 1)Hinreichend; → ln 2 ≈ 69,3 % für n → ∞
Hyperbolic BoundΠ (U_i + 1) ≤ 2Hinreichend für RM, schärfer
EDF-BedingungΣ C_i/T_i ≤ 1Notwendig und hinreichend (D = T, ein Prozessor)
WCRT (RTA)R_i = C_i + Σ_{j∈hp(i)} ⌈R_i/T_j⌉·C_jIterativer Fixpunkt; exakt für preemptive feste Prioritäten, D ≤ T
DVFS-EnergieE = Σ f_t³ · ΔtCMOS-Näherung P ∝ f³, f relativ zu f_max
Anbieterkennzeichnung

HM Hochschule München University of Applied Sciences
Lothstraße 34
D-80335 München

Telefon: +49 89 1265-0
Fax: +49 89 1265-3000
E-Mail: kommunikation@hm.edu
Website: www.hm.edu

Die Hochschule für angewandte Wissenschaften München ist eine Körperschaft des öffentlichen Rechts. Sie wird durch den Präsidenten Prof. Dr. Martin Leitner gesetzlich vertreten.

Umsatzsteuer-Identifikationsnummer gemäß § 27 Umsatzsteuergesetz (UStG): DE 235 059 152

Zuständige Aufsichtsbehörde:
Bayerisches Staatsministerium für Wissenschaft und Kunst
Salvatorstraße 2
D-80333 München

Verantwortlich für diese Webseite

Verantwortlich für Inhalt, Pflege und Aktualität dieser Webseite im Sinne von § 18 Abs. 2 Medienstaatsvertrag (MStV) ist:

Prof. Dr.-Ing. Martin Hobelsberger
Fakultät für Informatik und Mathematik
HM Hochschule München University of Applied Sciences
Lothstraße 64
E-Mail: martin.hobelsberger@hm.edu

Die Verantwortung des verfassenden Bereichs erstreckt sich insbesondere auf die Rechtmäßigkeit der Inhalte, die Einhaltung von Lizenz-, Marken- und Urheberrechten sowie die Korrektheit der veröffentlichten Informationen.

Haftungsausschluss

Die Inhalte dieser Webseite werden mit größtmöglicher Sorgfalt erstellt und regelmäßig gepflegt. Dennoch kann keine Gewähr für die Richtigkeit, Vollständigkeit und Aktualität der bereitgestellten Informationen übernommen werden. Für Schäden materieller oder immaterieller Art, die durch die Nutzung oder Nichtnutzung der Informationen verursacht werden, wird - soweit gesetzlich zulässig - keine Haftung übernommen.

Sofern von dieser Webseite auf Inhalte Dritter (externe Webseiten) verlinkt wird, liegen diese außerhalb des Verantwortungsbereiches der Hochschule München. Für illegale, fehlerhafte oder unvollständige Inhalte sowie für Schäden, die aus der Nutzung oder Nichtnutzung solcher externen Informationen entstehen, haftet ausschließlich der jeweilige Anbieter der Seiten.

Urheberrecht

Sämtliche auf dieser Webseite veröffentlichten Inhalte (Texte, Bilder, Grafiken, Layouts etc.) unterliegen - soweit nicht anders gekennzeichnet - dem Urheberrecht der jeweils genannten Rechteinhaberinnen und Rechteinhaber bzw. der Hochschule München. Eine Vervielfältigung, Bearbeitung, Verbreitung oder sonstige Nutzung außerhalb der engen Grenzen des Urheberrechts ist ohne vorherige schriftliche Zustimmung der Rechteinhaberinnen und Rechteinhaber nicht gestattet.

Bei der Verwendung fremder Inhalte werden die jeweiligen Lizenzbedingungen beachtet, insbesondere bei Werken unter Creative-Commons-Lizenzen.

Datenschutz

Hinweise zur Verarbeitung personenbezogener Daten im Zusammenhang mit der Nutzung dieser Webseite finden Sie in der gesonderten Datenschutzerklärung, die von jeder Seite aus direkt erreichbar verlinkt ist. Sie können die Seite auch direkt hier aufrufen: Datenschutz.

In der Datenschutzerklärung werden insbesondere die Arten der verarbeiteten personenbezogenen Daten, die Zwecke der Verarbeitung, eingesetzte Technologien (z. B. Protokolldateien, Cookies, eingebettete Inhalte Dritter) sowie die Kontaktdaten der bzw. des zuständigen Datenschutzbeauftragten der Hochschule München beschrieben.

Datenschutzerklärung

Datenschutz ist für die Hochschule München (HM) ein wichtiges Anliegen und gesetzliche Verpflichtung.

Diese Webseite wird betrieben im Rahmen der Hochschule München University of Applied Sciences. Verantwortlich für Inhalt und Betrieb dieser Webseite ist Bernhard Werner im Namen der Fakultät für Informatik und Mathematik.

1. Verantwortliche Stelle
Fakultät für Informatik und Mathematik
HM Hochschule München University of Applied Sciences
Lothstraße 64
D-80335 München
Telefon: +49 89 1265-3700
E-Mail: Sek-Fk07@hm.edu
Website: cs.hm.edu

Verantwortlich für diese konkrete Webseite (Inhalt und Betrieb) ist Prof. Dr.-Ing. Martin Hobelsberger, martin.hobelsberger@hm.edu.

Den behördlichen Datenschutzbeauftragten der Hochschule München erreichen Sie per E-Mail unter datenschutzbeauftragter@hm.edu.

2. Allgemeine Hinweise zur Datenverarbeitung
Beim Besuch dieser Webseite werden grundsätzlich keine personenbezogenen Daten von Nutzerinnen und Nutzern erhoben, verarbeitet oder gespeichert.

Es findet keine Erstellung von personenbezogenen Nutzungsprofilen statt, es werden keine Tracking-Tools eingesetzt und es erfolgt keine Weitergabe von Daten an Dritte zu Werbe- oder Analysezwecken.

3. Speicherung von Antworten auf Fragen (nicht-personenbezogen)
Auf dieser Webseite können Antworten auf fachliche Fragen eingegeben werden. Diese Antworten werden gespeichert, automatisch ausgewertet und ggf. korrigiert, da die technische Funktion der Seite andernfalls nicht möglich wäre. Die Verarbeitung der Antworten ist damit für die Bereitstellung des von den Nutzerinnen und Nutzern ausdrücklich gewünschten Dienstes erforderlich. Darüber hinaus werden die eingegebenen Antworten in anonymisierter Form für wissenschaftliche Forschungsvorhaben ausgewertet (z. B. zu statistischen Zwecken, zur Analyse von Antwortmustern oder zur Weiterentwicklung von Lehr- und Forschungsansätzen). Dabei wird darauf geachtet, dass kein Rückschluss auf einzelne Personen möglich ist.

Bei der Konzeption der Eingabemöglichkeiten wird darauf geachtet, dass keine personenbezogenen Daten erhoben werden (insbesondere keine Namen, Kontaktdaten oder direkt zuordenbaren Identifikatoren). Nutzerinnen und Nutzer werden gebeten, in ihren Antworten keine Informationen einzugeben, die Rückschlüsse auf ihre Person oder auf andere identifizierbare Personen zulassen.

Soweit im Einzelfall dennoch personenbezogene Angaben freiwillig gemacht werden, werden diese - soweit technisch möglich - vor der Auswertung anonymisiert oder gelöscht, sodass kein Personenbezug mehr besteht. Eine Zusammenführung der Antworten mit anderen Datenquellen zum Zweck der Identifizierung von Personen findet nicht statt.

4. Einsatz von Cookies und ähnlichen Technologien
Auf dieser Webseite werden keine Cookies zu Zwecken des Trackings, des Marketings oder der Reichweitenanalyse eingesetzt.

Es kommen lediglich technisch erforderliche Mechanismen zum Einsatz, die für die Bereitstellung der Webseite selbst notwendig sind (z. B. Server-Logik, Session-Handling ohne personenbezogene IDs), ohne dass hierdurch ein Personenbezug hergestellt wird. Ein separates Cookie-Banner oder Einwilligungsmanagement ist daher nicht erforderlich.

5. Server-Logfiles
Die technische Infrastruktur der Hochschule München kann aus Gründen der IT-Sicherheit und Betriebsstabilität Server-Logfiles erzeugen (z. B. zur Abwehr von Angriffen).

Soweit hierbei IP-Adressen verarbeitet werden, geschieht dies ausschließlich zur Sicherstellung des technischen Betriebs, nach dem Prinzip der Datenminimierung und nur für den erforderlichen Zeitraum; danach werden die Daten gelöscht oder anonymisiert.

6. Ihre Rechte
Soweit im Einzelfall doch personenbezogene Daten verarbeitet werden sollten, stehen Ihnen die folgenden Rechte gemäß Art. 15 ff. DSGVO zu:

  • Recht auf Auskunft über die zu Ihrer Person gespeicherten Daten
  • Recht auf Berichtigung unrichtiger Daten
  • Recht auf Löschung (Recht auf Vergessenwerden)
  • Recht auf Einschränkung der Verarbeitung
  • Recht auf Widerspruch gegen die Verarbeitung
  • Recht auf Datenübertragbarkeit

Sie haben zudem das Recht, sich bei einer Datenschutz-Aufsichtsbehörde zu beschweren, wenn Sie der Ansicht sind, dass die Verarbeitung der Sie betreffenden personenbezogenen Daten gegen datenschutzrechtliche Bestimmungen verstößt.

Aktualisierung dieser Datenschutzerklärung
Diese Datenschutzerklärung wird bei Bedarf an geänderte rechtliche Vorgaben sowie an technische oder organisatorische Änderungen angepasst. Es gilt jeweils die auf dieser Webseite veröffentlichte aktuelle Fassung.