Il caricamento dinamico ridefinisce lo spazio fisico di un processo più volte durante la vita del processo. I processi permanenti del sistema operativo non vengono mai caricati in modo dinamico.
I processi gestiti in modo dinamico non hanno nessun ruolo nella gestione; caricamenti e scaricamenti sono decisi dal sistema operativo, in base ad eventi gestiti dall’hardware (per esempio interruzioni di page fault) e sono invisibili ai processi. Caricamento e scaricamento (swapping) possono riguardare l’intero programma o porzioni del programma (segmenti o pagine).
Quando il caricamento è dinamico, oltre allo spazio fisico deve essere assegnato al processo anche uno spazio su disco in un’apposita area (area di swap). Nell’area di swap viene caricata una copia del programma eseguibile, con codice e dati, che viene poi aggiornata durante l’esecuzione; caricamenti e scaricamenti, totali o parziali, durante l’esecuzione, consistono in trasferimenti dall’area di swap alla memoria principale e viceversa. Il contenuto dell’area di swap è diverso da quello del file che contiene il programma eseguibile; infatti il file non contiene i dati dinamici e non si modifica durante l’esecuzione.
Il meccanismo di swapping rende possibile generare nuovi processi anche quando non c’è memoria sufficiente; basta che sia disponibile l’area di swap; poi il nuovo processo o viene caricato o resta sospeso in attesa del caricamento. Questo meccanismo è indispensabile per l’esecuzione di programmi interattivi (time-sharing) poiché ogni richiesta di esecuzione deve essere prontamente esaudita; non è possibile tenere in coda la richiesta finché si rende disponibile un’area di memoria adatta.
I processi in esecuzione usano oltre alla memoria centrale anche l’area di swap su disco, dando l’impressione di avere a disposizione una memoria molto più grande di quanto sia in realtà (memoria virtuale).
La memoria virtuale è costituita dalla memoria reale e dall’area di swap su disco.
La dimensione della memoria virtuale è limitata solo dalla dimensione degli indirizzi e da quella dall’area di swap.
Se il caricamento dinamico avviene su porzioni del programma, lo spazio fisico di ogni processo è variabile nel tempo e minore dello spazio logico.
La somma degli spazi logici dei processi caricati può essere maggiore della dimensione della memoria fisica; anche la dimensione di un solo processo può superare quella della memoria fisica; cioè si possono mandare in esecuzione programmi più grandi dello spazio di memoria disponibile. In memoria centrale viene mantenuta solo la parte più usata del processo, o almeno la parte del processo che contiene le istruzioni da eseguire al momento, mentre il resto può rimanere su disco e venire caricato solo all’occorrenza, eventualmente scaricando altre parti.
Il caricamento dinamico, in particolare quello su porzioni dei processi, aumenta il numero di processi che possono essere in esecuzione contemporaneamente. Il tempo di esecuzione dei processi (dall’inizio alla fine del processo) però aumenta per i ritardi dovuti ai tempi di caricamento necessari quando il processo passa in stato di esecuzione. Se sono presenti in memoria troppi programmi contemporaneamente le prestazioni del sistema possono scendere a un livello molto basso per l’overhead dovuto al continuo swapping e alla gestione delle tabelle necessarie.