Address Binding
Quando si scrive codice non ci si interessa direttamente di cosa succede a livello di memoria.
Le implementazioni dell'address binding possono essere nelle seguenti modalità:
- Compile time
Se si conosce a priori, in fase di compilazione, la locazione che dovrà avere la memoria, è possibile generare un codice assoluto. Nel caso in cui gli indirizzi di partenza cambino è necessario ricompilare.
- Load time
In questo caso la memoria non è conosciuta quando si compila e bisogna generare codice rilocabile.
- Execution time
Qui la memoria viene definita solo all'esecuzione e può essere spostata da un segmento di memoria a un altro. In questo caso necessitiamo di un supporto hardware che consenta di mappare indirizzi.
Il concetto di uno spazio di indirizzi logici, che è limitato a uno spazio di indirizzi fisici, è centrale nella gestione della memoria.
Gli indirizzi fisici sono visti dall'unità di memoria.
Gli indirizzi logici sono generati dalla CPU e si riferiscono anche all'indirizzo virtuale.
Quando l'address binding viene fatto in execution time allora gli indirizzi vengono fissati dalla CPU istruzione per istruzione.
La differenza tra logico e fisico è soltanto in execution time, poiché l'istruzione in memoria ha un indirizzo assoluto, ma è relativo al punto in cui è presente l'istruzione nel codice.
(Memory-Management Unit)
La MMU è l'unità che si occupa in maniera diretta del processo di binding tra indirizzo fisico e indirizzo logico.
Estremamente veloce istruzione per istruzione, a ogni colpo di clock viene fatto almeno un address binding.
Ai bits relativi all'indirizzo vengono sommati dalla MMU e viene assegnato poi alla posizione assoluta.
L'utente non si deve mai occupare della memoria.
E' il dispositivo hardware che sta a runtime, che agli indirizzi virtuali, deve mappare quelli fisici.
Dynamic Linking
Si usa in quasi i tutti i programmi moderni, perché i SO moderni contengono molte librerie condivise
All'interno del codice vengono inserite delle piccole stub(routine) e al posto del codice per l'apertura di un file jpeg, ad esempio, vengono richiamate le libreria di sistema.
Un programma quindi sarà composto da vari moduli già caricati in memoria che verranno richiamati dal nucleo del programma.
Questo prevede che uno stesso programma sia composto da un blocco principale che è il nostro e da altri blocchi che sono le librerie di sistema.
Swapping
Un processo può essere swappato temporaneamente fuori dalla memoria al backing store e poi viene riporto indietro in memoria per continuare l'esecuzione...
I sistemi operativi moderni usano lo swapping quando la memoria è molto piena.
Il backing store è un disco veloce e abbastanza grande da contenere copie di tutte le immagini della memoria per tutti gli utenti e deve fornirne accesso diretto
Per quanto riguarda i sistemi mobili tipicamente non ci sono meccanismi di Roll out, roll in.
Nessun commento:
Posta un commento