LA GESTIONE DELLA MEMORIA
La memoria centrale (RAM, acronimo di Random Acess Memory) è una risorsa
importante per i calcolatori moderni che deve essere gestita al meglio, anche
se rispetto al passato la sua dimensione oggi è molto aumentata.
MEMORIA CENTRALE
La memoria centrale è sempre stata una risorsa limitata:
• I izio a i : k
• I izio a i :
• Inizio anni 2000: 125mb
• Attualmente: 8gb
I TIPI DI MEMORIA
Nel calcolatore sono presenti diversi tipi di memoria,
classificati in base alle loro caratteristiche fondamentali, cioè velocità e capacità.
• Nastro: molto capiente, magnetico, sequenziale(memoria di back-up)
• disco: capiente, lento, non volatile ed economico (memoria secondaria)
• Memoria principale: volatile, mediamente grande, veloce e costosa
• Cache: volatile, veloce, piccola e costosa
• ‘egist i: all i te o del p o esso e, est e a e te velo i e ridotti ad alcuni byte
COME FUNZIONA
La memoria centrale consiste in un ampio vettore di parole di memoria, ognuna delle quali ha un
proprio indirizzo: la CPU preleva istruzioni
direttamente da essa per caricarli poi nei propri egist i, i pa ti ola e a i a l ist uzio e p ese te nella posizione indicata dal program counter.
Ogni istruzione a sua volta genera nuovi accessi alla e o ia e ui di l evoluzio e di u p og a a è un susseguirsi di caricamenti(load) e
archiviazioni(store) di istruzioni e dati.
CARICAMENTO DEL PROGRAMMA
Il programma eseguibile, in formato binario, risiede in un file su una memoria permanente, tipicamente un hard disk. (memoria secondaria)
Il problema fondamentale che il gestore della memoria deve risolvere è trasformare il programma eseguibile in un processo in esecuzione.
I programmi che stanno per diventare processi vengono messi in una coda di entrata, dalla quale ne verrà
selezionato uno (o più) da caricare da parte del loader e quindi da collocare nella lista dei processi pronti.
ASSEGNAZIONE DEGLI INDIRIZZI
Durante la generazione del file eseguibile il compilatore ed il linker ge e a o all i te o del programma dei collegamenti tra istruzioni e indirizzi senza sapere dove il programma o i dati saranno caricati in memoria. Inoltre è
anche molto improbabile che un programma venga caricato a partire dalla stessa cella di memoria in esecuzioni diverse sullo stesso calcolatore o su due macchine differenti.
Lasseg azio e degli i di izzi è ui di
incompleta: vengono cioè generati degli
i di izzi elativi i di izzo logi o e all atto del caricamento vero e proprio questi vengono
trasformati in indirizzi assoluti(indirizzo fisico).
Un codice con tali caratteristiche si chiama codice rilocabile.
MEMORY MANAGMENT UNIT
La MMU può avere vari compiti tra cui la traslazione (o traduzione) degli indirizzi logici e simbolici in indirizzi fisici (necessaria per la gestione della memoria virtuale), la protezione della memoria, il controllo della cache della CPU, l'arbitraggio del bus, e, in architetture più semplici (specialmente nei sistemi a 8-bit), la commutazione di banchi di memoria.
Le MMU moderne generalmente suddividono lo spazio degli indirizzi virtuali
(l'intervallo di indirizzi accessibili dal processore) in pagine di memoria dimensione 2N, tipicamente pochi kilobytes.
Gli N it e o sig ifi ativi dell'i di izzo l offset all'interno della pagina) rimangono invariati, mentre i bit restanti rappresentano il numero virtuale della pagina.
La MMU contiene una tabella delle pagine indicizzata (possibilmente associativamente) dal numero della pagina.
Ogni elemento di questa tabella (detto PTE o Page Table Entry) restituisce il numero fisico della pagina corrispondente a quello virtuale, che, combinato con
l'offset della pagina, forma l'indirizzo fisico completo. Un PTE può includere anche informazioni su quando la pagina è stata usata per l'ultima volta (per l'algoritmo di sostituzione LRU), quale tipo di processi (utente o supervisore) può leggerla e
scriverla, e se deve essere inserita nella cache.
ADDRESS BINDING
l binding è il processo tramite cui viene effettuato il collegamento fra una entità di un software ed il suo corrispettivo valore.
Nei termini della programmazione a oggetti, la decisione circa l'attributo o il metodo da richiamare in un dato momento dell'esecuzione del programma viene
effettuata grazie al binding.
Tale decisione può essere stata stabilita in anticipo in maniera fissa, e in tal caso si parla di binding
statico (o early binding); oppure può essere presa a tempo di esecuzione, in maniera dinamica, e in tal caso si parla di binding dinamico (o late binding).
ALLOCAZIONE DELLA MEMORIA
Il sistema più semplice per allocare la memoria centrale nei sistemi multiprogrammati è
quello di suddivederla in partizioni e
assegnare una partizione a un processo
indipendentemente dalla sua dimensione,
partendo dalla prima (che viene generalmente riservata al sistema operativo) e cercando di riempire costantemente tutte le partizioni.
PARTIZIONE FISSA
Nello schema a partizione fissa la dimensione della pa tizio e vie e defi ita all atto
dell i izializzazio e del siste a, ui di
staticamente, e viene creata una tabella dove si memorizza lo stato delle partizioni,
indicando quali sono libere e quali occupate.
PARTIZIONE VARIABILE
Scherma a partizione variabile: in questo caso è possibile modificare dinamicamente sia il
numero sia la dimensione di ogni singola partizione, per esempio unendo blocchi contigui precedentemente distinti o
suddividendone uno particolarmente
sovradimensionato, a seconda delle richieste di spazio all atto del a i a e to dei p o essi.
LA PAGINAZIONE
La paginazione è un metodo per risolvere i problemi elencati fin ora.
La paginazione si pone diversi obbiettivi:
• Mantenere in memoria solo le parti necessarie
• Gestire ogni volta solo piccole porzioni di memoria
• Non sprecare spazio evitando la frammentazione
• Poter utilizzare porzioni di memoria non contigue per lo stesso programma
• Non porre vincoli al programmatore (come nella overlay)
Nella paginazione sia il programma sia la memoria centrale vengono suddivisi in pagine di dimensione fissa:
• La memoria fisica in blocchi chiamati frame o pagine fisiche
• Il programma in blocchi di uguale dimensione detti pagine(o pagine logiche)
PAGE FAULT
Se du a te l ese uzio e di u programam viene fatto ife i e to a u ist uzio e , he o è
presente in alcuna pagina tra quelle caricate in e o ia, la MMU dete i a u e ezio e della CPU al SO detta page fault: il SO quindi deve
provvedere a caricare quella pagina:
• Se sono presenti in memoria frame liberi, la pagina viene caricata immediatamente
• Se tutte le pagine fisiche sono occupate invece bisogna fare spazio, cioè scegliere un frame poco utilizzato.
LA MESSA E FINITA
• ANDATE IN PACE
• ANDATE IN PACE
• ANDATE IN PACE
• ANDATE IN PACE
• FORZA NAPOLI