|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: May 2009
Messaggi: 17
|
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 |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
|
vabbè che siamo tutti del campo, ma contestualizzare un minimo? ti stai scrivendo un OS tutto tuo?
|
![]() |
![]() |
![]() |
#3 |
Junior Member
Iscritto dal: May 2009
Messaggi: 17
|
perdonami...hai perfettamente ragione
![]() |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Sep 2009
Messaggi: 638
|
Quote:
![]() 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 ![]() 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. ![]() |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:36.