# Protezione della memoria

La protezione della memoria, in informatica è un sistema che impedisce ad un processo di corrompere la memoria di un altro processo in esecuzione contemporaneamente sullo stesso computer. Richiede usualmente il supporto dell'hardware (ad esempio con una MMU, Memory management unit) e un sistema operativo che allochi aree distinte di memoria per i differenti processi e che gestisca l'eventualità nella quale un processo tenti di accedere ad un'area di memoria che non gli compete. Vi sono differenti modalità per ottenere la protezione della memoria. La "segmentazione" e la "paginazione" della memoria sono i metodi più comuni.

## Segmentazione

"Segmentazione" significa che una o più parti della memoria vengono "sigillate" dall'accesso del processo corrente tramite due registri del microprocessore.
Se un dato che sta per essere letto o scritto è all'esterno dell'area di indirizzamento del processo, viene generato un errore di protezione generale (in inglese, un general protection fault o GPF).
Questa modalità non va confusa con la segmentazione della memoria in modalità reale dei microprocessori x86.

## Paginazione

La "paginazione" è il metodo più usato per la protezione della memoria e presenta numerosi vantaggi rispetto alla segmentazione.
La paginazione crea uno spazio di memoria virtuale lineare usando frammenti (blocchi) di memoria fisica. La memoria virtuale è divisa in piccole porzioni (solitamente di 4 kB) chiamate "pagine". Ogni pagina può puntare ad un qualsiasi blocco di memoria fisica, e diverse pagine possono puntare allo stesso blocco. Ad ogni processo viene assegnata una "tabella delle pagine", che specifica a quali pagine il processo ha diritto di accedere. Inoltre, il processo si comporterà come se fosse l'unico processo presente nel sistema e come se disponesse di tutto lo spazio di indirizzamento. La paginazione permette inoltre un indirizzamento lineare della memoria virtuale, nascondendo ai processi l'allocazione non contigua nella memoria fisica.
La paginazione permette di allocare facilmente nuova memoria per il processo, perché le pagine possono essere mappate ovunque. Parte della memoria di un processo può essere depositata su memoria di massa (swapping).
Ogni processo possiede una tabella delle pagine per definire gli indirizzi di memoria validi e per mapparli nella memoria fisica. La tabella delle pagine di solito è invisibile al processo. Se un processo cerca di accedere ad una locazione di memoria non mappata nella tabella delle pagine, viene generato un "errore di pagina" (page fault). Gli errori di pagina possono significare sia che il processo ha cercato di accedere ad una parte di memoria alla quale non ha accesso, oppure che parte della memoria del processo è stata depositata in un "file di paginazione" in seguito allo swapping. In questo caso, la pagina verrà recuperata da disco e l'esecuzione ripartirà da dove si era interrotta.

## Chiavi di protezione

Il meccanismo delle chiavi di protezione divide la memoria fisica in blocchi di una dimensione prefissata (ad esempio 2KB), ciascuno dei quali ha un numero detto chiave di protezione. Anche ogni processo ha una propria chiave di protezione. In ogni accesso di memoria, l'hardware controlla che l'attuale chiave di protezione del processo sia uguale a quella della memoria che sta accedendo: se sono diversi, ciò causa un errore d'eccezione. Questo meccanismo era utilizzato nell'architettura System/360.
Se nella gestione della memoria vengono utilizzati sia la paginazione che la segmentazione (come avviene nell'architettura IA-32), la paginazione non interviene subito nella memoria, ma effettua prima una ricerca di un segmento lineare.