Un limite della paginazione é che non é possibile tipizzare le varie porzioni di memoria logica.

Come la paginazione, la segmentazione é una tecnica di gestione della memoria centrale che consente la multiprogrammazione e di poter utilizzare porzioni di memoria non contigue per un processo.

Permette inoltre di non tenere l’intero processo in memoria, ma solo i segmenti usati nell’immediato futuro.

Separa quindi lo spazio di indirizzamento logico, potenzialmente grande quanto lo spazio di indirizzamento della macchina, da quello fisico, grande quanto la memoria fisica.

La memoria fisica

La memoria fisica é divisa in semgenti fisici (frame) di dimensione variabile, ognuno di questo identificato da un numero.

L’obiettivo é di dare consistenza logica alle porzioni di spazio di indirizzamento dei processi, consentendone la tipizzazione e una condivisione semplice.

Indirizzi logici

Gli indirizzi logici prodotti dalla CPU sono costituiti da numero di segmento (s) e offset (d). s é usato come indice nella tabella dei segmenti, una per processo, contenente le traduzioni segmento-frame, con relativo indirizzo base del segmento e la sua lunghezza.

Combinando indirizzo base e offset si ottiene l’indirizzo fisico richiesto.

La traduzione é fatta in HW dall’MMU, che ad ogni traduzione controlla anche i bit di protezione nella tabella dei segmenti, per impedire accessi a segmenti inesistenti, in caso di accesso illegale viene generata una trap hardware gestita dall’OS.

MMU

L’MMU é programmata dal SO ad ogni cambio di contesto. Con tabelle piccole, queste possono essere caricare in registri ad alta velocitá, il caso fossero grandi, il SO carica solo l’indirizzo in cui si trova la tabella dei segmenti.

Traduzioni

per ogni accesso ne serve uno per recuperare la traduzione. Per evitare calo di prestazioni si usa un TLB (trasation lookaside buffer), una cache che mantiene le traduzioni recenti.

Ogni entry mantiene anche un identificatore dello spazio di indirizzamento (ASID), cosí ch epossa cachare traduzioni per piú processi.

Protezione e condivisione

Ad ogni segmento viene associato un bit di protezione, la condivisione dei dati é semplice, si mappa lo stesso frame nelle tabelle dei segmenti di piú processi. La condivisione del codice é utile per non avere piú copie del codice dello stesso programma e per condividere librerie tra processi.

Gli unici vincoli sono che: