Definizione

La segmentazione é una tecnica di gestione della memoria centrale che permette la multiprogrammazione e di utilizzare aree di memoria non contigue per lo stesso processo in modo trasparente al programmatore, separando la visione dello spazio di indirizzamento logico dai processi da quello fisico. Inoltre, permette di eseguire un processo senza doverlo tenere interamente in memoria scambiando i suoi segmenti all’occorrenza tra memoria centrale e area di swap.

Memoria Fisica e Logica

La memoria fisica é divisa in frame di dimensione variabile, mentre quella logica in segmenti, ognuno inserito in un frame della stessa dimensione, contenenti informazioni di tipo.

Obiettivo

L’obiettivo é dare consistenza logica alle varie aree di memoria favorendone la tipizzazione e facilitandone la condivisione.

Indirizzi Logici e Fisici

Gli indirizzi logici sono composti da un numero di segmento e offset, il numero di segmento funge da indice nella tabella dei segmenti, una per processo contenente la traduzione segmento-frame con i relativi indirizzi base del segmento e la sua lunghezza.

Combinando il numero di frame con l’offset si trova l’indirizzo fisico richiesto.

MMU

Le traduzioni degli indirizzi sono svolte dal MMU (Memory Management Unit) che verifica anche la validitá delle richieste, gli accessi invalidi sono gestiti dal SO dando segmentation fault.

TLB

Siccome ogni accesso in memoria ne richiederebbe uno ulteriore per recuperare la traduzione, viene implementata una cache associativa, compatta veloce ma costosa, chiamata Translation Lookaside Buffer.

In alcuni TLB, per ogni entry viene salvato anche un identificatore dello spazio di indirizzamento, ASID, cosí da poter cachare traduzioni di piú processi.

Protezione

Dal momento che ogni segmento contiene una porzione di programma decisa dal programmatore, é probabile che i suoi elementi siano utilizzati allo stesso modo e dunque vengono assegnati dei bit di protezione ai segmenti interi.

Condivisione

Siccome piú processi condividono parti di codice, o addirittura lo stesso codice, risulta utile condividere la memoria mappando lo stesso frame nella tabella dei segmenti dei vari processi.

Scelta di una vittima