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). la Memoria Primaria è divisa in “pezzi” detti frame (o pagine fisiche), tutti della stessa dimensione (una potenza di due). Lo spazio di indirizzamento virtuale (o logico) è sempre visto come uno spazio di indirizzamento contiguo (es.: indirizzi da 000000 a 111111), ma è logicamente diviso in pagine di dimensione identica ai frame. Per poter eseguire un processo che occupa n pagine, il SO cerca n frame liberi in cui copiare le pagine, qualsiasi gruppo di frame liberi va bene, anche se i frame non sono adiacenti. Ad ogni processo è associata una tabella delle pagine (di fatto, un array) che contiene i numeri dei frame usati per memorizzare le pagine del processo. Il SO tiene anche traccia di tutti i frame liberi.
Ogni indirizzo logico è formato da due parti:
Numero di Pagina (p): usato come indice per selezionare la entry della Page Table in cui si trova l’indirizzo base del frame in cui è caricata la pagina.
Offset di Pagina (d): che viene sommato all’indirizzo base per generare l’indirizzo fisico.
La forma di un generico indirizzo logico è quindi del tipo: (pagina, offset).
Per esempio avendo delle pagine di 4 byte e avendo un programma lungo 3 pagine: abcdefghilmn lo spazio di indirizzamento logico sarà questo:
Gli indirizzi logici vanno da 0000 (0) a 1011 (11). La paginazione separa nettamente lo spazio di indirizzamento logico da quello fisico. Il programma “vede” la memoria come uno spazio di indirizzamento contiguo che incomincia all’indirizzo logico 0. In realtà, il programma è “sparso” in tanti pezzettini (i frame) nella memoria fisica, insieme ad altri programmi. La paginazione evita la frammentazione esterna: qualsiasi frame libero può essere usato per contenere una pagina. La frammentazione interna è in media di mezza pagina per processo, infatti l’ultima pagina può non essere spesso occupata completamente. Storicamente, la dimensione delle pagine è aumentata col tempo. Attualmente si usano pagine di 4096, 8192 e anche 16384 byte. Pagine più grandi producono maggiore frammentazione interna, ma permettono di avere delle tabelle delle pagine più corte.
Dato che ogni accesso alla MP passa attraverso il sistema di paginazione, il meccanismo di traduzione degli indirizzi da logici a fisici deve essere efficiente Il problema fondamentale riguarda la gestione della tabella delle pagine (Page Table, PT) Ogni indirizzo logico che esce dalla CPU deve passare attraverso una entry della PT. L’accesso alla PT deve quindi essere veloce. C’è un problema più grave: per leggere un dato all’indirizzo logico I, occorre prima accedere alla RAM per recuperare il numero del frame e calcolare l’indirizzo fisico (per la traduzione occorre sapere quanti frame ho e la dimensione della memoria), e poi usarlo per leggere il dato vero e proprio. Il numero di accessi alla MP RADDOPPIA!!! La soluzione consiste nell’ usare un registro della CPU che contenga l’indirizzo di partenza della PT del processo attivo: il page-table base register (PTBR). (al context switch basta modificare il PTBR per passare alla PT del processo che viene mandato in CPU. Inoltre si può usare una tecnica di caching della PT mediante una memoria associativa detta translation lookaside buffer (TLB). Quando viene generato un indirizzo logico, il numero di pagina è presentato al TLB per ricavare il frame relativo. Il dispositivo è molto veloce e costoso, e le dimensioni sono quindi ridotte (64 -- 1024 elementi). Se la ricerca ha successo (hit) si ha una penalizzazione circa del 10% del tempo di accesso alla memoria . Se la ricerca fallisce (miss) allora occorre usare la PT in memoria primaria. In molti sistemi le pagine possono essere protette da opportuni bit affiancati alla tabella delle pagine, per proteggerle in lettura o scrittura.
Quando si cambia contesto bisogna svuotare o cambiare il TLB con le pagine del nuovo processo, altrimenti la traduzione sarebbe errata.
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.