La memoria principale è divisa in due partizioni, assegnate rispettivamente al SO e ai processi. Il SO si colloca nella stessa area di memoria puntata dal vettore delle interruzioni, che di solito è in memoria “bassa”. L’area non assegnata al SO può essere occupata da un solo processo oppure divisa in partizioni di dimensione fissa (ma non tutte uguali!). Ogni partizione contiene un unico processo, dall’inizio alla fine dell’esecuzione Il numero delle partizioni stabilisce il grado di multiprogrammazione. Quando un processo termina, il suo posto può essere preso da un altro processo. Attualmente non è più in uso perché presenta troppi problemi e il grado di multiprogrammazione è limitato dal numero di partizioni previste. Difficilmente un processo messo in una partizione ha esattamente la dimensione di quella partizione e quindi la parte che rimane viene sprecata.
Questo problema si chiama Frammentazione Interna. Altrimenti può capitare che arriva un processo di 210 Kb, lo spazio c’è ma non è contiguo, e non si può usare.
Questo problema si chiama Frammentazione Esterna. L’allocazione a partizioni fisse ha anche altri problemi, per esempio che succede se arriva un processo più grande della partizione più grande? Per risolvere questo problema si può adottare una partizioni a dimensione variabile: un processo riceve una quantità di memoria pari alla sua dimensione.
Però, anche se potrebbe sembrare la frammentazione interna non scompare. Quando un processo termina lascia un “buco” in MP un altro processo può occupare una parte del buco.
Col tempo si formano buchi sparsi sempre più piccoli e difficili da riempire... Il SO deve ovviamente tenere una traccia aggiornata di tutti i buchi liberi ed occupati. Quando un processo deve usare la MP, il SO deve assegnargli una partizione di dimensione sufficiente, se ce n’è una... Per recuperare i buchi di MP inutilizzati si compatta la memoria, spostiamo le immagini dei processi in MP in modo che le queste siano tutte contigue fra di loro. Si forma così un unico grande buco libero. Il compattamento richiede rilocazione dei processi, sia del codice che dei dati. Questo quindi è possibile solo se si usa codice dinamicamente rilocabile. Inoltre la compattazione può richiedere molto tempo e lavoro al SO, durante il quale la compattazione il sistema è inusabile. L’allocazione contigua della MP è problematica e l’unica alternativa è ammettere che l’area di memoria allocata ad un processo possa essere in realtà suddivisa in tanti pezzi non contigui fra loro. Se tutti i “pezzi” hanno la stessa dimensione allora il termine esatto per indicare questa tecnica è: paginazione della memoria (primaria).
Tutto quanto riportato in questa pagina è a puro scopo informativo personale. Se non ti trovi in accordo con quanto riportato nella pagina, vuoi fare delle precisazioni, vuoi fare delle aggiunte o hai delle proposte e dei consigli da dare, puoi farlo mandando un email. Ogni indicazione è fondamentale per la continua crescita del sito.