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
 

L'OVERLAY

informatica



L'OVERLAY


Ci sarà utile ora esaminare una tecnica di gestione della memoria che veniva usata molti anni fa nei piccoli sistemi di elaborazione. All'epoca uno dei problemi più ostici era costituito dall'impossibilità di disporre di banchi di memoria indirizzabile sufficientemente grandi, anche laddove si doveva far girare un solo programma alla volta. Questo problema era aggirato mediante un trasferimento di informazioni fra memoria di massa e memoria centrale, come del resto avviene oggi nei sistemi a memoria virtuale. Ma la differenza in termini pratici è enorme. In un moderno sistema a memoria virtuale, infatti, di questo 'travaso' si occupa esclusivamente il SO, in modo da rendere la cosa assolutamente trasparente all'utente.

In quel caso accadeva l'esatto contrario: il SO era in grado di 'vedere' la sola memoria centrale del sistema e del trasferimento informazioni fra memoria di massa e memoria centrale doveva farsi carico l'utente, mediante una tecnica nota come OVERLAY. Essa si basava sulla possibilità di conservare in memoria solo le istruzioni e i dati utilizzati con maggiore frequenza. Quando sono necessarie altre istruzioni, queste vengono caricate nello spazio che precedentemente era occu 434b15e pato dalle istruzioni che ora non vengono più utilizzate.




Un esempio può essere dato dall'assembler a due passi. Durante il passo 1, l'assembler costruisce una tabella di simboli; durante il passo 2, genera il codice in linguaggio macchina. Supponiamo che le dimensioni delle componenti del processo siano queste:

- Passo 1 : 70 K ;

- Passo 2 : 80 K ;

- Tabella dei simboli : 20 K ;

- Routine comuni : 30 K.

Quindi per caricare in memoria l'intero programma servono 200 K di memoria. Supponiamo che ne siamo disponibili solo 150. In tal caso, si può notare che non è necessario che il passo 1 e il passo 2 si trovino contemporaneamente in memoria. Si possono allora definire due overlay: l'overlay A costituito dalla tabella dei simboli, dalle routine comuni e dal passo 1; l'overlay B costituito dalla tabella dei simboli, dalle routine comuni e dal passo 2. Deve essere presente in entrambi un gestore (o driver) dell'overlay, che poniamo occupi 10 K, indispensabile per passare da un overlay all'altro.

Si inizia il processo con in memoria l'overlay A. Terminato il passo 1, subentra il driver dell'overlay che sovrascrive in memoria l'overlay B (prelevandolo dal disco) all'overlay A e trasferisce il controllo al passo 2. Si noti come dunque il programma assembler a due passi possa essere eseguito nei 150 K. Il caricamento sarà più rapido, perché coinvolge meno dati; l'esecuzione invece, naturalmente, risulterà rallentata dalla necessità di effettuare l'operazione di I/O delegata a sovrascrivere il codice dell'overlay B a quello di A.






SIMBOL

TABLE

20k






ROUTINE

COMUNI

30k



70k

PASSO 1


GESTIONE

OVERLAY

10k

PASSO 2

80k













LO SWAPPING


Questa tecnica è in effetti stata già incontrata quando abbiamo parlato dello schedulatore a medio termine. Il suo scopo è quello di lavorare con un quantitativo di processi attivi maggiore di quello che potrebbe essere consentito con le tradizionali tecniche di gestione della memoria..

Se il kernel ha un certo numero di processi aperti, ma non c'è abbastanza spazio per contenerli tutti nella memoria centrale, alcuni di essi vengono spostati nella memoria di massa (deve trattarsi di un'unita di memorizzazione con una buona velocità di trasferimento e una sufficiente capienza, come un disco fisso). Un processo può essere ad esempio 'swappato' nella memoria di massa quando si mette in attesa del completamento di un'operazione di I/O (con le dovute precauzioni, come si dirà fra poco): questa è l'operazione di swap out. I processi ready dovrebbero trovarsi tutti in memoria centrale, per velocizzare il più possibile la transizione degli stati ready - running. Se ciò non è possibile, si deve cercare comunque di fare in modo che lo swap in di un processo sia effettuato prima che lo schedulatore a breve termine lo faccia divenire running. Il processo di volta in volta scelto dallo schedulatore della CPU dovrebbe cioè essere sempre presente in memoria centrale. Se deve essere eseguito un processo che si trova residente nella memoria di massa occorre effettuarne lo swap in e contemporaneamente fare lo swap out di uno dei processi attualmente presenti in memoria, il che costituisce un'evidente inefficienza. In altri termini, se ben gestito, lo swapping consente, a parità di memoria disponibile, un livello di multiprogrammazione più alto; contrariamente può finire con l'aumentare l'overhead del sistema.

