Appendice C
Programmi di utilità e strumenti di sviluppo
All'interno del sistema operativo Theos sono inclusi anche dei programmi di utilità realizzati unicamente per facilitare lo sviluppo del sistema. Ciascuno di questi programmi può essere facilmente attivato da shell, ma non dovrebbe essere mai utilizzato da nessun utente tranne che dallo sviluppatore.
Il primo di questi programmi si chiama dump e consente di visualizzare e modificare il contenuto della memoria. Per attivare questa funzione si deve indicare come parametro l'indirizzo assoluto della prima locazione di memoria a cui si desidera accedere. Il primo campo visualizzato corrisponde all'offset della posizione di memoria corrente rispetto alla posizione di partenza; il secondo e il terzo campo visualizzano il contenuto in formato decimale ed esadecimale rispettivamente; il quarto campo se possibile mostra il carattere corrispondente. Come quinto campo viene richiesto di digitare una breve stringa terminata dal tasto enter. Se questa stringa corrisponde ad un numero decimale compreso fra 0 e 255, allora viene modificata la locazione attuale di memoria con questo valore, altrimenti se è un punto '.' viene terminato questo programma. Se, invece, la stringa è vuota o non è riconosciuta, si passa alla prossima locazione. Segue un breve esempio.
offs dec ex ch
0 101 65 e
1 108 6C l
2 116 74 t _
Con questo programma si può accedere a qualsiasi locazione di memoria, anche quelle che dovrebbero essere riservate, come il file password e la Tabella dei Vettori di Eccezione.
dump()
/* comando builtin */
/* visualizza il contenuto della memoria */
{
cicla {
mostra il contenuto di un byte di memoria
leggi una stringa
se la stringa e' un numero fra 0 e 255
scrivi il numero nella locazione corrente
se la stringa e' un punto esci
punta alla prossima locazione
}
}
Il secondo programma di utilità per lo sviluppatore si chiama seeheap e permette di vedere lo stato di allocazione della memoria Heap. Per tutti i blocchi occupati viene visualizzato il numero di blocco, il numero del prossimo blocco nella catena (-2 indica che non c'è un blocco successivo). Per ogni zona allocata all'interno del blocco viene visualizzato l'indirizzo relativo di partenza e la lunghezza della zona. Alla fine del blocco viene visualizzato un messaggio che indica se c'è o meno un errore in questa struttura dati.
void seeheap()
/* comando builtin */
/* visualizza il contenuto della memoria Heap */
{
per tutti i blocchi dello Heap {
se il blocco e' utilizzato {
stampa il numero del blocco corrente e del prossimo in coda
finche' ci sono zone all'interno del blocco {
stampa la dimensione e la posizione di una zona
passa alla zona successiva
}
se tutto regolare
stampa "OK"
altrimenti
stampa messaggio di errore
}
}
}
}
Di seguito è riportato un piccolo esempio di utilizzo di questo comando. Da questo si può dedurre che sono allocati due blocchi di heap in cui ci sono tre zone utilizzate di dimensioni 1402, 502 e 7002 byte (si noti che lo spazio utilizzabile è di due byte più piccolo di quello occupato) e due zone libere di lunghezza 6290 e 1192 byte. Per le zone libere si memorizza la lunghezza più uno.
0> 3: 1402 2 502 1404 6291 1906 OK
3> -2: 7002 2 1193 7004 OK
Il terzo programma di sviluppo si chiama testheap e permette di testare la memoria heap allocando e deallocando zone di dimensioni specificate. L'unione di questo programma e del precedente permette di testare efficacemente il buon funzionamento della memoria Heap. Questo programma permette di specificare il numero di byte da allocare sulla memoria Heap e risponde visualizzando l'indirizzo restituito dalla funzione alloc. Questo indirizzo viene posto in un vettore. Se si digita un numero negativo viene utilizzato l'opposto come indice del vettore di indirizzi e viene liberata la zona corrispondente.
void TestHeap()
/* comando builtin */
/* testa il buon funzionamento della memoria Heap */
{
cicla {
leggi un carattere da tastiera
se il carattere letto e' CR
se e' stato digitato un numero negativo
free(-n)
altrimenti se e' un numero positivo{
alloc(n)
mostra l'indirizzo della memoria allocata
}
altrimenti se e' un carattere '.' o 'q'
esci
altrimenti
leggi una cifra decimale o un '-'
}
}
}
La configurazione vista nell'esempio precedente può essere ottenuta utilizzando la testheap nel seguente modo:
Theos> testheap
0 1400 2589702
1 500 2591104
2 8000 2597898
3 7000 2606094
4 7000 2614290
5 -2
6 -3
Un altro programma di sviluppo si chiama loop ed esegue un ciclo infinito all'interno del quale viene visualizzato un numero modulo dieci e viene sprecato un po' di tempo. Questo programma è utile per testare il buon funzionamento della coda di schedulazione.
Back to Lucio's Home page.