Segmentazione (memoria)
La segmentazione, in ambito informatico, è una comune tecnica di gestione della memoria che suddivide la memoria fisica disponibile in blocchi di lunghezza fissa o variabile detti segmenti. Uno dei possibili fini di tale tecnica è l'implementazione di meccanismi di protezione della memoria. Un'altra tecnica comune che assicura la protezione fra processi diversi è il paging.
In un sistema operativo che usa la segmentazione, un indirizzo di memoria contiene una parte che identifica un segmento, e una parte che specifica l'offset entro il segmento indicato. La segmentazione è applicata di solito direttamente allo spazio di indirizzamento fisico o ad uno spazio di indirizzamento virtuale derivato da quello fisico con un'applicazione lineare.
Oltre all'indirizzo fisico ed alla lunghezza, ad un segmento può essere associata una combinazione di permessi in base ai quali si determina a quali processi è consentito o negato un certo tipo di accesso. In questo modo ad esempio è possibile distinguere segmenti di programma, di dati e di stack. Il gestore della memoria può così fare in modo che da un segmento di programma vengano caricate solo istruzioni (e non, ad esempio, dati) o che le informazioni caricate da un segmento di dati non vengano interpretate come istruzioni per il processore. Inoltre, un segmento può possedere un flag che specifica se il segmento stesso è presente nella memoria principale o se va recuperato da un supporto di memoria secondaria prima di essere utilizzabile. Se un processo cerca di accedere ad un segmento che non è attualmente disponibile nella memoria principale, si verifica un'eccezione hardware che permette al sistema operativo di caricare il segmento d'interesse dalla memoria secondaria.
[modifica] Supporto dell'hardware
I moderni processori dispongono di una speciale componente hardware integrata per la traduzione di indirizzi virtuali in indirizzi fisici, l'MMU, che adempie anche al compito di verificare la validità di un indirizzamento. Sui sistemi che non dispongono di un tale componente, come il processore Intel 80286, gli indirizzi fisici possono essere calcolati a partire dagli indirizzi virtuali solo per mezzo di una funzione lineare. Per questo tipo di processori la segmentazione è l'unico metodo di gestione della memoria in modalità protetta. Va notato tuttavia che la segmentazione utilizzata dai processori 80286 e successivi permette di proteggere la memoria assegnando permessi di lettura e scrittura; con i processori x86 precedenti, al contrario, una protezione di questo tipo non risultava possibile. Se è disponibile una MMU, come nel caso dei processori Intel 80386 o superiori, il sistema operativo può stabilire se utilizzare una tabella di paging o servirsi della comune tecnica di segmentazione per le normali operazioni di accesso alla memoria.