Segmentazione

Come la paginazione, ma ogni entry contiene anche la lunghezza del segmento e dei bit di protezione. Inoltre la condivisione porterà a meno overhead, dato che in genere ci sono meno entry da condividere.

Protezione

Una tecnica per proteggere i segmenti in memoria è quella di associare al processo e ai segmenti una chiave di protezione modificabili solo dal kernel che, se combacia, ne permetterà l'accesso.

L'alternativa più comune è l'uso dei bit di protezione, che specificano quali tra le operazioni il processo ha il permesso di effettuare, come i bit read, write e execute.

Questi danno un maggior controllo sulla memoria, infatti un riferimento può causare le eccezioni:

  • Missing segment fault, se il segmento non è caricato in memoria
  • Overflow segment fault, se il page offset supera la lunghezza del segmento
  • Segment protection exception, se l'operazione effettuata non è consentita

Ibrido con paginazione

Per sfruttare i vantaggi della paginazione e della segmentazione, si possono usare segmenti che occupano una o più pagine, in questo modo è possibile caricare solamente parte del segmento in memoria.

In questo caso si dovranno salvare sia il page number che il segment number assieme al page offset.

Usando il segment number si trova nella segment table l'indirizzo della page table, che verrà poi indicizzata con il page number restituendo infine il page frame.

Più processi condividono memoria se una delle righe della loro segment table punta alla stessa page table.