Benvenuto su unix.stackexchange.com!
Non c'è una risposta facile alla tua domanda, e persone molto migliori di me hanno scritto interi libri sull'argomento del kernel Linux e dei sistemi operativi in generale.
Sul campo di applicazione del progetto: scrivere un sistema operativo non è un compito semplice! Anche un sistema operativo minimamente intenzionale come Minix è una cosa piuttosto complessa! Per darti un'idea di Linux, pensa ai programmi C che hai scritto finora. Il corso medio universitario tende ad essere al massimo qualche migliaio di righe. Penso che il mio progetto dell'ultimo anno fosse di circa 30–35.000 linee di C ++. Il kernel di Linux contiene circa 13.000.000 di righe di codice C.
Perché è tutto in file separati? I progetti di grandi dimensioni vengono archiviati in file separati per motivi logistici e pratici. Considera solo di caricare un file di 13.000.000 di righe in un editor! Prima di affrontare un grande progetto come Linux, dovresti assolutamente affinare le tue abilità C al punto in cui la domanda "perché più file" risponde a se stessa. Dovresti anche essere in grado di leggere il codice C , non solo di scriverlo. (più difficile di quanto sembri all'inizio)
Dovresti assolutamente essere molto esperto in C. Il kernel è gestito da migliaia di persone e verrai chiamato a comprendere i modi di dire C personali di ciascuno di essi (garantito, all'interno degli standard di codifica del kernel abbastanza rigidi, ma comunque - tutti hanno il proprio stile di risoluzione dei problemi).
Dopo aver ottenuto il tuo C fu, assicurati di comprendere i sistemi operativi. Questo ti aiuterà a capire il codice. Non tutto Linux è essenziale. Il kernel proprio è piuttosto piccolo! Che gonfia è:
- Migliaia di driver hardware per vari dispositivi.
- Livelli di astrazione per varie classi di dispositivi per semplificare le API e la scrittura dei driver. Ad esempio, abbiamo il VFS per filesystem, il livello Event per dispositivi di input, eccetera.
- Impressionanti quantità di codice e file compilati in modo condizionale per le varie architetture che eseguono Linux (non tutte le macchine Linux sono un PC Intel, e alcune sono incredibilmente diverse da quelle che ci si potrebbe aspettare). Il kernel ha a che fare con queste differenze, e questo significa più codice.
Un problema che scoprirai immediatamente è che questi componenti non sono così facili da staccare, cambiare e ricollegare. Ci sono numerose interrelazioni. In breve, cambiare i bit del kernel è complicato.
Il motivo per cui le persone ti hanno suggerito Minix è semplice: è un sistema operativo completo, ma non è gravato dalle esigenze di un sistema complesso come Linux. Il codice è piccolo, ma offre comunque funzionalità complete. Dopotutto, le prime versioni di Linux sono state ispirate da Minix.
Certo, Minix ha meno supporto hardware in questi giorni. E allora? Questo è un vantaggio! I computer moderni si virtualizzano molto bene. Usalo a tuo vantaggio: una VM per eseguire Minix è così leggera che renderà lo sviluppo un gioco da ragazzi.
Se il tuo progetto è costruire un sistema operativo, potresti fare di peggio che iniziare studiando Minix. Potresti anche voler comprare e leggere il libro che Minix è stato scritto per accompagnare " I moderni sistemi operativi di Andrew Tanenbaum ".
Dovresti anche fissare i tuoi obiettivi e definire i termini con precisione . Se la tua definizione di sistema operativo è quella di Microsoft (un sistema operativo con una GUI e una suite software completa), potresti essere coinvolto in un progetto molto lungo! Centinaia di migliaia di persone hanno lavorato dagli anni '60 per portarci dove siamo ora, dopo tutto.
Infine, ricorda il grido di battaglia di Computer Scientist: ' non reinventare mai la ruota! '(ci piace fare eccezioni durante l'apprendimento, ovviamente. E per divertimento :))