Pagina iniziale | Navigazione |
Google

Memoria virtuale

In informatica, la memoria virtuale č uno spazio di memoria non fisicamente presente, ma che può essere emulata utilizzando altri dispositivi, per esempio l'unitĂ  a disco. La memoria effettivamente presente diventa quindi la parte temporaneamente utilizzata di quella, piů grande, virtuale.

Per poter funzionare un sistema operativo ha necessitĂ  di occupare spazio all'interno della memoria principale (memoria RAM) dove, oltre a se stesso, deve caricare anche i programmi in esecuzione ed i dati su cui si sta lavorando. Il processore infatti può prelevare tali informazioni solo all'interno della memoria principale. Può capitare, però, che la quantitĂ  di memoria totale occupata dal sistema sia molto elevata, e che la quantitĂ  di memoria fisica disponibile non sia sufficiente. Una tecnica comunemente usata per ovviare a questo problema č quello di mantenere all'interno della memoria secondaria (solitamente hard disk) parte di queste informazioni, per trasferirle nella memoria principale soltanto quando siano effettivamente necessarie. La memoria secondaria utilizzata a questo scopo č comunemente chiamata swap (verbo inglese che significa "scambiare") e costituisce la memoria virtuale. Le operazioni di spostamanto delle pagine sono chiamate swapping. Con questa tecnica č così possibile disporre di una ben maggiore quantitĂ  di memoria, aumentando pertanto il numero di programmi che č possibile eseguire contemporaneamente.

Table of contents
1 Trashing
2 Algoritmi di swapping

Trashing

È indispensabile che la quantitĂ  di memoria fisica presente sia almeno sufficiente a mantenere la localitĂ  del sistema, ovvero quella parte di dati ed informazioni che sono utilizzate nell'immediato da ogni processo. Se così non fosse, infatti, il sistema dovrebbe continuamente provvedere ad eseguire delle operazioni di swapping per far si che ogni processo abbia i dati di cui necessita.

Ad esempio supponiamo che in un dato momento la memoria fisica sia satura e contenga esattamente la localitĂ  del sistema e che in questa situazione viene avviato un nuovo programma. Il processo che viene creato ha bisogno di allocare della memoria. Dato però che la memoria principale č piena il sistema operativo provvede a liberare parte dello spazio memorizzando parte delle informazioni nella memoria secondaria. Sucessivamente, quando il controllo torna al processo i cui dati sono stati appena spostati, viene nuovamente richiesta un'operazione di swapping per ricaricare in memoria principale gli stessi. Dato che tutte le informazioni contenute nella memoria princiale sono indispensabili questo fenomeno avviene molto spesso. Essendo la memoria secondaria molto piů lenta (centinaia o migliaia di volte) rispetto alla memoria principale, questo causa un considerevole rallentamento del sistema, che č impegnato quasi esclusivamente in operazioni di I/O, e diventa presto inutilizzabile e poco, o per nulla, responsivo ai comandi dell'utente. Tale fenomeno č chiamato trashing.

Algoritmi di swapping

Esistono varie tecniche per decire quali sono le aree di memoria che č preferibile spostare dalla memoria primaria alla secondaria. Le seguenti sono le piů diffuse:

FIFO

La tecnica FIFO (First In First Out) č la piů semplice, si tiene traccia in una tabella di quando č stata allocata un'area di memoria. Quando vi č una nuova richiesta di allocazione di pagine di memoria, se c'č ancora spazio in memoria principale, semplicemente viene allocata la nuova pagina, altrimenti si consulta mediante la tabella quali sono le pagine allocate da piů tempo e si spostano in memoria secondaria.

Questo algoritmo č molto semplice e di rapida esecuzione ma ha lo svantaggio di spostare in memoria secondaria le pagine piů vecchie anche sono utilizzate.

Seconda scelta

Esiste una semplice ottimizzazione della tecnica FIFO che ovvia al problema dello swap anche delle pagine molto utilizzate. È sufficiente aggiungere un bit nella tabella che tiene traccia dell'etĂ  delle pagine: ogni volta che il sistema operativo accede ad una pagine, pone questo bit ad 1 mentre l'algoritmo di swap delle pagine, se trova il bit a 1 lo pone a 0 e sposta in memoria secondaria una pagina con il bit giĂ  posto a 0. In questo modo, le pagine utilizzate di frequente hanno alta probabilitĂ  di rimanere in meoria principale.

Nel caso peggiote tutte le pagine hanno il bit impostato ad 1, in questo caso l'algoritmo azzera tutti i bit fino a tornare alla prima pagina presa in esame. Trovandola ora con bit a 0 provvede alla sua sostituzione. In questo caso la sostituzione a seconda scelta si ridure ad una sostituzione di tipo FIFO.

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): non usato recentemente, ma modificato - prima di essere sostituita deve essere riscritta nella memoria secondaria
  • (1,0): usato recentemente ma non modificato
  • (1,1): usato recentemente e modificato

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.

LRU

La migliore soluzione possibile consisterebbe nello spostare le pagine che non saranno usate per piů tempo ma naturalmente il sistema operativo non č in grado di avere quest'informazione. La soluzione di compromesso consiste nello spostare le pagine inutilizzate da piů tempo (LRU cioč Least Recently Used) poichĂ© hanno buona probabilitĂ  di non essere nuovamente utilizzate nell'immediato.

Per gestire efficientemente quest'algoritmo occorre supporto hardware. È possibile implementare questa tecnica in due modi: si può aggiornare ad ogni accesso della memoria una tabella oppure si mantiene uno stack con le pagine utilizzate piů recentemente poste in cima. Entrambi i metodi hanno un impatto non indifferente sulle prestazioni del sistema e per questo motivo normalmente sono realizzati in hardware.


GNU Fdl - it.Wikipedia.org




Google | 

Enciclopedia |  La Divina Commedia di Dante |  Mappa | : A |  B |  C |  D |  E |  F |  G |  H |  I |  J |  K |  L |  M |  N |  O |  P |  Q |  R |  S |  T |  U |  V |  W |  X |  Y |  Z |