Caricare documenti e articoli online 
INFtub.com è un sito progettato per cercare i documenti in vari tipi di file e il caricamento di articoli online.


 
Non ricordi la password?  ››  Iscriviti gratis
 

GESTIONE DELLA MEMORIA: SEGMENTAZIONE

informatica



GESTIONE DELLA MEMORIA: SEGMENTAZIONE


Nella tecnica della paginazione la memoria fisica viene suddivisa in pagine di uguale lunghezza. Nella SEGMENTAZIONE, queste pagine, più propriamente SEGMENTI, hanno una lunghezza che varia a seconda delle esigenze. Analogamente allo spazio fisico, anche lo spazio logico viene visto come suddiviso in segmenti; inoltre esso, diversamente da quanto accade nel caso della pag 727f57h inazione, lo spazio logico assume come il suo corrispondente fisico una struttura bidimensionale: l'indirizzo logico è costituito dalla coppia indirizzo del segmento - offset all'interno del segmento.

La segmentazione è normalmente supportata da quei compilatori che mettono in segmenti logici diversi le variabili globali, l'area stack, i dati e così via. La fase di mapping, che si occupa di sostituire all'indirizzo di segmento logico quello di segmento fisico, richiede necessariamente un'operazione di addizione invece di una semplice sostituzione come nel caso precedente.

Nel caso della paginazione il compilatore genera gli indirizzi di uno spazio logico lineare, ed è ignaro della suddivisione in pagina logica (ovvero fisica) e offset di pagina che si ingenera subito dopo. Da questo punta di vista quanto avviene nella segmentazione è essenzialmente diverso. Si noti la figura che segue.
















TRAP : errore di indirizzamento

 






L'indirizzo logico è costituito esso stesso da una coppia: indice di segmento - displacement (anziché da un singolo indirizzo dal quale ricavare poi la coppia). La tabella che realizza la corrispondenza fra spazio fisico e logico prende qui il nome di TABELLA DEI SEGMENTI, ed è necessariamente più ampia della tabella delle pagine. Intanto, in tale tabella ad ogni segmento è associata una doppia informazione: l'indirizzo base del segmento nella memoria fisica e la lunghezza del segmento stesso. Durante la fase di EXECUTE viene rilevato un indirizzo logico (che può essere quello di un dato, ma anche di una istruzione: si pensi ad esempio alle istruzioni di salto), in cui l'indice di segmento serve ad accedere alla tabella dei segmenti dalla quale ricavare base e limite del corrispondente segmento fisico; il displacement viene confrontato con quest'ultimo allo scopo di impedire accessi illegali. Se il displacement è minore, viene sommato con la base per ottenere l'indirizzo fisico. L'hardware necessario per determinare l'indirizzo fisico include dunque un comparatore, un addizionatore ed un array di coppie (base, limite) ed è perciò più complicato di quello visto per la paginazione.

Nei fatti, si ricorre sempre al sistema di utilizzare l'insieme di una memoria associativa e di un registro speciale che punta alla tabella completa, residente in memoria. La memoria associativa contiene solo una parte di quella tabella. Se si tenta l'accesso ad un segmento il cui indice è assente all'interno della memoria associativa, di prosegue la ricerca in parallelo nella tabella dei segmenti. Ad ogni segmento inoltre si associa spesso una informazione supplementare: i diritti di accesso, che permettono di gestire i meccanismi di protezione relativi a quel processo. In questo modo un programma, anche di breve lunghezza, può essere disposto lungo più segmenti, ognuno dei quali con un proprio criterio di accesso: per esempio uno accessibile solo in lettura, uno anche in scrittura, eccetera. Si noti in proposito la figura seguente.









 
















La tecnica della segmentazione permette uno sviluppo ulteriore del concetto di condivisione. Nell'ambito della paginazione è possibile dividere le pagine contenenti il codice da quelle contenenti i dati, e condividere l'intero codice tra due o più processi; con la tecnica dei segmenti invece è possibile condividere tra più processi soltanto parte del codice; poiché infatti i segmenti vengono definiti già a livello logico, si possono inserire opportunamente all'interno dei vari segmenti 'spezzoni' di codice, routine intere (come la SQRT dell'esempio) o gruppi di routine e condividere ciascun segmento fra quei processi che sono preposti ad utilizzarlo [1].

Affrontiamo ora il discorso della frammentazione. Con la tecnica della segmentazione sparisce la frammentazione interna, perché i segmenti possono essere definiti proprio della lunghezza necessaria. Permane invece il problema della frammentazione esterna. Dopo aver allocato i vari segmenti in memoria, potremmo ritrovarci con dei buchi di memoria così piccoli da non poter  contenere alcun segmento. Questo problema però risulta meno grave di quanto lo fosse nel contesto delle partizioni variabili, perché è meno probabile che un buco di memoria sia di dimensioni così contenute da essere del tutto inutilizzabile, e quindi la necessità di ricompattare la memoria si presenta con una frequenza inferiore. Per eliminare del tutto la frammentazione esterna si usa una tecnica mista detta di SEGMENTAZIONE PAGINATA, nella quale ogni segmento è organizzato 'a pagine'.






Segue misteriosa osservazione di De Carlini, presente tra l'altro anche sul Silberschatz-Galvin (pag.268): "Ad esempio, in un segmento possiamo inserire un array perché così  mi rendo conto subito tramite una Trap se sono uscito dall'array e quindi dal segmento (meccanismo automaticamente gestito)".




Privacy




Articolo informazione


Hits: 6792
Apprezzato: scheda appunto

Commentare questo articolo:

Non sei registrato
Devi essere registrato per commentare

ISCRIVITI



Copiare il codice

nella pagina web del tuo sito.


Copyright InfTub.com 2024