Ogni processo che deve essere eseguito da un sistema di elaborazione, deve essere caricato e risiedere almeno parzialmente nella memoria centrale Durante lo scheduling della CPU, essa viene associata ciclicamente a più processi. Per essere efficiente il sistema di elaborazione, i processi devono risiedere contemporaneamente in memoria centrale È compito opportuno di un modulo di gestire la memoria centrale
Le problematiche relative alla gestione della memoria sono le seguenti: Differente velocità di accesso della CPU ai propri registri interni o all’esecuzione di una istruzione. Ciò provoca un rallentamento del processore. L’utilizzo di una memoria cache rende più veloce l’accesso ai dati Più processi possono invadere la memoria dedicata a processi di sistemi o ad altri; il sistema operativo gestisce gli spazi affinchè ciò non avvenga Nel corso di esecuzione un processo può essere spostato dalla memoria centrale ad una memoria di massa. Il sistema operativo deve fare in modo che il processo possa comunque avanzare
Lo swapping è una operazione di caricamento e scaricamento di un processo Avviene quando nella memoria centrale ci sono troppi processi in coda Alcuni processi vengono caricati in una memoria ausiliaria Gli scheduler che decidono di portare a termine un processo nella memoria ausiliaria, affidano al dispatcher il compito di reperire i processi interessati. Il dispatcer però cerca i processi prima tra i pronti e poi, nella memoria ausiliaria
Gli indirizzi simbolici sono quelli cui fanno riferimento le applicazioni e sono generalmente indici, contatori, etichette Gli indirizzi rilocabili sono gli indirizzi di partenza delle applicazioni ma non si riferiscono alla collocazione assoluta in memoria. Gli indirizzi assoluti vengono generarti in fase di caricamento del processo o di compilazione o, come nella maggior parte dei sistemi operativi, in fase di esecuzione Gli indirizzi logici sono quelli generati da un programma. L’insieme degli indirizzi logici è detto spazio degli indirizzi logici Gli indirizzi fisici sono la locazione fisica vera e propria di un programma all’interno della memoria. L’insieme degli indirizzi fisici è detto spazio degli indirizzi fisici Ad ogni indirizzo logico, viene attribuito un indirizzo fisico, sommando l’indirizzo logico con l’indirizzo di locazione
Con l’avvento del multitasking più processi possono essere caricati contemporaneamente e la memoria deve essere ripartita. Le partizioni non sono tutte della stessa dimensione; l’estensione viene stabilita a priori Appena si libera una partizione, viene selezionato un nuovo processo Un processo va ad occupare solo la porzione di memoria che realmente gli occorre. Se avanzano degli spazi di memoria si creano dei buchi. Il sistema operativo mette a disposizione una tabella di partizioni fisse. Partizione variabile :è una tecnica più moderna della precedente; il frazionamento della memoria viene stabilito volta per volta dal sistema operativo. Le dimensioni delle partizioni non sono fisse ma vengono stabilite volta per volta.
Si assegna al primo processo la prima area libera sufficientemente grande da contenerlo; al secondo processo la seconda area libera sempre sufficientemente grande da contenerlo e così via. Sia allora la seguente tabella dei processi con le rispettive dimensioni e la tabella delle partizioni di memoria: Le assegnazioni sono le seguenti: Processidimensioni P1250 kB P2400 kB P3150 kB P450 kB P5125 kB Areedimensioni A200 kB B140 kB C250 kB D500 kB E450 kB processiAree P1C P2D P3A P4B P5E
Per migliorare la tecnica precedente, si associa ad ogni processo l’area di memoria più piccola ma sufficientemente grande da contenere ogni processo. Si ordina allora la tabella della memoria per ordine crescente. In base all’esempio precedente, la tabella dei processi e delle aree di memoria sarà la seguente : ProcessiAree P1C P2E P3A P4B P5D
Con tale tecnica si associa ai processi l’area più grande possibile. Si ordina la tabella per ordine decrescente e, la relazione tra processi e aree di memoria sarà: ProcessiAree P1D P2E P3C P4A P5B
In ognuno dei metodi precedenti lascia delle aree di memoria libere dando vita alla frammentazione esterna Riordinando le aree di memoria e riunendole insieme, si effettua la compattazione rendendo i residui aree disponibili.
Metodo molto efficace utilizzato nei s.o. per la gestione della memoria Consiste nel dividere lo spazio logico del processo in parti uguali detti pagine; la memoria fisica viene divisa in parti della stessa dimensione delle pagine e sono detti frame Ogni pagina viene posta in un frame Le pagine non occupano spazi adiacenti di memoria per cui, c’è bisogno di una tabella delle pagine
Memoria logica Pag. 0 Pag. 1 Pag. 2 Pag. 3 Pag.Frame Mem fisica Il numero di frame in cui può essere divisa una memoria è dato da dimensione memoria/dimensione pagina
Lo spazio logico di un processo viene diviso in un numero m di pagine di k byte ciascuna Lo spazio fisico della memori viene diviso in n frame di k1 byte La tabella delle pagine mette in relazione il numero di pagine con il numero di frame Es nella gestione della memoria in DOS, si effettua la divisione in quattro segmenti: segmento codice, segmento dati, segmento stack e segmento extra All’interno di un segmento si può accedere indicando lo scostamento, cioè la distanza dall’inizio Ogni indirizzo logico è quindi individuato dal nome del segmento s dallo scostamento d
Un programma può essere suddiviso in procedure e funzioni Lo spazio logico può essere diviso in segmenti ognuno dei quali contiene un modulo o una struttura dati diversi
Un processo per essere eseguito può risiedere in memoria centrale ma anche in memoria di massa Quando i programmi sono molto ampi possono prevedere una parte del codice utilizzato raramente Conviene allora non caricare tutto il codice in memoria ma solo in parte. Risulta più utile caricare solo il codice che serve La memoria di massa e quella centrale sono viste come un’unica memoria detta virtuale e lo spazio degli indirizzi è detto spazio degli indirizzi virtuali
Tecnica che permette di caricare in memoria centrale solo le pagine necessarie e le altre le altre in memoria di massa Il paginatore è un modulo del sistema operativo che carica le pagine utili nella memoria centrale