Memoria virtuale: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Funzionalità collegamenti suggeriti: 3 collegamenti inseriti. |
fix /migliorata leggibilità wikitesto |
||
Riga 4:
In [[informatica]], la '''memoria virtuale''' è un'architettura di sistema capace di simulare uno spazio di [[memoria (informatica)|memoria]] centrale ([[memoria primaria]]) maggiore di quello fisicamente presente o disponibile, dando l'illusione all'utente di un enorme quantitativo di memoria<ref>{{Cita web|url=https://users.soe.ucsc.edu/~sbrandt/111/Slides/chapter3.pdf|titolo=Virtual Memory – Paging}}</ref>.
Il [[sistema operativo]] usando una combinazione di hardware e software, mappa gli [[Indirizzo di memoria|indirizzi di memoria]] usati da un programma, chiamati ''indirizzi virtuali'', in ''indirizzi fisici''. La [[
I vantaggi principali di quest'architettura sono una maggiore sicurezza dovuta all'isolamento della memoria, la possibilità di condividere alcune pagine di memoria fra diversi processi (in particolar modo quella delle [[Libreria (software)|librerie]]), e potere usare più memoria di quella disponibile con una tecnica chiamata [[Swap (informatica)|swap]].
Questo risultato si raggiunge utilizzando spazio di [[memoria di massa|memoria secondaria]] su altri dispositivi o supporti di memorizzazione, di solito le [[hard disk|unità a disco]]. La memoria centrale fisicamente presente diventa quindi la parte effettivamente utilizzata di quella virtuale, più grande: questo stratagemma è utile in virtù del [[principio di località (informatica)|principio di località]] e riuso dell'esecuzione dei [[programma (informatica)|programmi]].
In ambiente [[POSIX]], la [[memoria di massa]] utilizzata a questo scopo è comunemente chiamata "''[[Swap (informatica)|swap]]''" o "spazio di ''swap''" (verbo inglese che significa "scambiare"), mentre, in ambiente Windows, è chiamata "file di ''[[paginazione|paging]]''". Le operazioni di spostamento delle pagine dallo spazio di ''swap'' alla memoria fisica sono chiamate "''swapping''".
Riga 77:
Tecnicamente, quando la memoria centrale (RAM) libera (e quindi il numero di frame liberi) è insufficiente a contenere il [[working set]] corrente di un processo, quest'ultimo
comincerà presto a generare parecchi page fault, rallentando considerevolmente la propria velocità d'esecuzione. Quando parecchi processi cominciano ad andare in thrashing, ovvero a spendere più tempo per la paginazione che per l'esecuzione, il sistema operativo potrebbe erroneamente essere indotto a dedurre che sia necessario aumentare il grado di multiprogrammazione (dato che la CPU rimane per la maggior parte del tempo inattiva a causa dell'intensa attività di I/O). In questo modo vengono avviati nuovi processi che però, a causa della mancanza di frame liberi, cominceranno a loro volta ad andare in thrashing: in breve le prestazioni del sistema collassano fino ad indurre l'operatore a dover terminare forzatamente alcuni processi. Un modo per limitare questo fenomeno consiste nel utilizzare una procedura di rimpiazzamento locale, ovvero dare la possibilità al [[gestore della memoria]] virtuale di sostituire le pagine associate al solo processo che ne fa richiesta. In questo modo si impedisce che l'intero sistema vada in thrashing.
== Algoritmi di rimpiazzo pagine ==
Riga 86 ⟶ 84:
=== Strategia ottimale ===
{{vedi anche|Algoritmo ottimo}}
Questa tecnica consiste nel rimpiazzare la pagina di memoria che verrà riutilizzata più in là nel tempo. Chiaramente, per poter essere realmente implementata, richiederebbe che il S.O. conoscesse in anticipo le pagine utilizzate nel futuro dai processi. Non è quindi utilizzabile come algoritmo di rimpiazzamento delle pagine in memoria principale, ma come metro di confronto delle altre strategie.
Riga 99 ⟶ 98:
Esiste una versione modificata del seguente algoritmo che prevede due bit che tengono traccia dell'uso e della modifica. Si hanno infatti le seguenti combinazioni:
* (0,0): né recentemente usato né modificato - migliore pagina da sostituire
* (0,
* (1,0
* (1,
Quando è necessario effettuare una sostituzione di pagina l'algoritmo prima cerca la pagina migliore da sostituire considerando non solo il fatto che essa non sia stata usata recentemente ma anche che non sia stata modificata. Infatti quando la pagina è stata modificata è necessario salvarne nuovamente il contenuto all'interno della memoria secondaria. Se invece non è stata modificata, ed è già presente una copia nella memoria secondaria, non è necessario effettuare alcuna operazione di [[I/O]].
Riga 112 ⟶ 110:
Per gestire efficientemente quest'algoritmo occorre supporto hardware, in quanto i continui aggiornamenti del marcatore temporale causano un continuo rimescolio delle pagine e l'impossibilità di determinare la pagina da sostituire.
È possibile implementare questa tecnica in due modi:
* si può aggiungere alla ''[[CPU]]'' un contatore incrementato ad ogni riferimento alla memoria, si associa ad ogni elemento della tabella delle pagine un campo per mantenere il marcatore temporale ed ogni volta che si accede ad una pagina si aggiorna il suo marcatore usando il valore del contatore.
Riga 123 ⟶ 122:
Sono algoritmi basati sul conteggio del numero di riferimenti fatti a ciascuna pagina.
* LFU (least frequently used): sostituisce la pagina con il minor numero di riferimenti. Si basa sull'idea che una pagina molto usata ha un conteggio alto, mentre una pagina che serve poco avrà un conteggio basso.
* MFU (most frequently used): sostituisce la pagina con il maggior numero di riferimenti. Si basa sul principio che una pagina con contatore basso è stata probabilmente caricata da poco, quindi è utile mantenerla.
== Note ==
|