View Single Post
Old 01-08-2007, 10:07   #2
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Dipende da che "livello" parti.
Se hai già un sistema operativo compatibile con quello che vuoi compilare si tratta solo di andare ad utilizzare la libreria precompilata per quel dato sistema operativo.
Se invece crei per la prima volta un sistema operativo, mettiamo di essere a livelli moooolto bassi, cioè sulla macchina non c'è niente, devi far uso di un altro sistema operativo e fare un cross compiling per la macchina ospite.

Prima di tutto non puoi fare uso della libreria standard del C o del C++ per tutte quelle cose che accedono al sistema operativo.
Quindi devi cominciare riscrivendoti delle routine di base che sfruttino inizialmente le routine messe a disposizione dal bios per permetterti di fare un minimo di debug visuale (in particolare output di testo). Quando si è arrivati a mettere la macchina ospite nello stato necessario per avviare il nostro sistema operativo (modalità del processore e della memoria desiderata) bisogna cominciare a scrivere le nostre routine di gestione delle interruzioni. In questo modo si creano le fondamenta sulle quali si baseranno tutte le system call del nostro sistema operativo. Le operazione basilari riguardano principalmente l'allocazione e la deallocazione di memoria e l'output.
In questo modo sarà possibile andare a cominciare a creare un kernel base del sistema operativo.
Successivamente si aggiungeranno man mano le altre routine di gestione delle interruzioni insieme ai rispettivi driver di periferica. Ad esempio la routine di gestione dell'input da tastiera dovrà appoggiarsi al driver della tastiera.
Si va avanti così, ingrandendo sempre più il sistema.
Inizialmente il sistema sarà completamente caricato in memoria in maniera monolitica dal disco di avvio, poi verrà implementato un file system (almeno inizialmente il più semplice possibile, magari mappato in memoria) ed a questo punto sarà possibile implementare una shell.
cionci è offline   Rispondi citando il messaggio o parte di esso