La tecnica della segmentazione dinamica è simile a quella della paginazione dinamica; per l’esecuzione non è necessario che tutti i segmenti siano caricati in memoria centrale; gli altri segmenti rimangono nell’area di swap e vengono caricati all’occorrenza.
I segmenti sono caricati in modo dinamico in partizioni variabili (con il problema della frammentazione esterna).
Per la gestione, oltre alle informazioni sulle partizioni, occorrono, per ogni processo:
- la tabella dei descrittori di segmento che contiene per ogni segmento un flag che indica se il segmento è accessibile o inaccessibile e per i segmenti in memoria l’indirizzo della partizione in cui sono caricati;
- la tabella di mappa su disco che contiene per ogni segmento l’indirizzo nell’area di swap.
Quando un processo fa riferimento a un’istruzione di un segmento inaccessibile, si verifica una interruzione (segment fault) e il sistema operativo provvede a caricare il segmento dall’area di swap; se la misura dei segmenti è elevata questa operazione può richiedere un certo tempo.
Un segmento deve essere caricato in una partizione libera. Se non ci sono partizioni libere bisogna liberare una partizione rendendo inaccessibili altri segmenti. Se i segmenti che vengono resi inaccessibili sono stati modificati devono essere copiati nell’area di swap.
Gli algoritmi di sostituzione dei segmenti sono più complessi di quelli per le pagine perché devono trovare una partizione di dimensioni adeguate; la partizione può derivare anche dalla concatenazione di più partizioni che però devono essere contigue e avere scarse probabilità di riferimento nel futuro. Data la difficoltà dei vincoli, di solito si utilizza una politica globale (cioè si effettua la scelta tra i segmenti di tutti i processi) e si ricorre alla sostituzione solo quando si cerca di caricare un segmento e non c’è una partizione libera. L’algoritmo LRU dovrebbe considerare tutte le possibili combinazioni di segmenti le cui partizioni possono essere concatenate in una di dimensione adeguata e scegliere quella che ottimizza una funzione delle distanze passate. Una semplificazione consiste nell’imporre soltanto che le distanze passate dei segmenti superino una certa soglia. Si può fare con una variante dell’algoritmo second chance cercando una sequenza di partizioni non riferite la cui somma sia adeguata.
Il fenomeno del thrashing è improbabile perché la frequenza degli errori di segmento è minore di quella delle pagine, per il principio di località dei processi, dato che la struttura dei segmenti riflette quella del programma.