Torna alla pagina di Sistemi Operativi
:: Appunti caotici ::
Lezione 3
Tecniche di allocazione dei frame
Pag 1
Sommario
...
Pag 2
Problema
Il numero di frame allocati ad un processo influenza la frequenza di page fault: maggiore è il numero di frame e minore e l'occorrenza, quindi minore è anche il tempo di accesso medio alla memoria centrale (dato dal tempo fisico di accesso alla RAM più il tempo di gestione di eventuali page fault).
Va ricordato però che non ho mai la garanzia di non avere page fault. Ad esempio se anche avessi dedicato tutta la memoria centrale a un solo processo, potrei averne comunque nel caso in cui lo spazio di indirizzamento del processo fosse maggiore della memoria stessa.
Allora quanti frame dovrei allocare a ciascun processo per avere una situazione ottimale? Uguale al numero di pagine? Variabile a seconda del processo?
Vincoli per l'allocazione dei frame
Nella scelta del numero di frame da allocare ho alcuni vincoli da tenere in considerazione:
- numero minimo di frame per ogni processo (codice + dati) da assicurare, o rischiamo di non far partire decentemente i processi rallentandoli eccessivamente con page fault. Dipende dall'architettura e dalla tecnica di gestione (paginazione/segmentazione/combo)
- frame disponibili. Dipendono dalla memoria centrale fisica installata
- frame allocati, il cui numero permette di calcolare quanto risparmio nel caso in cui condividessi alcuni frame tra diversi processi.
- insieme dei frame da cui effettuare l'allocazione. Distinguo due casi: allocazione globale che considera tutti i frame liberi come assegnabili a qualsiasi processo, e allocazione locale che prima suddivide i frame tra i vari processi e poi fa la valutazione in base a quelli assegnati
Pag 3
Allocazione omogenea
Nell' allocazione omogenea ognuno degli n processi ha la stessa quantità fi di frame allocati sugli m frame totali. Vale quindi la relazione: fi = m / n
Aumentare troppo il grado di multiprogrammazione rischia di assegnare un numero limitato di frame per ogni processo, aumentando di conseguenza il fenomeno dei page fault con beghe annesse. Dovrei quindi limitare il numero dei processi in memoria centrale, col rischio però di avere pochi processi ready to run e quindi sfruttare poco il processore. Bisogna bilanciare.
Generalmente si cerca di mantenere alto lo stato di multiprogrammazione in maniera oculata, evitando ad esempio di considerare quei processi in attesa che presumo vi rimangano per un tempo abbastanza lungo.
L' allocazione omogenea è una tecnica semplice ma non soddisfacente in alcuni casi, principalmente due:
- abbiamo una grossa quantità di memoria centrale occupata da un processo che deve accedere spesso a grosse strutture dati. Dargli poche pagine aumenta la frequenza dei page fault
- abbiamo un processo che non ha bisogno di molti dati, ma che ha numerose porzioni di codice a cui deve accedere spesso
Una soluzione piuttosto semplicistica potrebbe essere l'allocazione proporzionale alla dimensione, che vediamo nella prossima slide.
Allocazione proporzionale alla dimensione
Nell' allocazione proporzionale alla dimensione il numero di frame allocati a un processo è proporzionale alla dimensione del processo. Tiene abbastanza ben conto delle necessità dei processi nella maggior parte dei casi, e presume che processi grandi accedano a un maggior numero di frame nell'intervallo di tempo.
Se ho un processo molto localizzato che accede sempre a una certa zona di memoria centrale in un dato intervallo di tempo, basterebbe assegnargli come dimensione quella della porzione stessa. Se invece ho un processo che si sposta molto (ovvero non accede ai dati in modo continuo, omogeneo, fluente), il numero dei page fault potrebbe aumentare. In questo caso è difficile stabilire a priori quanto il processo è dinamico nel muoversi nello spazio di indirizzamento, quindi è arduo scegliere la dimensione ideale da assegnargli.
Pag 4
Allocazione proporzionale alla priorità
Finora si è sempre supposto che tutti i processi abbiano la stessa importanza, e che quindi si voglia che evolvino con la stessa velocità. Nell' allocazione proporzionale alla priorità il numero di frame allocati a un processo è invece proporzionale alla priorità del processo stesso. Ciò diminuisce il numero di page fault (e quindi il tempo medio di accesso alla memoria centrale) dando ai processi più importanti un maggior numero di frame.
Se chiamiamo m i frame totali, pi le priorità del processo Pi e fi i frame allocati al processo Pi, se siamo in logica positiva (l'opposto di Unix) avremo che:
fi = m x pi / (Sommatoria)pi
Questo valore non ha alcun significato dal punto di vista delle priorità, ma è una formula semplice per ottenere una verosimile distribuzione delle priorità.
Torna alla pagina di Sistemi Operativi