2012-06-20 3 views

risposta

10

È passato molto tempo da quando è stata posta questa domanda, ma sto solo aggiungendo la risposta ai fini dell'archiviazione.

Diamo uno sguardo alla seguente definizione:

Logical address: Indirizzo generato dalla CPU

Physical address: Indirizzi come si è visto per unità di gestione della memoria (MMU)

Ora in compile time binding assumiamo che sarà sempre disponibile un intervallo di memoria (che è sufficiente per il programma) e verrà generato il codice assoluto. Quindi, qualsiasi cosa indirizzi CPU generati (come gli indirizzi dei puntatori, ecc.) Sono gli stessi di quelli visti da MMU.

Una versione migliore dell'utilizzo della memoria è ritardare il binding fino al tempo di caricamento in modo che la memoria non venga utilizzata dal programma che si trova sul disco. Per questo il codice generato in formato rilocabile. Questo è load time binding.

Ora execution time binding è un po 'diverso dove il binding viene ritardato fino al tempo di esecuzione. In questo caso la CPU genera un indirizzo, diciamo 300, e fa tutte le manipolazioni sull'indirizzo 300 ma ogni volta che c'è un effettivo accesso alla memoria, questo indirizzo viene trasformato aggiungendo il valore del registro rilocabile, diciamo R, a questo indirizzo. Quindi l'intervallo di indirizzi logici è 0-LIM mentre lo spazio degli indirizzi fisico è R-(R+LIM).

Mi spiego anche con un esempio in modo che diventi più chiaro:

Considerate scambiando se scambiato un programma con load time binding è necessario scambiare di nuovo nella stessa posizione (come tutti gli indirizzi nelle istruzioni erano bidden in base a questo indirizzo) mentre in execution time binding è possibile scambiare qualsiasi processo in qualsiasi posto, poiché è sufficiente modificare il valore nel registro rilocabile e funzionerà correttamente. Da qui l'aumento dell'utilizzo della memoria.

+0

Potete dirmi per favore qual è il diverso tra rilocazione e associazione? – Zephyr