Navigation


Traps

  1. Jeder Trapaufruf endet mit einem Sprung in den Dispatcher, der aber nicht jedesmal zwangsläufig anläuft.
  2. Traps dürfen den Taskzustand aller Tasks ändern, die sich im Dispatcher-Ring befinden, solange die Tasks an der gleichen Stelle im Ring bleiben.
  3. Traps dürfen kein I/O machen. Wollen sie eine Fehlermeldung ausgeben, können sie das indirekt über den Error-Dämon ausführen. Arbeitet der Error-Dämon z.Zt. keinen Auftrag ab, kann der Trap den Dämon fortsetzen.
  4. Die Traps laufen zwar im Supervisor-Mode, die Interruptsperre ist allerdings fast nie gesetzt. Während ein Trap läuft, kann jeder der Scheduler oder der Dispatcher für den Aufruf vorgemerkt werden.
  5. Preemption: Ist innerhalb eines Traps eine Schleife programmiert, deren Abarbeitungsdauer nicht determiniert ist (z.B. Suche nach freiem Speicherplatz), prüft der Trap immer wieder am Ende eines Befehlsblockes, ob das DPC-Flag gesetzt ist. Ist das der Fall, rettet der Trap die gerade bearbeitete Adresse in eine Systemzelle und springt den Dispatcher an. Der Dispatcher löscht bei jedem Taskwechsel diese Zelle, so dass der Trap weiß, ob er an der alten Stelle weitermachen kann oder von vorne beginnen muß.

    Falls zwischendurch eine andere Task lief, könnte sich ein Ring/eine Kette geändert haben, deshalb ist auf jeden Fall der Neustart der Systemfunktion notwendig.