21/02/09 17:02
theprogrammer
Postato originariamente da tasx:
quali sono le conoscienze
Le
conoscenze (senza i) sono ben diverse se intendi scrivere un vero (anche se piccolo) Sistema Operativo, oppure solamente una Shell interprete di comandi.
Ecco alcuni miei dubbi:
_quale linguaggio?
Per il Sistema Operativo, C e Assembler, per l'interprete dei comandi, C / C++ o altri (ne ho visto scritte anche in C# ...).
_esistono degli ide?
IDE ... per fare cosa? L'IDE e' uno strumento che ti aiuta "in genere" a scrivere programmi in uno o piu' linguaggi, non e' qualcosa di "dedicato" ai Sistemi Operativi.
_è un lavoro immenso?
Se parliamo del Sistema Operativo, è un lavoro sicuramente vasto e complesso. Devi pensare alla gestione dell'hardware, agli interrupt, alla gestione dell'allocazione della memoria, alla gestione dei processi, allo scheduler ... e tanto tanto altro.
Se parli solamente della Shell interprete dei comandi, la cosa e' piu' semplice. Ma devi avere gia' un Sistema Operativo completo da cui partire.
Ultima modifica effettuata da theprogrammer 21/02/09 17:07
aaa
21/02/09 18:22
tasx
Grazie per le delucidazioni, ma se volessi solo far partire il computer facendoli scrivere sullo schermo "ciao mondo" e poi farlo spegnere alla pressione di un tasto c'è qualche tutorial(preferibilmente in italiano)??
aaa
22/02/09 11:49
eddiewrc
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!
aaa