next up previous
Nächste Seite: Fazit Aufwärts: Residente Programme Vorherige Seite: und

Resident und Reentrant

Zunächst wollen wir einige Begriffe erklären:

resident
(ansässig) bedeutet, dass ein Programm permanent im Hauptspeicher des Amiga gehalten wird, also nicht bei jedem Programmstart von der Diskette oder Festplatte geladen werden muss. Dadurch wird enorm Zeit gespart und der Diskettenverschleiss vermindert. Durch den CLI-Befehl ,,RESIDENT Name`` wird das Programm ,,Name`` in den Hauptspeicher geladen und in einer systemeigenen Liste vermerkt. Wenn das CLI oder die SHELL dafür eingerichtet ist, kann sie nun bei einem Programmaufruf zunächst in dieser Liste nachsehen und das Programm dann direkt aus dem Speicher starten.

Ein Programm ist genau dann residentfähig, wenn der folgende und weitere Aufrufe zu den gleichen Ergebnissen führen. Es darf also keinesfalls seinen eigenen Code verändern oder von einem bestimmten Inhalt seiner Variablen ausgehen.

reentrant
(wiedereintrittsfähig) ist eine Steigerung von ,,residentfähig``. Ein Programm ist reentrant, wenn es gleichzeitig mehrfach gestartet werden kann. Hierbei wird für die verschiedenen ,,Inkarnationen`` jeweils derselbe, resident im Speicher gehaltene Code ausgeführt, aber die beim Programmlauf veränderlichen Daten (Variablen) müssen bei jedem Aufruf neu angelegt und bei Programmende wieder freigegeben werden. Hierdurch arbeitet jeder so gestartete Prozess mit seinen eigenen Daten, wodurch eine gegenseitige Beeinflussung der Prozesse verhindert wird.

Dies ist nicht zu verwechseln mit wiedereintrittsfähigen Prozeduren (die notwendig werden, wenn ein M2Amiga-Programm eigene Tasks oder Prozesse starten will), wir reden hier nur von Programmen! Um eine einzelne Prozedur reentrant zu kodieren ist unter Umständen weit mehr Denkarbeit erforderlich.

Beide Eigenschaften werden vom Laufzeitsystem Arts unterstützt:

Bei ,,normalen`` und residentfähigen Programmen wird bei jedem Programmstart der Speicher der -Variablen mit Nullen initialisiert. Wenn nur -Variablen im Programm vorhanden sind, ist das Programm folglich residentfähig.

Für Programme, die reentrant sind, wird vom Betriebssystem Speicher angefordert und die initialisierten Daten dort hineinkopiert. Damit ein Programm reentrant sein kann, dürfen einzig Variablen vom Typ vorhanden sein.

Zusätzlich zur Speicher-Allokation überprüft das Laufzeitsystem bei wiedereintrittsfähigen Programmen auch die Grösse des vorhandenen Stapels (Stack). Ist dieser kleiner als eine Mindestgrösse, die beim Linken angegeben werden kann, so wird auch für den Stack ein eigener Speicher reserviert. Deshalb ist es beispielsweise möglich, dass der Compiler, der in Extremfällen 20 KByte und mehr Stack benötigt, auch von einem CLI gestartet werden kann, dessen STACK auf 4000 Byte eingestellt ist.

Da der Schritt von residentfähig nach reentrant relativ klein ist und im fertigen Programm durch ein unterschiedliches Laufzeitsystem lediglich einige Byte kostet, werden wir im folgenden davon ausgehen, dass residentfähige Programme als reentrant gelinkt werden und beide Begriffe synonym verwenden.

Der Programmierer kann sich immer darauf verlassen, dass die globalen Variablen des Programmes mit dem Wert Null initialisiert sind, wenn es seinem Typ entsprechend (nichtresidentfähig, residentfähig, reentrant) eingesetzt wird.


next up previous
Nächste Seite: Fazit Aufwärts: Residente Programme Vorherige Seite: und
Claudio Nieder 2000-11-12