direi che scrivere un sistema operativo non è il classico esercizietto che si può fare per imparare... io per l'università sto scrivendo un sistema per macchine MIPS e ti assicuro che non è cosa semplice.
innanzitutto utilizziamo una macchina virtuale (micro mps, disponibile su sourceforge) e un cross compiler per testare il codice. (la vm è pensata apposta per semplificare un pochettino l'utilizzo degli indirizzi di memoria)
con tutta probabilità il nostro SO si limiterà esclusivamente al kernel, cioè uno scheduler (che stiamo scrivendo ora) ed un nucleo predisposto all'esecuzione effettiva dei processi.
-bootloader, alcune syscall sono già implementate tramite ROM virtuale
-è necessaria una conoscenza ASSOLUTA del C, delle strutture dati (anche solo nel nostro scheduler usiamo: hash,heap, doubly linked lists e liste singolarmente concatenate circolari).) ovviamente ci sono puntatori dappertutto, il che significa che conviene scrivere le cose giuste al primo colpo, perchè debuggare è praticamente impossibile!
-non è programmazione C normale... è programmazione C concorrente!
il nostro progetto si limita alla scrittura di un kernel, che è la parte centrale di un OS. salendo nei livelli di astrazione un os come quelli che siamo abituati a vedere comprendono: un file system, uno stack tcp-ip, tante altre cose e come ultimo livello l'interfaccia verso l'utente, cioè una shell!
ovviamente bisogna anche conoscere le cose dal punto di vista teorico, per citare qualche concetto: preemption, race condition, semafori, algoritmo del banchiere, kernel monolitico - microkernel, funzionamento degli interrupt, syscall, message passing ecc..
se vuoi un buon libro ti consiglio: "operating system concepts" di Galvin, Gagne e un tipo impronunciabile che nn scrivo xchè sbaglierei il suo cognome.
ciao!
|