!1.2 Prozesssynchronisation
SPOOL: Druckersystem
Kommand: {{{lp}}}, welches die Aufträge an den Daemon {{[lpd}}} uebergibt. Und der gibt weiter an den Drucker (z.B. /dev/lp).
!!Beispiel einfache Implementierung einer SPOOL Warteliste
#bild1
Wenn mehrere Prozesse drucken wollen, muessen sie alle auf die Pointer next_in und next_out und auf die Druckliste zugreifen koennen.
Skript @ 1-18 zeigt, dass durch den (schwer reproduzierbaren) Prozesswechsel Fehler auftreten. In diesem Fall ueberschreibt Prozess A den Druckauftrag von Prozess B. Ursache dafuer ist eine "Race Condition", welche durch den Prozesswechsel innerhalb eines kritischen Abschnitts entsteht.
!!Loesungsansaetze
siehe Skript
- Maskieren bedeutet, dass im priviligierten Modus keine/sehr wenige Unterbrechungen zugelassen werden. Das kann verheerende Folgen haben, wenn folgende Interrupts maskiert werden:
- Timer: Betriebssystem kann sich nicht mehr zwischenschalten
- Termination Interrupt: Externe Hardwareereignisse werden nicht mehr erkannt (Keyboard, USB-Stick)
- Programmfehler: Es wird nicht erkannt, wenn Programmfehler auftreten -> schlecht