View Full Version : Paginazione e protezione della tabella delle pagine
ciao a tutti,
avrei dei dubbi riguardo la gestione della memoria(nel caso non fosse un topic coerente..mi sapreste indicare dove postare la discussione?).
Il mio problema riguarda la protezione della tabella delle pagine. Entrando nello specifico, in una page table ogni entry presenta vari bit tra cui quello di R/W. Se non viene settato, questo rende la entry,e quindi la pagina, read-only,altrimenti, se settato, viene abilitata la possibilità di scrittutra sulla pagina. Ciò che turba i miei sonni Smiley è la protezione della page table in toto. Cosa dovrei settare per proteggere tutta la tabella delle pagine?dovrei modificare il bit di R/W della page page directory entry che punta a quella tabella?ma a quel punto, non devo proteggere in scrittura anche la page directory entry?e se si(ma anche se non fosse così)come si fà?e per proteggere tutta la page directory?c'entra qualcosa il write protection del registro di processore CR0?
grazie in anticipo
Kralizek
28-07-2011, 18:11
vabbè che siamo tutti del campo, ma contestualizzare un minimo? ti stai scrivendo un OS tutto tuo?
perdonami...hai perfettamente ragione :)!!!stò cercando di capire come funziona la gestione della memoria su VirtualBox. Ora, da quello che ho appreso, questo SW, per mantenere consistenti le tabelle delle pagine del guest O.S. e le shadow page tables(tabelle delle pagine mantenute dall'hypervisor) rende le guest PT read only in modo che qualsiasi tentativo in scrittura del guest venga trappato tramite un #PF. Quello che però non sò è come si fà a proteggere tutta una page table, mi spiego:se modifico il bit R/W della page table entry vado a proteggere in scrittura la pagina puntata dalla entry. E per proteggere tutta la tabella delle pagine che dovrei fare?settare il bit R/W della page DIrectory entry???ma a questo punto dovrei proteggere in scrittura anche la page directory(altrimenti il guest ci potrebbe accedere e modificare ad esempio i bit di R/W della entry e quindi vanificare il tutto). E la page directory come si protegge? Alla fine è una tabella puntata da CR3 che contiene nient'altro il suo indirizzo. Come faccio a dire che è protetta? Ecco perchè ho chiesto del settaggio del bit di Write Protection del registro CR0, perchè a mio parere in questo modo metto in write protection tutta la memoria per la macchina virtuale e proteggo anche le page table. Ho cercato di essere il più chiaro possibile...spero di esserci riuscito
Ora, da quello che ho appreso, questo SW, per mantenere consistenti le tabelle delle pagine del guest O.S. e le shadow page tables(tabelle delle pagine mantenute dall'hypervisor) rende le guest PT read only in modo che qualsiasi tentativo in scrittura del guest venga trappato tramite un #PF.
Secondo me stai cercando nel posto sbagliato. :)
Proprio come hai detto te, quando il guest cerca di accedere ai descrittori delle pagine in scrittura, si genera un Page Fault.
Ora, premetto che non so come funziona VirtualBox, ma sono quasi, al 99% sicuro che è in questo modo; preparati a un po' di Inception :D.
Il guest viene eseguito in un ambiente limitato, cioè nella user mode dell'host. Questo ambiente è uno spazio virtuale, gestito dall'host. Le tabelle di paginazione del guest sono memorizzate in pagine dell'host, che vengono protette dall'host, attraverso le tabelle di paginazione dell'host.
Quindi, quando il guest cerca di accedere alle SUE tabelle di paginazione (del guest), viene generato un page fault nella pagina dell'HOST, perchè è la pagina dell'HOST che è protetta da scrittura. Il guest non se ne accorge del fault, e non deve, perchè nella realtà, quando accede alle sue tabelle, può scrivere tranquillamente (sempre che siano verificate altre condizioni che per questo discorso non sono rilevanti).
Quindi, ricapitolando, ci sono 2 serie di tabelle di paginazione: quelle in uso dal processore reale della macchina Host (gestite dal sistema operativo dell'host), e quelle del sistema guest. L'hypervisor impedisce al guest di accedere alle tabelle del guest, impostando i bit di R/W nelle tabelle dell'Host. Il guest non si accorge di tutto questo.
Scusa le ripetizioni ma le ho messe per evitare qualsiasi equivoco, spero di essere stato chiaro. :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.