Il programma viene scritto in codice sorgente e poi tradotto in linguaggio macchina per creare il modulo oggetto; per creare il programma eseguibile i moduli oggetto vengono collegati dal linker che definisce lo spazio logico del programma, supponendo la collocazione in un’area di memoria predefinita. Il programma eseguibile viene memorizzato in un file su disco da dove può essere richiamato per l’esecuzione.
Ogni programma eseguibile occupa uno spazio logico di memoria che può utilizzare il modello contiguo o il modello a segmenti. Per essere eseguito, il programma, in formato eseguibile, deve essere caricato almeno parzialmente in memoria occupando uno spazio fisico (che rappresenta l’immagine del processo durante l’esecuzione), che in genere è diverso dallo spazio logico. Lo spazio fisico viene assegnato e gestito dal gestore della memoria che amministra lo spazio disponibile.
Durante l’esecuzione gli accessi alla memoria possono avvenire solo specificando un indirizzo fisico. Ogni indirizzo logico viene tradotto in un indirizzo fisico per effetto della rilocazione, che può essere statica se effettuata dal programma caricatore al momento del caricamento del programma, o dinamica se effettuata per ogni indirizzo durante l’esecuzione usando meccanismi del processore.