|
Kapitel 4 - Kritischer Abschnitt
|
Inhalt
|
- Kritischer Abschnitt und Mutual Exclusion
- Dezentrale und Zentrale Steuerungen
- Semaphore und ihre Impementierung
- Verschiedenen Synchronisationsprobleme
|
Was ist ein Kritischer Abschnitt?
Ein Kritischer Abschnitt ist ein zeitlicher Bereich, in welchem mindestens zwei Prozesse auf das gleiche Betriebsmittel
zugreifen und mindestens eines davon schreibt. (Zeitkritischer Ablauf)
Erklären sie am Bsp. Druckerspooler den kritischen Abschnitt!
- in Spooler ist der Platz 4 frei
- Prozess A will drucken und liest die Platznummer
- PUM aktiviert Prozess B, welcher ebenfalls diese Platznummer liest
- Prozess B schreibt den Auftrag nach Platz 4
- PUM schaltet zu A zurück und A überschreibt nun den Druckauftrag von B!
Deshalb notwendig: Wechselseitiger Ausschluss!
Warum werden keine Interrupt Unterbrechungen zur Synchronisation verwendet?
Ein Prozeß der auf gemeinsame Daten und Ressourcen zugreift, kann nicht einfach alle Interrupts abschalten.
Dies würde zu keinem optimalen Scheduling führen, weil dann jeder Prozeß solange die Kontrolle behalten darf wie
er will. D.h. die wartenden Prozesse sind auf die Kooperation des gerade laufenden Prozesses angewiesen
(kooperatives Multitasking wie Win 3.11)
Was ist wechselseitiger Ausschluss?
Es muss gewährleistet werden, daß niemals sich mehr als ein Prozess in einem kritischen Abschnitt befinden darf.
Die Anwendung einer einfachen Sperrvariable ist hier nicht möglich, da der Zugriff und das Setzen dieser, selbst einen
kritischen Abschnitt darstellt. Es müssen Algorithmen gefunden werden, welche die Funktionalität gefahrlos implementieren.
Welche Anforderungen muss eine Steuerung für kritische Abschnitte erfüllen?
- exklusive Nutzung durch verschiedene Teilprozesse über mutual exclusion
- Ein Prozess darf einen anderen nur behindern, wenn beide im kritischen Abschnitt
- Der Eintritt in einen kritischen Abschnitt darf nicht lang dauern
- Alle Prozesse müssen in endlicher Zeit ihre Betriebsmittel zugewiesen bekommen
- globale Unabhängigkeit von allgemeinen Fortschreiten der Prozesse
Welche dezentralen Steuerungen kennen Sie? (aktives Warten)
- Test and Set Lock
- Ping-Pong (Striktes Alternieren)
- Decker Algorithmus
- Peterson Algorithmus
Wie arbeitet Striktes Alternieren? (Ping Pong)
| Prozess A |
Prozess B |
While (1)
{
while (turn!=FALSE);
criticalsection();
turn = TRUE;
notcriticalstuff();
}
|
While (1)
{
while (turn!=TRUE);
criticalsection();
turn = FALSE;
notcriticalstuff();
}
|
|
Hier wird nur mit einer TURN Variable zwischen den Prozessen hin und her geschalten. Nachteil ist das die Abläufe nur abwechselnd in die kritischen Abschnitte eintreten können und das ein nicht im kritischen Abschnitt arbeitender Prozess trotzdem warten muss, bis der andere diesen wieder verlassen hat.
|
Wie schaut Peterson's Algorithmus aus?
| | |