2012-06-20 27 views

Antwort

10

Es ist lange her, seit diese Frage gestellt wurde, aber ich füge nur die Antwort für Archivierungszwecke hinzu.

Lassen Sie uns die folgende Definition einen Blick:

Logical address: Adresse, die durch CPU

Physical address: Adressen, wie durch Speicherverwaltungseinheit (MMU)

Jetzt in compile time binding gesehen nehmen wir an, dass immer ein Speicherbereich zur Verfügung steht (was für das Programm ausreicht) und absoluter Code generiert wird. Also was auch immer Adressen CPU-generiert (wie Pointer-Adressen usw.) sind die gleichen wie was von MMU gesehen wird.

Eine bessere Version der Speicherauslastung ist, die Bindung bis zur Ladezeit zu verzögern, so dass der Speicher nicht vom Programm verwendet wird, das auf der Festplatte sitzt. Dazu wird der Code im verlagerbaren Format generiert. Dies ist load time binding.

Jetzt ist execution time binding ein bisschen anders wo Bindung bis zur Ausführungszeit verzögert ist. In diesem Fall erzeugt die CPU eine Adresse, sagen wir 300, und führt alle Manipulationen an der Adresse 300 aus, aber wenn es einen tatsächlichen Speicherzugriff gibt, wird diese Adresse transformiert, indem der Wert des verschiebbaren Registers, beispielsweise R, an diese Adresse addiert wird. Der logische Adressbereich ist 0-LIM, während der physische Adressraum R-(R+LIM) ist.

Lassen Sie es mich auch mit einem Beispiel erklären, damit es klar wird:

Swapping Überlegen Sie, ob Sie ein Programm mit load time binding getauscht Sie es wieder an die gleiche Stelle wechseln müssen (wie alle Adressen in den Anweisungen waren Wie in dieser Adresse angegeben) können Sie in execution time binding jeden Prozess an einen beliebigen Ort zurückgeben, da Sie nur den Wert im verschiebbaren Register ändern müssen und es wird einfach funktionieren. Daher wird die Speichernutzung erhöht.

+0

Können Sie mir bitte sagen, was ist der Unterschied zwischen Umzug und Bindung? – Zephyr