Perché un programma possa essere eseguito, il suo codice eseguibile deve trovarsi in memoria primaria. Tuttavia, il sistema operativo può decidere di spostare temporaneamente un processo presente nel sistema (non in esecuzione), in Memoria Secondaria (MS), se deve fare spazio in Memoria Primaria (MP). I processi spostati in MS, attendono su una coda di ingresso, di essere rispostati in MP, prima di poter di nuovo usare la CPU. Viene quindi copiato in MS l’area di MP che “contiene” il processo: il codice, i dati, lo stack.
Quando il programma viene compilato e caricato in MP per essere eseguito, ad ogni variabile è associata una locazione di memoria che ne contiene il valore, e alle istruzioni di controllo è associato un indirizzo. Questa associazione di variabili e istruzioni a indirizzi di memoria è detta binding:
variabili: indirizzi di RAM che ne contengono il valore
istruzioni di salto (if-then-else, while, ecc.): indirizzi in RAM
In fase di compilazione viene generato del codice assoluto. Il compilatore deve conoscere l’indirizzo della locazione di MP a partire dal quale verrà caricato il programma. Se il SO deve scaricare temporaneamente il processo corrispondente in MS, quando lo ricarica deve rimetterlo esattamente a partire dalla stessa locazione di memoria. Questa gestione è ovviamente poco flessibile. In fase di caricamento in RAM (loading) viene invece generato codice staticamente rilocabile. Gli indirizzi assoluti finali vengono generati in fase di caricamento del codice in MP in base all’indirizzo di MP a partire dal quale è caricato il codice. In fase di esecuzione (binding dinamico) viene generato codice dinamicamente rilocabile. Il codice in esecuzione usa sempre e solo indirizzi relativi e la trasformazione di un indirizzo relativo detto anche logico o virtuale in uno assoluto (fisico, indirizzo sulla RAM) viene fatta nell’istante in cui viene eseguita l’istruzione che usa quell’indirizzo. Un opportuno registro di rilocazione viene usato per trasformare un indirizzo logico nel corrispondente indirizzo fisico. Il registro di rilocazione contiene l’indirizzo di partenza dell’area di RAM in cui è caricato il programma in esecuzione. Si occuperà di trasformare gli indirizzi logici in fisici, usando il registro di rilocazione un apposito dispositivo detto memory management Unit MMU.
Per spostare i programmi da un’area di RAM ad un’altra, basta cambiare l’indirizzo scritto nel registro di rilocazione. Lo spostamento del processo da un area all’altra della MP è realizzabile senza problema. Il SO deve solo ricordarsi dell’indirizzo della locazione di MP a partire dalla quale è memorizzato il processo. Questo è l’approccio adottato nella maggior parte dei SO moderni. Vedremo ora alcune tecniche di gestione della MP, dalle più semplici alle più complesse. Alcune di queste non sono più in uso (o quasi), ma ci permettono di capire concetti complessi a partire da idee semplici:
Tutto quanto riportato in questa pagina è a puro scopo informativo personale. Se non ti trovi in accordo con quanto riportato nella pagina, vuoi fare delle precisazioni, vuoi fare delle aggiunte o hai delle proposte e dei consigli da dare, puoi farlo mandando un email. Ogni indicazione è fondamentale per la continua crescita del sito.