2011-01-28 10 views
7

Considerando Linux e 32 bit x86 arch c'è una divisione 3: 1 dello spazio di indirizzamento da 4 GB accessibile. Lo spazio utente è assegnato a 0-3 Gb mentre 3-4 Gb è assegnato al kernel. In che modo un indirizzo virtuale maggiore di 3Gb e quindi nello spazio degli indirizzi del kernel viene trasformato nell'indirizzo fisico? Le tabelle di pagina verrebbero visualizzate?kernel virtual address translation

risposta

5

Ci sono alcune informazioni nel libro di Mel Gorman Understanding the Linux Virtual Memory Manager.

La risposta breve: Sì, il kernel imposta le tabelle di pagina per tradurre l'indirizzo fisico 0 in indirizzo virtuale 3 GiB. (Sezione 3.7.1). Ciò include la posizione fisica in cui è stato caricato il kernel (solitamente 1 MB su x86).

+0

Grazie per la risposta. Dopo aver fatto un po 'di ricerca su google ho scoperto che esiste un #define PAGE_OFFSET che è 3GB (configurabile) e l'indirizzo virtuale del kernel ha una corrispondenza con l'indirizzo fisico ottenuto sottraendo semplicemente PAGE_OFFSET dall'indirizzo virtuale del kernel e quindi nessun uso delle tabelle di pagina. Perfavore, correggimi se sbaglio. – user593575

+1

Questa semplice mappatura rende facile l'implementazione di virt_to_phys(): come hai detto, basta sottrarre PAGE_OFFSET. Ma il paging è abilitato-- questo consente la traduzione di indirizzi virtuali in hardware fisico, in quanto le istruzioni vengono recuperate e si accede ai dati. –

+0

Ho capito il tuo punto. Le tabelle di pagina vengono sempre utilizzate quando l'impaginazione è abilitata, a prescindere che l'indirizzo virtuale appartenga al kernel o allo spazio utente. (Ahimè !!! Non posso votare perché richiede un minimo di 15 punti) – user593575