Al momento dellesecuzione ogni programma deve risiedere,
almeno in parte, nella memoria centrale.
In un sistema monoprogrammato, questa condizione può essere facilmente
soddisfatta imponendo un limite alla dimensione massima che un processo
può avere; soluzione, questa, certamente non elegante e poco efficiente.
La situazione si aggrava nei sistemi multiprogrammati, in cui un
numero imprecisato di processi aventi dimensioni variabili possono
contemporaneamente contendersi il processore per lesecuzione.
La contesa fra i vari processi riguarda naturalmente anche la memoria
e il SO deve fornire dei meccanismi per tenere conto delle parti
di memoria utilizzate e di quelle libere, per allocare memoria ai
processi quando ne hanno bisogno e deallocarla quando hanno finito,
e infine per gestire gli scambi fra la memoria principale e il disco,
quando la memoria non è sufficiente a contenere tutti i processi.
Infatti, con il timesharing, ad un sistema sono normalmente collegati
tanti utenti e la memoria non è in grado di contenere tutti i loro
processi, rendendo così necessario scaricarne alcuni su disco.
Per far girare i processi che ad un dato istante risiedono nel disco,
è necessario che essi vengano caricati in memoria: loperazione
relativa allo spostamento di processi dalla memoria al disco e viceversa
prende il nome di swapping (scambio) e il modulo del SO che
se ne occupa si chiama swapper.
Alcuni sistemi operativi (ad es. Linux) richiedono una partizione
dellhard disk dedicata esclusivamente a questo scopo, mentre
altri sistemi (ad es. Windows) creano ed utilizzano un file particolare
(in Windows questo file si chiama Win386.swp e si trova nella directory
C:\WINDOWS\).
Per permettere a più processi di risiedere contemporaneamente in
memoria, questa viene divisa in partizioni o regioni,
ossia porzioni di celle di memoria contigue, che possono essere
di dimensioni fisse o variabili, secondo le scelte fatte da chi
sviluppa il sistema.
La maggior parte dei sistemi attuali utilizza partizioni variabili,
perché presentano una maggiore flessibilità, resa necessaria dal
fatto che i processi hanno dimensioni molto diverse tra loro e non
tutti richiedono la stessa quantità di memoria per poter eseguire.
Inoltre gran parte dei processi cambia dinamicamente la propria
dimensione durante lesecuzione, richiedendo di volta in volta
una quantità di memoria variabile e, spesso, non predicibile.
Occorre notare che, a seguito dello swapping, un processo non occupa
sempre le stesse le regioni di memoria, anzi, la cosa più probabile
è che ogni volta che il processo viene rimesso in memoria dal dispositivo
di swap (swap device), il SO gli assegnerà regioni differenti,
in relazione alla situazione di occupazione della memoria al momento
in cui viene richiesto il caricamento di quel processo.
Riguardo allo spazio di swap, lallocazione può avere caratteristiche
differenti da sistema a sistema: alcuni non allocano spazio sullo
swap device fino a che il processo non viene scaricato e ad ogni
scaricamento questo può essere piazzato in una zona diversa del
disco; altri sistemi al momento della creazione del processo gli
riservano spazio per lo swap sul disco, cosicché esso occuperà sempre
lo spazio che gli è stato assegnato.
In questultimo caso, quando il processo termina lo spazio
viene liberato.
Lo swapping puro prevede che il caricamento e lo scaricamento di
un processo avvenga per intero.
Esiste però una soluzione alternativa che tiene conto di una caratteristica
comune a tutti i processi: ad un dato istante ogni processo esegue
utilizzando solo un sottoinsieme del suo spazio di indirizzamento.
Lo spazio di indirizzamento è linsieme degli indirizzi
di memoria generati da un programma.
Ad un dato istante, un programma in esecuzione utilizza solo gli
indirizzi relativi alle istruzioni che esegue in quel momento, per
cui si potrebbe pensare di tenere in memoria solo il sottoinsieme
di indirizzi necessario, evitando di occupare la memoria con informazioni
non necessarie.
Su questa importante proprietà si basa il metodo della memoria
virtuale, di cui discuteremo nella prossima lezione.
Torna all'indice Generale del corso di Corso di Sistemi Operativi di Software Planet