HomeMagiCSemaphoren in MagiCDer Smart-Redraw in MagiC

11.14 Allgemeines zum Shutdown

Unter einem Shutdown versteht man einen Mechanismus, der es erlaubt ein System kontrolliert herunter zu fahren. In einer Multitasking-Umgebung ist es nämlich eigentlich nicht mehr zulässig, den Rechner nach Gebrauch einfach abzuschalten; auch ein Rücksetzen per Reset-Taster sollte tabu sein. Vielmehr muß sichergestellt werden, daß alle Programme korrekt beendet und alle offenen Dateien korrekt geschlossen werden, bevor dem Computer der Strom abgedreht wird. Wird dies nicht beachtet, kann es durchaus zu Datenverlusten kommen.

Aus diesem Grund haben z.B. UNIX-Systeme oder der Apple Macintosh einen Shutdown-Mechanismus; ein solcher wurde auch von Atari im MultiTOS eingeführt und steht ebenfalls in MagiC (ab Version 3.0) zur Verfügung.

Aktiviert wird der Shutdown normalerweise über den Menüeintrag Datei/Ausschalten im Desktop, durch die Tastenkombination Ctrl-Alt-Del oder durch einen Auflösungswechsel. Während des Shutdown können keine Programme gestartet werden.

Querverweis: Shutdown in MultiTOS   Shutdown in MagiC   Shutdown beim Empfänger   Shutdown beim Initiator   shel_write

11.14.1 Shutdown in MultiTOS

Unter MultiTOS müssen Programme folgendes tun, um den Shutdown Mechanismus zu unterstützen:

Hinweis: MultiTOS schickt die AP_TERM-Nachricht dabei nur an solche Prozesse, die explizit AP_TERM verstehen. Da derzeit kaum Programme existieren, die ein entsprechendes shel_write absetzen, würde eine solche Implementierung in MagiC nicht das gewünschte Ergebnis liefern. Daher wurde ein anderes Verfahren gewählt, bei dem die AP_TERM Nachricht an alle laufenden Applikationen verschickt wird.

Querverweis: Shutdown in MagiC   shel_write   Shutdown beim Empfänger   Shutdown beim Initiator

11.14.2 Shutdown in MagiC

Unter MagiC funktioniert der Shutdown wie folgt: alle laufenden Programme erhalten eine AP_TERM-Nachricht die signalisiert, daß sie sich beenden sollen. Sind nach einer gewissen Zeit immer noch Programme im Speicher, so gibt SHUTDOWN eine Fehlermeldung aus. In der Datei SHUTDOWN.INF können Programmnamen (ohne Suffix wie ".prg" oder ".app") angegeben werden, die unkritisch sind und nicht zu einer Fehlermeldung durch SHUTDOWN führen sollen.

Darüber hinaus sollten die folgenden Punkte beachtet werden:

In MagiC 4 wurde der Shutdown Mechanismus wie folgt überarbeitet: Das AES schickt jetzt eine SHUT_COMPLETED-Nachricht mit msg[3] = 0 (d.h. 'Shutdown erfolglos beendet') und msg[4] = -1 (ungültige ap_id), wenn nur noch Programme im System sind, die nicht exlizit AP_TERM verstehen. Damit bricht ein Programm, das nur die MultiTOS-Spezifikation beherrscht, den Shutdown ab. SHUTDOWN.PRG dagegen wurde an die neue Spezifikation angepaßt, und funktioniert wie bisher, d.h. gibt den noch laufenden Programmen einen Timeout und gibt dann die Namen aller unwilligen Applikationen aus.

Darüber hinaus bekommt die Applikation #0 bei Ctrl-Alt-Del keine zufälligen Daten mehr in msg[4,5,6,7] übergeben, sondern die folgende Nachricht:

  msg[3]     = -1
  msg[4,6,7] =  0
  msg[5]     = AP_TERM

Querverweis:
Shutdown in MultiTOS   shel_write   Shutdown beim Empfänger   Shutdown beim Initiator

11.14.3 Der Shutdown aus Sicht der Applikation

Zunächst sei darauf hingewiesen, daß sich der Shutdown Mechanismus in MultiTOS von dem in MagiC unterscheidet: Ataris MultiTOS verschickt eine AP_TERM-Nachricht nur an solche Applikationen, die dem AES per shel_write (Opcode 9) explizit mitgeteilt haben, daß sie die AP_TERM-Nachricht verstehen; MagiC hingegen verschickt die Nachricht an alle aktiven Applikationen.

Der Shutdown wird vom AES genau dann als erfolgreich angesehen, wenn sich alle Programme, die explizit AP_TERM verstehen, beendet haben. Sollte eine Applikation bekanntgeben daß sie sich nicht beenden kann, so wird der Shutdown abgebrochen. Aus diesen Gründen hat jedes Programm, daß eine AP_TERM Nachricht empfängt prinzipiell nur zwei Möglichkeiten:

Reagiert die Applikation hingegen anders, d.h. ignoriert sie die AP_TERM Nachricht, so hängt das Verhalten des Systems davon ab, ob mitgeteilt wurde daß die AP_TERM-Nachricht verstanden wird. Im Klartext:

