Torna alla pagina di Sistemi Operativi
:: Appunti caotici ::
Lezione 1
Paginazione
Pag 1
Sommario
...
Pag 2
Problemi
...
Obiettivi (1)
...
Pag 3
Obiettivi (2)
Efficienza di gestione: possibile non contiguità delle porzioni di un processo nella memoria centrale fisica, così che non devo per forza spostare porzioni di memoria da una parte all'altra.
Correttezza, sicurezza ed equità: gestione indipendente dal programmatore e dal gestore del sistema.
Paginazione (1)
La memoria centrale fisica viene divisa in pagine fisiche (frame).
Lo spazio di indirizzamento del processo viene diviso in pagine logiche (pagine).
Pagine logiche e fisiche hanno la stessa dimensione, ed è questa proprietà che consente una gestione efficiente.
Pag 4
Paginazione (2)
La tabella delle pagine di un processo definisce la corrispondenza tra pagine logiche e fisiche del processo considerato. In questo modo si tiene traccia di dove si trovano le pagine logiche del processo in memoria centrale.
!!Paginazione (3)
...
Pag 5
Gestione della paginazione (1)
...
Gestione della paginazione (2)
...
Pag 6
Gestione della paginazione (3)
Si ha un page fault quando la pagina richiesta non è caricata nello swap, ed è quindi necessario caricarla dalla memoria centrale. Quest'operazione non si può fare a mano, e viene per questo affidato il compito alla MMU.
Supporto hardware: MMU
L'hardware dedicato per il supporto alla paginazione è la Memory Management Unit, che contiene la tabella delle pagine o il suo indirizzo in memoria centrale e traduce l'indirizzo logico in indirizzo fisico.
Nella fase di context switching, una delle preoccupazioni del sistema operativo dovrà essere predisporre l'ambiente in cui il processo lavorerà, quindi anche configurare la MMU in modo che possa tradurre gli indirizzi in modo adeguato.
Pag 7
Come gestire grandi tabelle delle pagine?
All'aumentare delle dimensioni delle tabelle delle pagine diventerebbe troppo pesante caricarle nella MMU. E' anche vero però che lasciandole in memoria centrale dovrei ogni volta effettuarvi un accesso, perdendo tempo di computazione. Come fare? Ho diverse tecniche:
- memoria ausiliaria di traduzione
- tabella gerarchica delle pagine
- tabella delle pagine con hashing
- tabella invertita delle pagine
Memoria ausiliaria di traduzione
La memoria ausiliaria di traduzione mantiene un elenco delle pagine più usate di recente, che usa per effettuare poi la traduzione. E' anche detta translation look-aside-buffer ed è gestita direttamente in hardware con una memoria associativa, che non cerca per indirizzi ma per valore contenuto. Se tale memoria non contiene informazioni sull'area di memoria richiesta (TLB miss), allora sono costretto a caricarmela dalla memoria centrale, liberando spazio togliendo l'informazione che vi risiede da più tempo (la più obsoleta).
Con la translation look-aside buffer cambia l'approccio di rappresentazione degli indirizzi: nella tabella scrivo direttamente la coppia di indrizzi della pagina e del frame. Se quindi in una riga trovo la pagina desiderata, nella stessa riga trovo anche il corrispondente numero del frame.
Pag 8
Tabella gerarchica delle pagine (1)
Si divide la tabella delle pagine in più porzioni di uguale dimensione e si carica nella MMU solo gli indirizzi delle porzioni stesse.
Tabella gerarchica delle pagine (2)
...
Pag 9
Tabella delle pagine con hashing
La funzione di hashing comprime l'indirizzo logico p riducendone il numero di bit e generando un valore che metterà nella tabella di hashing. Detta tabella è ovviamente più piccola di quella di partenza.
Tabella invertita delle pagine (1)
Ribalta il punto di vista: fornisce l'identificatore del processo e il numero di pagina logica caricata in una pagina fisica.
TabellaInversaPagine [PaginaFisica] = Processo, PaginaLogica
Se non viene trovata la pagina logica significa che non è mai stata caricata in memoria centrale.
Pag 10
Tabella inverita delle pagine (2)
Nello schema:
- pid è l'identificativo del processo.
- p è la pagina logica
- d è lo spiazzamento
Protezione delle pagine
Può essere di due tipi:
- implicita, che garantisce l'inviolabilità tra spazi di indirizzamento ma non interviene al suo interno; quindi se ad esempio scrivo male il programma posso comunque fare un casino. La protezione dagli accessi di altri processi è implicita nella tabella delle pagine, anche in quella invertita dal momento che è la MMU e il sistema operativo che garantiscono che la ricerca avvenga con la coppia di "coordinate"
pid, p
- esplicita, che fa uso di bit di protezione che verificano la correttezza delle modalità di esecuzione dei programmi, ad esempio definendo pagine cui è possibile l'accesso in lettura/scrittura (dati), o sola lettura (costanti) o sola esecuzione (porzioni di codice). Se coi bit di protezione viene rilevato che un programma non rispetta i suoi permessi, questo viene immediatamente abortito sollevando un errore di programmazione
Pag 11
Condivisione delle pagine
Se ho più processi che vogliono utilizzare lo stesso codice (quindi marcabile con il bit di sola esecuzione), posso caricarlo una volta sola in memoria centrale, risparmiando spazio e garantendo comunque la consistenza e la correttezza delle informazioni. Quindi IMPORRE una protezione in sola esecuzione su alcune pagine permette la condivisione delle porzioni di memoria, che rimangono comunque sempre virtualmente disgiunte. Questo sistema è un modo più sofisticato per garantire la non interferenza tra l'evoluzione della computazione dei processi.
In sintesi
Notiamo che la paginazione:
- crea spazio logico più grande dello spazio fisico (visto teoricamente grosso quanto lo spazio di indirizzamento del processo) assegnato ad un processo nella memoria centrale fisica
- è gestito automaticamente dal sistema operativo
- è efficiente poiché sposta piccole porzioni di memoria
Torna alla pagina di Sistemi Operativi