Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Sistema operativo....
Forum - C/C++ - Sistema operativo....

Avatar
tasx (Dev Team)
Expert


Messaggi: 439
Iscritto: 15/12/2008

Segnala al moderatore
Postato alle 14:31
Sabato, 21/02/2009
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

PM Quote
Avatar
vincent_vega (Normal User)
Newbie


Messaggi: 4
Iscritto: 20/02/2009

Segnala al moderatore
Postato alle 15:21
Sabato, 21/02/2009

PM Quote
Avatar
tasx (Dev Team)
Expert


Messaggi: 439
Iscritto: 15/12/2008

Segnala al moderatore
Postato alle 17:13
Sabato, 21/02/2009
ok, però non hai risposto alle mie domande. ;)

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 18:02
Sabato, 21/02/2009
Testo quotato

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.

Testo quotato

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# ...).

Testo quotato

_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.

Testo quotato

_è 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 il 21/02/2009 alle 18:07
PM Quote
Avatar
tasx (Dev Team)
Expert


Messaggi: 439
Iscritto: 15/12/2008

Segnala al moderatore
Postato alle 19:22
Sabato, 21/02/2009
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)??

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 19:32
Sabato, 21/02/2009
Testo quotato

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.

PM Quote
Avatar
tasx (Dev Team)
Expert


Messaggi: 439
Iscritto: 15/12/2008

Segnala al moderatore
Postato alle 19:41
Sabato, 21/02/2009
ok, grazie di tutto. :k:

PM Quote
Avatar
eddiewrc (Member)
Expert


Messaggi: 560
Iscritto: 30/04/2006

Segnala al moderatore
Postato alle 12:49
Domenica, 22/02/2009
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!

PM Quote
Avatar
tasx (Dev Team)
Expert


Messaggi: 439
Iscritto: 15/12/2008

Segnala al moderatore
Postato alle 9:30
Lunedì, 23/02/2009
Grazie mille, ora credo di aver capito quant'è difficile.

PM Quote