Please enable JavaScript.
Coggle requires JavaScript to display documents.
Perché virtualizzare la memoria? (4.1), La paginazione dinamica (a…
Perché virtualizzare la memoria? (4.1)
Le tecniche di memoria virtuale consentono l'esecuzione di un processo anche se non tutto il suo codice e i suoi dati sono in mem centrale, infatti c'è la possibilità di caricare e scaricare parti del programma da quella centrale a quella secondaria, la gestione deve avvenire secondo:
Si devono caricare il memoria solo alcuni moduli del programma, lasciando il resto su memoria secondaria
Se durante l'esecuzione di un programma viene richiesto un modulo non presente in memoria, si dovrà provvedere al suo caricamento e allo scaricamento di un blocco
La scelta dei moduli e delle pagine da rimuovere dalla mem centrale è decisa dal SO con appositi algoritmi
Si deve suddividere il programma in moduli indipendenti (programmazione modulare, quella a oggetti rappresenta un ulteriore sviluppo di quella modulare)
L'idea è quello di creare una memoria virtuale che abbia come somma la capacità della memoria centrale e di una memoria swap (un dispositivo che sia lento ma molto capiente come SSD, HDD), che venga usata quando il sistema ha bisogno di liberare la memoria centrale
Il SO decide cosa sia meglio tenere in memoria centrale e cosa bisogna parcheggiare in memoria secondaria usando 3 tecniche (tutte gestiscono la memoria con lo swapping)
Segmentazione
Segmentazione paginata
Paginazione dinamica
La paginazione dinamica (a richiesta di pagine) (4.2)
La paginazione dinamica come quella pura suddivide il programma in pagine(indipendentemente da quello che contengono, usando un criterio fisico) e la memoria centrale in blocchi della stessa dimensione delle pagine, solo che non tutte le pagine hanno un blocco associato in memoria centrale, cioè non tutte sono fisicamente caricate, i moduli di gestione scelgono quali pagine caricare in memoria fin da subito
Se durante l'esecuzione, l'istruzione che bisogna eseguire si trova in una pagine non presente in mem centrale, avviene il page fault (quando un processo cerca di accedere ad una pagine non allocata in memoria centrale) e il SO provvede al suo caricamento dalla mem secondaria
Per tenere sotto controllo l'occupazione della memoria il SO si dovrà gestire 3 tabelle
Tabella dei blocchi
IND (indirizzo del blocco di memoria centrale da cui parte il caricamento della pagina)
STATO (stato del blocco, libero/occupato)
ID_BLK (identificatore del blocco)
Tabella di mappa (solo processi caricati in mem caentrale)
NUM_PAG (numero d'ordine della pagine nell'ambito del processo)
ID_BLK ( identificatore del blocco)
ID_PROCESSO (identificatore del processo)
Tabella delle pagine (tutti i processi, anche quelli caricati parzialmente)
NUM_PAG (numero d'ordine della pagina)
STATO (1 se la pagine è caricata in memoria, sennò 0)
ID_PROCESSO (identificatore del processo)
Ci sono 2 cambiamenti rispetto alla paginazione pura
1 la tabella delle pagine ha STATO perchè deve sapere se ogni pagina si un processo ha torvato posto in un blocco della memoria centrale o se la pagina è ancora in memoria secondaria
Viene introdotta la tabella di mappa perché serve per sapere in quale blocco sono state caricate le pagine che hanno posto in mem centrale
Quando il SO deve caricare una pagina in mem centrale si possono verificare 2 casi:
Caso 1:
in mem centrale ci sono blocchi liberi in questo caso Il SO deve
Aggiornare la tabella dei blocchi (dire che il blocco scelto è occupato)
Inserire una riga nella tabella di mappa che indica quale blocco è stata caricata la pagina
Aggiornare la tabella delle pagine (stato pagina 1)
Caricare la pagina dalla mem secondaria a quella centrale (swap-in)
Caso 2:
In memoria centrale non ci sono blocchi liberi, prima di effettuare tutti i punti il SO deve scegliere quale pagina in memoria centrale traferirla in mem secondaria per liberare un blocco, per scegliere la pagine il SO usa delle tecniche di rimpiazzamento che sono importanti per la loro efficienza, dato che le operazioni di swapping richiedo tempo perché la CPU deve operare con la memoria secondaria che ha dei tempi molto più lenti rispetto ad essa, quindi la pagina da scegliere è una pagina non importante, le tecniche di rimpiazzamento usate dal SO sono:
Algoritmo LRU: viene rimpiazzata una pagina che non è stata usata da più tempo, quella da più tempo inutilizzata non sarà richiesta entro breve tempo, in questo caso la tabella di mappa deve avere un campo per registrare il momento in cui la pagina è stata usata.
Algoritmo NRU: viene rimpiazzata la pagina non usata recentemente (non necessariamente quella non usata da più tempo), questa tecnica a differenza di quella prima è di facile implementazione
FIFO: viene rimpiazzata la pagina che da più tempo risiede in memoria centrale, la 1 che è entrata sarà la 1 ad uscire, in questo caso la tabella di mappa deve avere un campo che contiene il momento in cui la pagina è stata caricata, non è detto che sia la scelta migliore. (se la prima pagina caricata è un menù questa pagina verrà caricata spesso quindi non deve essere scaricata dalla mem centrale)
Per diminuire ulteriormente i costi di swapping il SO può inserire nella tabella di mappa un bit di variazione che è posto inizialmente a 0, quando la pagina subisce variazioni il bit diventa 1, al momento di fare lo swap-out se il bit di variazione è 0, non è necessario ricopiare in memoria secondaria la pagina, sarà necessario fare lo swap-out se il bit è 1 (questo bit è utile anche per scegliere quali pagine rimpiazzare perché è meglio scegliere come "vittima" una pagina non modificata)
Svantaggi della paginazione dinamica (4.4)
Gli svantaggi sono della paginazione dinamica:
Un eccessiva occupazione di memoria da parte della tabella delle pagine
Siccome per ogni indirizzo generato è necessario accedere alla tabella della pagine per il calcolo dell'indirizzo fisico, quindi i tempi di accesso per ogni indirizzo sono raddoppiati rispetto a una gestione senza paginazione
se la scelta delle pagine non fosse fatta un modo accurato ogni pagina caricata genererebbe una page fault, causando il thrashing (le risorse di un computer di memoria virtuale sono sovrautilizzate portando ad uno stato costante di paginazione e errori di pagine, questo causa la riduzione o collasso delle prestazioni del sistema)
Soluzioni
Il secondo si può usare la strategia di working set (insieme di pagine di memoria attualmente usate da un processo in esecuzione, le pagine di memoria includono sia quelle attualmente residenti nella memoria principale (RAM) sia quelle che possono essere temporaneamente memorizzate sulla mem secondaria, se il SO riuscisse a garantire il working set di ogni processo il page fault diminuirebbe e con esso anche il thrashing)
Al primo problema si risolve usando un algoritmo intelligente per la scelta delle pagine da rimpiazzare