|
Verschiebung (Relocation)
Bei der "Zusammenhängenden Einzelzuteilung" entsteht ein Adressierungsproblem für
evtl. mitzuladende Bibliotheksroutinen wenn die Benutzerprogramme unterschiedlich lang sind, denn dann kommen diese Bibliotheksprogramme an unterschiedlichen Adressen zu liegen. Eine mögliche Lösung ist ein eigener fester Bereich für diese Routinen, was jedoch dazu führt, daß der Speicher zerstückelt wird und damit unnötig viel nicht genutzter Speicher entsteht.Die flexiblere Lösung besteht darin, die Bibliotheksroutinen so aufzubereiten, daß die Festlegung der von ihnen benötigten Speicherplätze bis zum Ladezeitpunkt aufgeschoben werden kann. Man benötigt dazu einen "verschiebenden Lader" (Relocating Loader), der dann auch gleich zum Laden der Benutzerprogramme
verwendet werden kann.
Die Aufbereitung der Programme besteht darin, die Adreßteile der Maschinenberfehle
als absolute bzw. relative Adressen zu kennzeichnen. Somit besteht die Aufgabe des
verschiebenden Laders darin, zu den relativen Adressangaben nur noch einen konstanten
Offset zu addieren (die Lade-Startadresse des Programms) und diese nun absolute
Adressangabe abzuspeichern; Voraussetzung ist natürlich, daß die Programme so
geschrieben sind, als würden sie ab Adresse Null im Speicher zu liegen kommen.
Es wird also zum Ladezeitpunkt jede relative Adresse in eine absolute umgeformt,
wodurch der Ladvorgang mehr Zeit in Anspruch nimmt. Das geladene Programm kann nicht
mehr verschoben werden, wenn es sich im Hauptspeicher befindet.
Eine weitere Steigerung der Flexibilität ist dann gegeben, wenn die Umsetzung in
effektive Adressen nicht zum Ladezeitpunkt, sondern erst unmittelbar bei Ausführung
des Befehls vorgenommen wird. Voraussetzung dafür ist ein Prozessor, der entsprechende
Adressierungsarten der Befehle erlaubt. Dazu muß ein Adreßrechenwerk im Prozessor
vorhanden sein, das entweder den Inhalt eines Basisadressregisters (geladen durch
das Ladeprogramm; "basisregister-relative Adressierung") oder den Inhalt des
Program-Counters addiert ("position independent code", "relocatible code" durch
"PC-relative Adressierung"). Die Adressangaben bei den Befehlen werden also nicht
mehr vom Lader modifiziert, der Ladevorgang läuft wesentlich schneller ab. Das
Programm kann nach dem Laden noch verschoben werden.
|
|
|