Memoria virtuale: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Etichette: Modifica da mobile Modifica da web per mobile |
Funzionalità collegamenti suggeriti: 3 collegamenti inseriti. |
||
Riga 22:
Questo meccanismo ha un prezzo in termini di prestazioni: la MMU impiega del tempo per tradurre l'indirizzo logico in indirizzo fisico, e ce ne vuole molto di più per caricare una zona di memoria dallo spazio di swap: in ultima analisi quindi, implementare una memoria virtuale significa sacrificare potenza di calcolo per poter eseguire un maggior numero di processi contemporanei.
Detto T<sub>a</sub> il normale [[tempo di accesso]] alla memoria fisica, T<sub>t</sub> il tempo di traduzione di indirizzi della MMU e T<sub>load</sub> il tempo necessario a caricare una zona di memoria dallo swap, il tempo (medio) di accesso in caso di memoria virtuale è:
T<sub>av</sub> = T<sub>t</sub> + T<sub>a</sub> + T<sub>load</sub> * P<sub>fault</sub>
Riga 29:
=== Meccanismi di memoria virtuale ===
Esistono principalmente due modi per implementare un sistema di memoria virtuale: dividere la memoria in tante pagine identiche, gestite dall'hardware, oppure lasciare che sia il programmatore e/o il [[compilatore]] usato dal programmatore a "segmentare" il proprio programma in più segmenti (sperabilmente) indipendenti.
Entrambi i metodi presentano vantaggi e svantaggi: in questi ultimi tempi tuttavia il sistema di gran lunga più usato è la memoria paginata, per via della maggiore omogeneità e indipendenza dal software.
Riga 79:
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 ==
|