Oppure

Loading
21/02/09 13:31
tasx
Da poco tempo ho scoperto il mondo Linux e attualmente sto provando molte distro.
Col tempo mi è sorta una domanda:
quali sono le conoscienze fondamentali per sviluppare un "mini sistema operativo", non intendo livello windows o ubuntu ma semplicemente qualcosa tipo una riga di comando con poche opzioni.
Ecco alcuni miei dubbi:
_quale linguaggio?
_esistono degli ide?
_è un lavoro immenso?

Ringrazio in anticipo...
:k:

Ciao a tutti
tasx
aaa
21/02/09 14:21
vincent_vega
piccola come questa...
it.wikipedia.org/wiki/…
aaa
21/02/09 16:13
tasx
ok, però non hai risposto alle mie domande. ;)
aaa
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
21/02/09 18:32
theprogrammer
Postato originariamente da tasx:

... c'è qualche tutorial(preferibilmente in italiano)??


No ... tanto meno in italiano.

Per avviare (solo) un computer devi prevedere tante cose ... lascia perdere.
aaa
21/02/09 18:41
tasx
ok, grazie di tutto. :k:
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