Paging in IA-32: Spieghiamo gli indirizzi “Ricorsivi”

Uno degli argomenti più ostici nell’osdev è la gestione della memoria paginata. E personalmente ci ho messo a capire un pò l’utilità dell’utilizzo dei cosidetti indirizzi logici “ricorsivi”. In questo articolo cercherò di spiegarne l’utilità e perche conviene utilizzarli.

La memoria paginata è una particolare suddivsione della memoria in blocchi di dimensione fissa, normalmente di 4k o 8k. Questo tipo di suddivisione è supportato dall’architettura IA32 anche se non si tratta del modello di default. Infatti i processori intel utilizzano sempre un modello di memoria segmentato, mentre quello paginato si attiva solo su richiesta.

Lo scopo di questo tutorial non è spiegare la paginazione per i processori IA32 ma cerca di chiarire una tecnica particolare usata con la paginazione attiva, quindi qui non troverete un tutorial  dettagliato su  come funziona la paginazione, ma mi limiterò ricordare solo lo stretto necessario utile per i miei scopi . Le strutture fondamentali usate nella memoria paginata sono la pagedir e la pagetable.

  • Una page dir è composta da 1024 elementi che puntano ognuna a ad una pagetable.
  • Una pagetable che strutturalmente è molto simile alla pagedir, contiene sempre 1024 elementi ma questa volta contengono l’indirizzo base di ogni pagina

La figura seguente mostra come sono formate rispettrivamente le entry della pagedir e della pagetable

Come potete notare, le due entry sono pressochè identiche a parte alcuni bit di controllo (fra poco vedremo come questa somiglianza ci tornerà utile).

Continua a leggere Paging in IA-32: Spieghiamo gli indirizzi “Ricorsivi”