Istruzioni per l'uso del nucleo

Introduzione

Il programma è composto dai moduli sistema, io e utente. Tutti e tre i moduli sono caricati in memoria da un boot loader (useremo lo stesso usato per gli esempiI/O). Il modulo io contiene i processi esterni delle periferiche (in questa versione, solo la tastiera, il video in modalità testo, gli hard disk a interruzione di programma e bus mastering). Altre periferiche possono essere aggiunte modificando il modulo di io stesso.

Il modulo utente contiene il programma che il nucleo dovrà eseguire. Il sistema verrà eseguito su un emulatore (QEMU).

1. Scaricare i sorgenti

Se non ancora fatto, installare la libreria libce seguendo le istruzioni.

Se non ancora fatto, installare QEMU seguendo le istruzioni.

Scaricare il file nucleo-7.1.1.tar.gz e scompattarlo in una directory qualsiasi:

	tar xvf nucleo-7.1.1.tar.gz
Verrà creata la directory nucleo-7.1.1, contenente tutti i file necessari.

Portarsi nella directory nucleo-7.1.1:

	cd nucleo-7.1.1

2. Scrivere un programma utente

I programmi utente vanno scritti in C++ nel file utente/utente.cpp e compilati. Nello scrivere i programmi utente tenete presente che potete usare esclusivamente le funzioni di libreria dichiarate in utente/lib.h e le primitive di sistema dichiarate in include/sys.h e include/io.h. È possibile anche usare le funzioni di libce.h che non accedono direttamente all'I/O o ai registri privilegiati del processore. Alcuni programmi di esempio si trovano nella directory utente/examples. Per provare gli esempi copiate il relativo file rinominandolo in utente/utente.cpp.

Una volta preparato il file utente/utente.cpp procedete a compilare tramite

	make
Se tutto funziona, verranno creati (o ricreati) i file: In ogni caso, se lanciate make senza aver fatto modifiche, il programma capirà che non è necessario ricompilare niente e ve lo dirà.

3. Avviare il sistema

Lanciare lo script boot nella directory nucleo:
	boot
Lo script avvia la macchina virtuale in modo che esegua il boot loader. Il boot loader abiliterà il modo a 64 bit, caricherà il programma build/sistema e salterà all'etichetta start (in sistema/sistema.s). I messaggi che si vedono sul terminale da cui si è lanciato boot sono i messaggi che arrivano dalla porta seriale della macchina virtuale. I primi sono inviati dal boot loader; poi, quando il boot loader salta al nucleo, i messaggi che si vedono sono quelli che, nel codice del nucleo, sono passati alla funzione flog.

4. Utilizzo del debugger

Per usare il debugger è sufficiente passare il parametro -g allo script boot:
	boot -g
Quindi, da un altro terminale, ci si deve portare nella directory che contiene il nucleo e scrivere:
	debug
Verrà avviato il debugger gdb insieme ad alcune estensioni utili per il debugging del nucleo. A questo punto è possibile inserire breakpoint, eseguire le istruzioni una alla volta, esaminare le variabili etc.

gdb fornisce un help in-linea che si può richiamare tramite il comando help. Alcuni comandi utili:

Con il comando set è possibile anche definire variabili di gdb. Il nome delle variabili di gdb deve cominciare con $. Una volta definite possono essere usate come le altre, ma non è possibile prenderne l'indirizzo (quindi, in particolare non possono essere passate come argomento a funzioni del programma che vogliono un riferimento).

4.1. Estensioni al debugger

Nella cartella debug/nucleo.py sono definite delle estensioni al debugger specifiche per il nucleo.

Le estensioni definiscono alcuni nuovi comandi che si spera facilitino la comprensione del funzionamento del nucleo, e magari anche la soluzione degli esercizi. I comandi sono i seguenti:

Altri comandi sono forniti dalla libce e possono essere usati anche per il nucleo: Inoltre, alcuni tipi vengono mostrati in modo speciale:

Powered by apache Powered by Gentoo Linux Powered by MariaDB Powered by PHP Powered by Perl Site written in vi