Rieccomi, scusate il ritardo ma ho avuto casini vari, nn ultimo il mio xp ke simpaticamente è morto costrigendomi a reinstallarlo (tmepo record, in un'ora avevo sistema e applicazioni varie, ormai lo potrei fare a okki kiusi
)
E' arrivato il momento ke vi parli dell'MMU: questo è un acronimo ke sta x Memory Management Unit, e come potete capire dal nome è l'unità ke si preoccupa di effettuare la famosa traduzione da indirizzo logico a fisico di cui abbiamo già parlato... come avviene questa traduzione? Sappiamo già ke dobbiamo usare la tabella di rilocazione ke il loader ha provveduto a riempire x noi....
Il nostro scopo è di nn far "vedere" al processore ke l'indirizzo da lui rikiesto (ke è logico!) va in realtà tradotto in un indirizzo fisico... in questo modo il processore è "svincolato" dalla tecnica usata per gestire la memoria virtuale (ke in questo contesto vi ricordo ke NON è quella di windows, parliamo di cose diverse).
Allora, dobbiamo usare questa benedetta tabella di rilocazione e x far questo l'MMU deve averne una copia in una sua memoria veloce interna... in particolare x aumentare l'efficienza della traduzione dell'indirizzo viene usata una memoria di tipo associativo, x ora nn preoccupatevi di sapere cos'è, magari si farà un post apposito x spiegarlo x bene, vi basti sapere ke è + veloce e anke + costosa della memoria "normale" dove con memoria normale si intende in questo caso qualcosa tipo i registri del processore... siccome come vi ho detto questa memoria è costosa in genere nn la si fa sufficientemente grande per contenere tutta la tabella di rilocazione... come si fa? Ora capirete meglio, vi illustrerò il meccanismo alla base della traduzione:
1) Il processore genera l'indirizzo logico e kiede una determinata parola.
2) La rikiesta arriva all'MMU, possono verificarsi 2 possibilità, ke la riga della tabella di rilocazione ke ci serve x tradurre questo indirizzo sia all'interno della memoria dell'MMU o ke nn ci sia...
3) Se la riga nn c'è l'MMU decide di sostituire un'altra riga ke ha al suo interno con quella ke ci occorre ke viene rikiesta direttamente alla memoria, appena la riga è presente nella memoria interna si procede con la traduzione
4) La traduzione consiste nel vedere l'indirizzo fisico corrispondente all'indirizzo logico kiesto dal processore. Se la pagina ke contiene quella parola è presente in memoria si inoltra la rikiesta alla memoria ke provvederà a fornirla all'MMU ke la passa poi al processore.
5) Se la pagina nn è presente in memoria centrale l'MMU genera quella ke si kiama un'"eccezione di fault di memoria virtuale"... in pratica dice al processore ke la pagina nn c'è e va messa in memoria, a questo punto una parte del sistema operatico si preoccupa di rendere disponibile in memoria la pagina, appena questo avviene il processore rifarà la rikiesta all'MMU e stavolta otterrà la parola rikiesta.
Notate ke a meno di fault il processore è ignaro di tutto quello ke succede, infatti l'MMU e la memoria parlano tra loro direttamente...
Ditemi se avete capito tutto xkè in seguito torneremo a parlare di queste cose quando approfondiremo il discorso su "come è fatto un programma e come il processore lo esegue" e quando introdurremo la cache