gdt.c
u0.2
gdt.h
u0.2
gdt_desc_seg.c
u0.2
gdt_load.s
u0.2
gdt_print.c
u0.2
La preparazione di una tabella GDT è indispensabile per poter accedere alla memoria in modalità protetta. Nel sistema in corso di realizzazione si intende usare la memoria in modo lineare, senza segmentazioni e senza pagine, pertanto si compila la tabella GDT con il minimo indispensabile, avendo cura di indicare in modo preciso la memoria esistente effettivamente.
Nel file di intestazione os.h
è già stata predisposta la struttura che facilita la compilazione e l'interpretazione dei descrittori della tabella GDT. In particolare viene usata un'unione, con due suddivisioni alternative: una per i descrittori di segmento codice o dati e l'altra per i descrittori di sistema. Per il lavoro in corso di realizzazione, i descrittori di sistema non vengono utilizzati, pertanto è sufficiente concentrarsi sulla struttura os.gdt[n].cd:
|
Il file di intestazione gdt.h
contiene la dichiarazione delle funzioni che riguardano la gestione della tabella GDT.
|
La funzione gdt_desc_seg() serve a facilitare la compilazione di un descrittore della tabella; la funzione gdt_print() consente di visualizzare il contenuto della tabella, partendo dal contenuto del registro GDTR, indipendentemente da altre informazioni; la funzione gdt_load() fa in modo che il microprocessore utilizzi il contenuto della tabella GDT; la funzione gdt(), avvalendosi delle altre funzioni già citate, crea la tabella minima richiesta, ne mostra il contenuto e la attiva.
|
|
|
|
Nel file kernel_main.c
va aggiunta l'incorporazione del file gdt.h
e la chiamata alla funzione gdt():
|
Una volta ricompilato il lavoro e avviato con Bochs, si deve ottenere una schermata simile a quella seguente:
|
«a2» 2013.11.11 --- Copyright © Daniele Giacomini -- appunti2@gmail.com http://informaticalibera.net