Index
- Paginazione (semplice)
- Segmentazione (semplice)
- [[#Segmentazione (semplice)#Indirizzi Logici|Indirizzi Logici]]
Paginazione (semplice)
La paginazione semplice in quanto tale non è stata sostanzialmente mai usata, ma è importante a livello concettuale per introdurre la memoria virtuale. Con la paginazione sia la memoria che i processi vengono “spacchettati” in pezzetti di dimensione uguale. Ogni pezzetto del processo è chiamato pagina, mentre i pezzetti di memoria sono chiamati frame. Ogni pagina, per essere usata, deve essere collocata in un frame ma pagine contigue di un processo possono essere messe in un qualunque frame (anche distanti)
I SO che la adottano però devono mantenere una tabella delle pagine per ogni processo che associa ogni pagina del processo al corrispettivo frame in cui si trova.
Quando c’è un process switch, la tabella delle pagine del nuovo processo deve essere ricaricata ed aggiornata
A differenza di prima in cui l’hardware doveva solamente intervenire e aggiungere un offset, qui deve intervenire sulle pagine stesse, infatti un indirizzo di memoria può essere visto come un numero di pagina e uno spiazzamento al suo interno (indirizzo logico)
Example
Deve essere caricato un processo A che occupa 4 frame
Ne arrivano altri due da 3 (B) e 4 (C) frame
Quindi viene swappato B
E sostituito con D (con il partizionamento dinamico, non sarebbe stato possibile caricare D in memoria)
Tabelle delle pagine risultanti
Esempio di traduzione
Supponiamo che la dimensione di una pagina sia di . Quindi la RAM dell’esempio precedente è di solo Inoltre i processi A, B, C, D richiedono solo , , e rispettivamente (comprensivi di codice - program, dati globali ed heap - data e stack delle chiamate). Nelle istruzioni dei processi, i riferimenti alla RAM sono relativi all’inizio del processo (quindi, ad esempio, per D ci saranno riferimenti compresi nell’intervallo )
Supponiamo ora che attualmente il processo D sia in esecuzione, e che occorra eseguire l’istruzione
j 343(vale lo stesso anche per istruzioni di load o store, anche se devono passare per registri) Ovviamente non si tratta dell’indirizzo della RAM: lì c’è il processo A. Bisogna capire in quale pagina di D si trova : basta fare343 div 100 = 3Poi occorre guardare la tabella delle pagine di D: la pagina corrisponde al frame di RAM numero Il frame ha indirizzi che vanno da a : qual è il numero giusto? Basta fare
343 mod 100 = 43quindi il 44-esimo byte L’indirizzo vero è pertanto
Info
Per ogni processo, il numero di pagine è al più il numero di frames (non sarà più vero con la memria virtuale)
Per ottenere l’indirizzo vero dunque punto alla pagina formata dai più significativi, controllando la corrispondenza con il frame, e utilizzo i restanti (ogni pagina è grande ) come offset all’interno della pagina
Segmentazione (semplice)
La differenza tra paginazione e segmentazione sta nel fatto che nella paginazione le pagine sono tutte di ugual dimensione, mentre i segmenti hanno lunghezza variabile. In questo risulta simile al partizionamento dinamico ma è il programmatore a decidere come deve essere segmentato il processo (tipicamente viene fatto un segmento per il codice sorgente, uno per i dati condivisi e uno per lo stack delle chiamate)
Indirizzi Logici

Info
Qui si suppone che non possano esserci segmenti più grandi di
In questo caso nella tabella delle corrispondenze oltre all’indirizzo base del segmento, ci sta anche la sua lunghezza






Per ottenere l’indirizzo vero dunque punto alla pagina formata dai
In questo caso nella tabella delle corrispondenze oltre all’indirizzo base del segmento, ci sta anche la sua lunghezza