Istruzioni per l'uso del nucleo

Introduzione

Il programma è composto dai moduli sistema, io e utente. Il modulo sistema deve essere caricato in memoria da un boot loader (useremo lo stesso usato per gli esempiI/O) mentre il modulo io e il modulo utente devono essere caricati da una partizione di swap.

Il modulo io contiene i processi esterni delle periferiche (in questa versione, solo le porte seriali, 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. Tale programma può essere scritto in C++ e, eventualmente, usare i costrutti process, semaphore etc. introdotti nel capitolo 8.3 del Volume IV.

Una volta costruiti, il modulo utente e il modulo io devono essere copiati nella partizione di swap.

Si può eseguire il nucleo sia sulla macchina reale (sconsigliato), sia su un emulatore. Usando un emulatore, la partizione di swap verrà simulata da un normale file.

1. Scaricare i sorgenti

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

Verrà creata la directory nucleo, contenente tutti i file necessari.

Portarsi nella directory nucleo:

2. Costruire il modulo sistema e i programmi di utilità

Eseguire il comando make:

Se tutto funziona, verrano costruiti i seguenti file: L'operazione make deve essere rieseguita solo se si modifica il modulo sistema. In ogni caso, se lanciate make senza aver fatto modifiche, il programma capirà che non è necessario ricompilare niente e ve lo dirà.

3. Scrivere un programma utente

I passi seguenti vanno eseguiti ogni volta che si vuole provare un nuovo programma utente o si modifica il modulo I/O.

I programmi utente vanno scritti in C++, compilati e copiati nella partizione di swap. Nello scrivere i programmi utente tenete presente che potete usare esclusivamente le funzioni di libreria dichiarate in utente/include/lib.h e le primitive di sistema dichiarate in utente/include/sys.h. Alcuni programmi di esempio si trovano nella directory utente/examples. I programmi di esempio sono scritti utilizzando le parole chiave process, semaphpore etc., e vanno preprocessati tramite lo strumento parse, costruito al passo 1 (infatti, possiedono l'estensione .in, che ricorda che non si tratta di programmi scritti soltanto in C++). Se decidete di usare questi costrutti non dovete scrivere la funzione main e il file utente.cpp (verranno generati automaticamente da parse), altrimenti dovrete scrivere il file utente.cpp, contenente la funzione main, che dovrà creare tutti i processi e allocare tutti i semafori che vorrete usare.

Se scrivete i vostri programmi nella directory utente/prog (o vi copiate uno o più degli esempi), potete procedere alla compilazione nel seguente modo:

Se tutto funziona, verranno creati (o ricreati) i file:

4. Avviare il sistema

Lanciare lo script run nella directory nucleo: 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 ./run 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. Per usare il debugger è sufficiente passare il parametro -g allo script ./run: Quindi, da un altro terminale, ci si deve portare nella directory che contiene il nucleo e scrivere: A questo punto è possibile inserire breakpoint, eseguire le istruzioni una alla volta, esaminare le variabili etc.

Powered by apache Powered by Gentoo Linux Powered by MySQL Powered by PHP Powered by Perl Site written in vi Valid HTML 4.01!