La tecnica di swapping trova riscontro un po' in tutte le tecniche di gestione della memoria: memoria a partizioni variabili, memoria paginata, memoria virtuale etc.. Ne esistono inoltre varie interpretazioni, a seconda della tecnica di schedulazione dei processi adottata dal SO. Se vige una disciplina round-robin, ad esempio, trascorso un quanto di tempo il gestore della memoria esegue lo swap out del processo appena terminato e lo swap in di un altro processo nello spazio di memoria centrale che si è così liberato. Nel frattempo, lo schedulatore a breve termine avrà dato la parola ad un altro processo ready, ed è auspicabile che si sia trattato di un processo residente nella memoria centrale. In memoria, cioè, dovrebbero sempre esserci dei processi pronti per essere eseguiti. In presenza di un sistema a priorità lo swapping prende anche il nome di rolling: In tal caso, se giunge un processo a maggiore priorità occorre prerilasciare la memoria occupata dal processo attualmente in esecuzione, eseguendo su di esso uno swap (o roll) out, attendere la terminazione del nuovo arrivato e poi richiamare il processo 'swappato' e continuare con la sua esecuzione.

Si noti che in quest'ultima circostanza lo swap out viene effettuato su di un processo ready. Precedentemente abbiamo accennato allo swap out fatto per un processo che si trova sull'attesa di un'operazione di I/0 (processo wait). Questo però non può essere fatto sempre e comunque, perché potrebbe dar luogo a malfunzionamenti. In particolare, ciò non è possibile se la situazione è tale che l'I/O accede continuamente e in modo asincrono alla memoria utente per leggervi i dati di un processo che ha richiesto un servizio. Se quest'ultimo fosse swappato e se un altro processo occupasse il suo spazio di memoria, l'operazione di I/O potrebbe tentare di usare la memoria che ora appartiene ad una altro processo.

Un processo che è in attesa di un'operazione di I/O può essere swappato solo se le operazioni di ingresso uscita vengono fatte attraverso un'apposita area di memoria del SO, anziché direttamente nell'area di memoria del processo. Il trasferimento dati tra il buffer del SO e la memoria del processo potrà avvenire in un momento posteriore, dopo che il processo sarà stato sottoposto a swap in.



GESTIONE DELLA MEMORIA A PARTIZIONI


Nella memoria centrale sono presenti più processi contemporaneamente, e ogni processo occupa una propria partizione di memoria. Generalmente viene effettuata la seguente distinzione:

1) partizioni fisse: il numero delle possibili partizioni è costante (cioè è un numero ben preciso);

2) partizioni variabili: il numero delle partizioni dipende dalle esigenze dell'utente, e viene quindi determinato dinamicamente. In tal caso questo numero sarà legato alla quantità di processi che è necessario mantenere nello stesso tempo in memoria e dalle esigenze in termini di spazio di memoria di ciascun processo. L'effettiva occupazione di memoria cambierà nel tempo, con la conseguente necessità di gestire opportunamente lo spazio che si viene a liberare o che viene ad essere occupato.

Il sistema delle partizioni fisse si usa solo nei piccoli sistemi, e normalmente in questo caso il programma in memoria è sempre a indirizzi assoluti, anziché relativi; i suoi indirizzi vengono inizializzati al massimo in fase di caricamento. Ben più interessante è la questione della gestione della memoria a partizioni variabili, della quale ci occuperemo nel seguito.



0 K SISTEMA OPERATIVO


UTENTE


SPAZIO LIBERO

512 K


Facciamo almeno un cenno a quella che è la tecnica di gestione a partizioni più semplice possibile e immaginabile: allocazione con partizione singola. In questo modello, il SO risiede nella 'memoria bassa' ed un singolo processo utente è in esecuzione, all'interno della propria partizione,  nella 'memoria alta', come risulta dalla figura precedente (in realtà non ha importanza l'ordine dei segmenti di memoria). Il problema più immediato che questa banale struttura comporta è la possibilità che si abbia una sovrapposizione dell'area di memoria occupata dal SO da parte della partizione utente, ma questo problema può essere agevolmente superato mediante uso opportuno di un registro base e di un registro limite di memoria, come detto in precedenza.


LEZIONE N° 16 (DE CARLINI) - 16/4/1997 




Proseguiamo il discorso sulla gestione della memoria, che abbiamo introdotto in occasione della scorsa lezione. In particolare, abbiamo introdotto la tecnica dell'OVERLAY che aveva lo scopo di consentire che programmi di grosse dimensioni potessero essere  eseguiti in memorie di capacità ridotta.

Una strategia simile a questa consisteva nel conservare in memoria un unico programma ed uno speciale buffer destinato a contenere delle routine di errore, realizzate con lo scopo di mandare il programma in abort. Si trattava di programmi di tipo commerciale dei quali l'80% circa era costituito di routine d'errore. La probabilità di generare un errore dipendeva dalla poca esperienza dell'utente; non appena l'utente imparava a conoscere bene il programma, quest'ultimo 'si stabilizzava'. Le routine d'errore perdevano dunque la loro ragione di esistere, continuando però a occupare inopportunamente spazio in memoria. Oggi una tecnica come questa sarebbe considerata obsoleta.

Abbiamo visto infine la tecnica dello SWAPPING, usata per mantenere più processi in vita contemporaneamente all'interno del sistema, e abbiamo considerato un semplice schema di gestione della memoria: quello dell'allocazione con partizione singola.


Entriamo ora nel merito delle più importanti tecniche di gestione della memoria.





Privacy




Articolo informazione


Hits: 4191
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