Postato originariamente da marc++o
inoltre se esiste in rete della doc sempre in italiano sulla creazione di un kernel e quindi di un sistema operativo...
No, non esistono versioni spray apri-e-gusta di un oggetto complesso e strettamente legato ad un hardware di riferimento come un kernel. Men che meno in italiano.
La stesura di un SO è un
punto di arrivo per
pochissimi programmatori altamente specializzati, non un punto di partenza o un esercizio per principianti. Non esistono scorciatoie.
Se ti interessa l'argomento, la strada da percorrere è ben diversa rispetto allo scopiazzamento acritico di robaccia sparsa in rete.
a)
Imparare a progettare ed implementare in Assembly e C ad un livello ottimo, con particolare indirizzo alla scrittura di device driver e programmi system-level. L'ottimizzazione del codice, soprattutto se
hardware-related, è scienza ed arte, che richiede anni di pratica e la maturazione di una forma mentis che non si compra al supermarket.
Occorre
sporcarsi le mani con i dettagli dell'hardware e "pensare ottimizzato" in tutte le fasi, dalla progettazione alla scelta degli algoritmi, alla selezione degli idiomi. Sopratutto, imparare a misurare in modo sistematico le prestazioni del codice critico ad ogni variazione, confrontando i risultati con distacco ed obiettività.
b)
Studiare a fondo le strutture di sistemi operativi monolitici e microkernel, verticali, ring, exokernel... imparare i fondamenti dello scheduling e del messaging, la gestione della memoria, i principi dei filesystems, studiare le architetture e l'interazione con l'hardware, i device driver.
La letteratura in merito è sterminata: qui si propone un
elenco davvero ridotto ai minimi termini, per il mondo Intel.
c) Dopo aver studiato e compreso
almeno i testi elencati,
iniziare a partecipare educatamente in read-only a progetti di buon livello di complessità, come la stesura di compilatori, di kernel, di device driver.
d)
Mettere le mani sul codice di SO accademici (es. SHARK,
Minix,
EROSos....) o sistemi giocattolo e
companion code dei migliori testi introduttivi (
MMURTL,
uC/OS,
RxDOS,
RTEMS,
eRTOS,
Solar OS...) - tutto codice documentato, progettato accuratamente, ben commentato - e baloccarsi ad apportare qualche modifica è molto meno frustrante che impantanarsi in una marea di codice disomogeneo, scritto senza progettazione o quasi.
Al termine di questo percorso, che ti porterà a conoscere dall'interno
numerosi sistemi operativi funzionanti e ben documentati, con gli strumenti per comprenderne a fondo i concetti e la struttura, potrai forse iniziare a capire che:
1) Il mondo non ha certo bisogno dell'ennesimo SO amatoriale incompiuto.
2) La progettazione e lo sviluppo di un intero SO degno di questa definizione, minimamente funzionale ed alternativo a quelli già esistenti (non solo ai due pletorici sistemi mainstream che tutti pensano di conoscere, ma alle
centinaia di OS disponibili in qualche forma), è un'impresa al di sopra delle capacità della stragrande maggioranza dei programmatori, specialmente under 30. Lo sviluppo di SO giocattolo "per esercizio" e/o per una migliore comprensione di una determinata piattaforma è già coperto ampiamente all'interno di percorsi formativi di elevata qualità accademica, come nel caso di Minix. Altri percorsi raffazzonati ed improvvisati sono inutili quanto dispersivi, se non deleteri, specialmente se antepongono la bruta produzione di codice alla comprensione teorica.
3) Esistono migliaia, se non milioni, di compiti di sviluppo più produttivi ed alla portata delle capacità di un giovane che sta imparando. Un kernel o un intero SO è l'ultima cosa a cui una persona sensata dovrebbe mettersi a pensare durante la propria formazione, se non verso gli ultimi anni della preparazione universitaria, quando esiste una base teorica ed un'esperienza di programmazione sufficientemente solida da affrontare un tale esercizio, in forma adeguatamente ridotta.