Lo spazio fisico assegnato a un programma è strutturato secondo il modello di caricamento del sistema operativo; il modello dello spazio fisico permette di gestire in modo efficiente e flessibile lo spazio di memoria.
Nei modelli di caricamento può variare l’unità di assegnazione della memoria e la modalità statica o dinamica.
Come unità di assegnazione della memoria si può avere il byte (e allora le assegnazioni avvengono sotto forma di partizioni, una o più, non necessariamente contigue) oppure blocchi di numeri fissi di byte (nei metodi a paginazione).
Nel caricamento statico il programma è caricato per intero e risiede sempre in memoria per tutto il tempo dell’esecuzione. Nel caricamento dinamico lo spazio fisico può essere ridefinito più volte e il programma può venire caricato e scaricato più volte; nelle forme più semplici viene caricato e scaricato tutto il programma, in altri casi possono essere caricate e scaricate porzioni del programma (segmenti o pagine). Per il caricamento dinamico è indispensabile la rilocazione dinamica.
Un processo avanza più velocemente se è caricato per intero e risiede sempre in memoria; però se non c’è più spazio di memoria non possono essere creati altri processi (i processi per essere eseguiti devono sempre essere caricati almeno parzialmente in memoria). Il caricamento dinamico permette sempre di caricare un processo e quindi di avviarne l’esecuzione; ciò è indispensabile per i processi interattivi.
Una parte della memoria (che può essere costituita in parte da ROM e in parte da RAM) è assegnata in modo permanente e riservata al sistema operativo (per codice e dati del nucleo e di altri processi permanenti). Tolta questa, resta la memoria disponibile. L’area libera di memoria può essere utilizzata dai programmi applicativi (per codice e dati). Una parte della memoria può rimanere inutilizzata.