Document Details

SteadyBoltzmann

Uploaded by SteadyBoltzmann

Università di Torino

Tags

gestione della memoria sistemi operativi memoria primaria informatica

Summary

Questi appunti riguardano la gestione della memoria in un sistema operativo. Vengono discussi concetti come la memoria centrale, la memoria virtuale, e le tecniche di binding degli indirizzi. Il testo è strutturato come un documento di presentazione o appunti di lezione.

Full Transcript

1 Parte IV: Gestione della Memoria Memoria Centrale (cap. 9) Memoria Virtuale (cap. 10) 2 9 Memoria Centrale ( gestione della…) Introduzione Binding degli indirizzi Spazio degli indirizzi logici e fisici Allocazione contigua de...

1 Parte IV: Gestione della Memoria Memoria Centrale (cap. 9) Memoria Virtuale (cap. 10) 2 9 Memoria Centrale ( gestione della…) Introduzione Binding degli indirizzi Spazio degli indirizzi logici e fisici Allocazione contigua dei processi in RAM Paginazione della memoria primaria 3 Introduzione Abbiamo visto che i moderni SO tentano di massimizzare l’uso delle risorse della macchina, e in primo luogo l’utilizzo della CPU. Questo si ottiene mediante le due tecniche fondamentali del multi-tasking e del time-sharing, che richiedono di tenere in memoria primaria contemporaneamente più processi attivi. Il SO deve decidere come allocare lo spazio di RAM tra i processi attivi, in modo che ciascun processo sia pronto per sfruttare la CPU quando gli viene assegnata. 4 Introduzione Supponiamo però che, ad un certo punto, la RAM sia completamente occupata da 3 processi utente, P1, P2 , P3 (per semplicità assumiamo che a tutti i processi venga assegnata una porzione di RAM della stessa dimensione). Un nuovo processo P4 viene fatto partire, è immediatamente pronto per usare la CPU, ma non c’è più spazio per caricare il suo codice in RAM, che si può fare? Ovviamente si potrebbe aspettare la terminazione di uno dei 3 processi già in RAM, ma supponiamo che uno dei tre processi (diciamo P2) sia temporaneamente in attesa di compiere una lunga operazione di I/O (per cui non userà la CPU a breve) 5 Introduzione Il SO potrebbe decidere di spostare temporaneamente P2 sull’hard disk per far posto a P4, che così può concorrere all’uso della CPU. Che cosa viene spostato sull’hard disk? l’immagine di P2: il codice (anche se, come capiremo meglio più avanti, questo si può anche evitare), i dati e lo stack del processo Dopo un po’ P1 termina e libera una porzione di RAM. Il SO potrebbe riportare P2 in RAM (ma ora nello spazio che era stato inizialmente assegnato a P1) Questa tecnica viene chiamata swapping (avvicendamento di processi). L’area del disco in cui il SO copia temporaneamente un processo viene detta area di swap. Introduzione 6 RAM RAM RAM SO SO SO P2 P1 P1 P2 P2 P4 P4 P4 P3 P3 P3 (fig. 9.19 modificata) Lo Swapping è raramente usato nei moderni sistemi operativi perché troppo inefficiente, ma l’esempio mette in luce un problema fondamentale nella gestione della memoria primaria: P2 contiene istruzioni che usano indirizzi di memoria primaria: funziona ancora correttamente quando viene spostato da un’area di RAM ad un’altra? Introduzione 7 Perché un programma possa essere eseguito, il suo codice deve trovarsi in memoria primaria (ma rivedremo questa affermazione quando parleremo della memoria virtuale) Quindi, quando il SO riceve il comando di esecuzione di un programma, deve recuperare il codice del programma dalla memoria secondaria, e decidere in quale porzione della memoria primaria sistemarlo. RAM ossia, a partire da quale 0000 indirizzo di RAM. P La cosa non è banale, 7FFF infatti... P FFFF 9.1.2 Binding (associazione) 8 degli indirizzi Un programma sorgente usa (tra l’altro) dati (variabili) e istruzioni di controllo del flusso di computazione. Quando il programma viene compilato e caricato in Memoria Primaria (MP) per essere eseguito, ad ogni variabile è associato l’indirizzo di una locazione di memoria che ne contiene il valore. Alle istruzioni di controllo del flusso di esecuzione del programma (ossia i salti condizionati e incondizionati) è associato l’indirizzo di destinazione del salto. L’operazione di associazione di variabili e istruzioni agli indirizzi di memoria è detta binding degli indirizzi 9 9.1.2 Binding degli indirizzi In altre parole, ad ogni variabile dichiarata nel programma viene fatto corrispondere l’indirizzo di una cella di memoria di RAM in cui verrà memorizzato il valore di quella variabile. L’accesso alla variabile, in lettura e scrittura, corrisponde alla lettura e scrittura della cella di memoria il cui indirizzo è stato “legato” (con l’operazione di binding) alla variabile. Le istruzioni di salto, che permettono di implementare costrutti come if-then-else, while, ecc. Sono associate agli indirizzi in RAM dove si trova l’istruzione con cui prosegue l’esecuzione del programma se il salto viene eseguito. 10 9.1.2 Binding degli indirizzi Ad esempio, un istruzione C come: counter = counter + 1; alla fine diventerà qualcosa del tipo: load(R1, 10456) Add(R1, #1); store(R1, 10456) 10456 è l’indirizzo della cella di memoria che contiene il valore della variabile “counter”. L’indirizzo 10456 è stato associato alla variabile “counter” durante la fase di binding degli indirizzi. 11 9.1.2 Binding degli indirizzi Analogamente, un istruzione C come: while (counter

Use Quizgecko on...
Browser
Browser