2015-04-29 10 views
9

Ho sentito il termine spazio degli indirizzi spesso nel paradigma dei microprocessori e dei microcontrollori. Capisco che un indirizzo è usato per riferirsi a un particolare blocco di memoria nella memoria fisica (primaria).Differenza tra la tabella delle pagine e la directory delle pagine

Se ho ragione e lo spazio indirizzo è il super set di tutti questi indirizzi. Destra?

Utilizzando memoria virtuale/paging stiamo estendendo lo spazio degli indirizzi utilizzando la memoria secondaria.

In questo paradigma cos'è esattamente una tabella di pagina, una voce della tabella di pagina e una directory della pagina? Capisco che prima p.memory sia segmentato e logicamente e questi segmenti sono divisi in pagine. Quindi cos'è esattamente una tabella di pagine? Una tabella contenente Pages? E cos'è una directory di pagina una super tabella di Page Table?

+0

Sede [osdev.org] (http://wiki.osdev.org/Paging) o il manuale ufficiale di Intel. – Jester

risposta

18

Nell'architettura x86, le directory di pagina e le tabelle di pagina forniscono insieme il mapping tra gli indirizzi virtuali (indirizzi di memoria utilizzati dalle applicazioni) e gli indirizzi fisici (posizioni effettive nell'hardware della memoria fisica).

A pagina è semplicemente un pezzo contiguo di memoria. x86 (32 bit) supporta 3 dimensioni di pagine: 4 MB, 2 MB e 4K B, quest'ultimo è il più utilizzato nei sistemi operativi tradizionali. Una tabella di pagina è una matrice di voci 1024 * a 32 bit (che si adattano comodamente a una singola pagina 4KB). Ogni voce punta all'indirizzo fisico di una pagina. Poiché una tabella a pagina singola non è in grado di rappresentare l'intero spazio indirizzo da sola (1024 voci * 4KB = solo 22 bit di spazio indirizzo), è necessaria una tabella di pagina di secondo livello: una directory di pagina . Una directory di pagina comprende anche 1024 * voci a 32 bit (che si adattano di nuovo a una singola pagina), ciascuna delle quali punta a una tabella di pagina. Possiamo vedere che ora 1024 * 1024 * 4KB = 32-bit e con questa struttura a 3 livelli siamo in grado di mappare l'intero spazio di indirizzi virtuali da 4 GB.

Quando alla CPU viene richiesto di accedere a un indirizzo virtuale, utilizza i 10 bit di ordine più alto (31:22) per indicizzare nella tabella di directory della pagina (il cui indirizzo di base è memorizzato in un registro speciale). I successivi 10 bit di ordine più alto (21:12) vengono utilizzati per indicizzare nella tabella della pagina indicata dalla voce della directory della pagina. I 12 bit di ordine più basso (11: 0) vengono infine utilizzati per indicizzare un byte nella pagina indicata dalla voce della tabella di pagina.

In altri sistemi potrebbero essere disponibili più o meno livelli di tabella di pagina, a seconda delle dimensioni dello spazio degli indirizzi virtuali e delle dimensioni di pagina supportate. Ad esempio, x86 con 4 MB di pagine richiede solo una singola directory di pagina. In modalità 64 bit con pagine 4KB, viene utilizzato un sistema a 4 livelli: una tabella di livello di mappatura pagina 4 contiene voci che puntano a una delle numerose directory di pagina.

Il Intel Architectures Developer's Manual ha molte più informazioni sull'argomento, in particolare nei capitoli 3 e 4.

+1

Ma ciò non significa che quando 2 programmi diversi provano ad accedere all'indirizzo virtuale 0x0041FF10, otterranno lo stesso indirizzo fisico? La CPU prende lo stesso numero di bit per l'indicizzazione dello stesso indirizzo virtuale, che si traduce in indici uguali. –

+1

Il sistema operativo manterrà in genere directory e tabelle di pagine separate per ogni processo, fornendo diversi mapping da indirizzi virtuali a indirizzi fisici. Ricorda che l'indirizzo di base della directory della pagina corrente è memorizzato in un registro speciale. Il valore in questo registro viene modificato dal sistema operativo durante un cambio di contesto in un altro processo. Pertanto, sebbene gli indici siano uguali per il processo A e il processo B, vengono indicizzati in diverse directory di pagina. – peterdn

+0

Su Intel x86, che è controllato tramite il registro CR3. –