Hinweis: Wurde der Shutdown per Alternate-Control-Delete ausgelöst, so bekommen zunächst nur der Writeback-Daemon und die Applikation mit ID 0 eine AP_TERM-Nachricht. Als Absender ist dabei -1 eingetragen. Die Applikation 0 (i.a. der Desktop) beendet sich dann und startet das Shutdown-Programm.

Querverweis:
Shutdown beim Initiator   shel_write   Shutdown in MultiTOS   Shutdown in MagiC

11.14.4 Der Shutdown aus Sicht des Initiators

Shutdown und Auflösungswechsel werden in MagiC von dem Programm SHUTDOWN übernommen, das mit den folgenden Parametern aufgerufen wird:

SHUTDOWN.PRG dev txt

Dabei ist dev = -1, wenn ein Shutdown ohne Auflösungswechsel durchgeführt werden soll, ansonsten die Gerätenummer des VDI-Bildschirmtreibers. txt ist die Texthöhe für das AES; diese sollte i.a. Null sein.

Ein Shutdown wird per ret = shel_write(4, TRUE, 0, NULL, NULL) gestartet. Dabei signalisiert ein Rückgabewert von 0, daß ein Shutdown nicht möglich ist, weil z.B. bereits ein Shutdown läuft. Ein Auflösungswechsel wird mit ret = shel_write(5, dev, 0, NULL, NULL) durchgeführt. Dabei ist dev der VDI-Gerätetreiber. Alternativ kann mit shel_write(5, xdv, 1, NULL, NULL) in xdv ein Falcon-Auflösungsmodus angegeben werden.

Diese Aufrufe sind alle MultiTOS-konform. Zusätzlich existiert ab MagiC 3 noch folgender Aufruf: ret = shel_write(5, dev, 100+txt, NULL, NULL). Hiermit kann man die Texthöhe für das AES festlegen. Eine Falcon-Auflösung kann man bei diesem Modus nicht übergeben, dev ist also die Gerätenummer des VDI-Bildschirmtreibers.

Die Gerätenummer hängt vom verwendeten System und VDI ab. Bei einem nackten ST oder TT (ohne Grafikkarte) gilt die folgende Zuordung:

1 Default-Auflösung  
2 ST niedrig (320*200*16)
3 ST mittel (640*200*4)
4 ST hoch (640*400*2)
6 TT mittel (640*480*16)
8 TT hoch (1280*960*2)
9 TT niedrig (320*480*256)

Bei Einsatz einer Grafikkarte oder auf einem Macintosh stehen die Gerätenummern wie üblich in der ASSIGN.SYS-Datei im Wurzelverzeichnis des Bootlaufwerks.

Nach erfolgreichem shel_write-Aufruf befindet sich das System im Shutdown-Modus, und es können keine Programme mehr gestartet werden. Nach einem erfolgreichen Abschluß des Shutdown oder Auflösungswechsels erhält der Initiator folgende Nachricht:

msg[0] = SHUT_COMPLETED
msg[3] = 1 - Shutdown erfolgreich

bzw. beim Auflösungswechsel

msg[0] = RESCH_COMPLETED
msg[3] = 1 - Auflösungswechsel erfolgreich

Erfolgreich heißt für das System, daß alle Programme, die explizit AP_TERM verstehen, sich beendet haben. Soll der Shutdown trotzdem abgebrochen werden, so kann dies per ret = shel_write(4, FALSE, 0, NULL, NULL) erfolgen. Andernfalls wird der Auflösungswechsel endgültig durchgeführt, wenn sich der Initiator beendet hat. Der Shutdown dagegen wird abgebrochen, wenn der Initiator terminiert.

Hat ein Programm per AP_TFAIL den Shutdown verweigert, so erhält der Initiator die folgende Nachricht.

msg[0] = SHUT_COMPLETED
msg[3] = 0 - Shutdown abgebrochen
msg[4] = ap_id der Applikation, die verweigert hat
msg[5] = Fehlercode dieser Applikation

bzw. beim Auflösungswechsel

msg[0] = RESCH_COMPLETED
msg[3] = 0 - Auflösungswechsel abgebrochen
msg[4] = ap_id der Applikation, die verweigert hat
msg[5] = Fehlercode dieser Applikation

Das System hat in diesem Fall den Shutdown bzw. Auflösungswechsel schon beendet, d.h. der Initiator kann nichts mehr tun.

Hinweis: Weil es vorkommen kann, daß der Shutdown-Prozeß niemals vom System als abgeschlossen oder abgebrochen gemeldet wird (die RESCH_COMPLETED bzw. SHUT_COMPLETED-Nachricht also niemals verschickt wird), sollte der Initiator beim Warten auf die Nachricht einen Timeout vorsehen. Tritt dieser Fall ein, muß der Shutdown explizit abgebrochen werden. Per appl_search kann der Initiator testen, ob noch Programme aktiv sind, die nicht explizit AP_TERM verstehen.

Querverweis:
Shutdown beim Empfänger   shel_write   Shutdown in MultiTOS   Shutdown in MagiC


HomeMagiCSemaphoren in MagiCDer Smart-Redraw in MagiC