Il sistema operativo consente all'utente di interagire con l'hardware del computer. Il sistema è composto da centinaia di migliaia di righe di codice. Di solito il sistema operativo è realizzato utilizzando i linguaggi di programmazione C#, C, C++ e assembly. Il sistema operativo consente di navigare nel computer salvando ed eseguendo comandi. Non pensare che creare un sistema operativo sia facile. Ci vuole molta conoscenza per farlo.
Fare un passo
Passaggio 1. Prima di tutto, impara a programmare
Il linguaggio assembly è molto importante; si consiglia vivamente di imparare un altro linguaggio complementare di alto livello come il linguaggio C.
Passaggio 2. Decidi quale supporto desideri utilizzare per caricare il sistema operativo
Questo supporto può essere un'unità CD, un'unità DVD, un'unità flash, un disco rigido, un disco floppy o un altro PC.
Passaggio 3. Definire l'idea centrale di un SO
Ad esempio, su Windows, l'idea centrale è una GUI facile da usare e molta sicurezza.
Passaggio 4. Determina quale piattaforma del processore supporterà il tuo sistema operativo
IA-32, ARM e x86_64 sono le piattaforme più comuni per personal computer. Quindi, tutti loro sono la scelta migliore.
Passaggio 5. Decidi se preferisci fare tutto da zero o se è già disponibile un kernel su cui ti piacerebbe costruire
Ad esempio, Linux da zero è un progetto per le persone che vogliono creare la propria distribuzione Linux.
Passaggio 6. Decidi se utilizzerai il tuo bootloader o uno predefinito come il Grand Unified Bootloader (GRUB)
La codifica del bootloader richiederà una conoscenza approfondita dell'hardware e del BIOS. Di conseguenza, questo passaggio potrebbe ostacolare l'effettiva pianificazione della programmazione del kernel.
Passaggio 7. Decidi quale linguaggio di programmazione utilizzare
Va bene avere un sistema operativo in un linguaggio come Pascal o BASIC, ma dovresti usare C o Assembly. L'assemblaggio è molto necessario, perché alcune parti importanti di un sistema operativo lo richiedono. D'altra parte, il linguaggio C++ contiene parole chiave che richiedono l'esecuzione di altri SO completi.
Per compilare un sistema operativo da codice C o C++, ovviamente utilizzerai un compilatore o l'altro. Pertanto, è una buona idea consultare la guida per l'utente/manuale/documentazione per il compilatore C/C++ di vostra scelta, incluso nel software o disponibile sul sito Web del distributore. È necessario conoscere molte cose complicate sul compilatore e, per lo sviluppo C++, è necessario conoscere lo schema di manipolazione del compilatore e il suo ABI. Ci si aspetta che tu conosca i vari formati eseguibili (ELF, PE, COFF, binario di base, ecc.) e comprenda che il formato esclusivo di Windows, PE (.exe), è protetto da copyright
Passaggio 8. Definire l'interfaccia di programmazione dell'applicazione (API)
Una buona API tra cui scegliere è POSIX poiché è ben documentata. Tutti i sistemi Unix hanno almeno un supporto parziale per POSIX. Quindi collegare i programmi Unix al tuo sistema operativo dovrebbe essere facile.
Passaggio 9. Decidi il tuo design
Esiste una cosa come un kernel monolitico e un micro kernel. I kernel monolitici implementano tutti i servizi nel kernel, mentre i micro kernel hanno kernel piccoli in bundle con i servizi di distribuzione del demone utente. In generale, i kernel monolitici sono più veloci, ma i microkernel hanno un migliore isolamento e affidabilità dei guasti.
Passaggio 10. Considera lo sviluppo e il lavoro in team
In questo modo, ci vuole meno tempo per risolvere più problemi, il che probabilmente accelererà la creazione di un sistema operativo migliore.
Passaggio 11. Non cancellare completamente il disco rigido
Ricorda, l'eliminazione di un'unità cancellerà tutti i dati su di essa in modo irreversibile! Usa GRUB o un altro boot manager per eseguire il doppio avvio del tuo sistema con un altro sistema operativo fino a quando il tuo sistema operativo non sarà completamente funzionante.
Passaggio 12. Inizia in piccolo
Inizia con piccole cose come la visualizzazione del testo e fai una pausa prima di passare a cose come la gestione della memoria e il lavoro composto. Assicurati anche di creare le versioni a 32 bit e 64 bit.
Passaggio 13. Conserva un backup dell'ultimo codice sorgente funzionante
Questo passaggio è utile come salvaguardia nel caso in cui qualcosa vada storto con la versione corrente di SO o di sviluppo. Se il tuo computer si blocca e non si avvia, è una buona idea avere una seconda copia con cui lavorare in modo da poter risolvere il problema.
Passaggio 14. Considera la possibilità di testare il tuo nuovo sistema operativo con una macchina virtuale
Invece di riavviare il computer ogni volta che si apportano modifiche o dopo aver inviato file dal computer di sviluppo alla macchina di prova, è possibile utilizzare un'applicazione della macchina virtuale per eseguire il sistema operativo mentre è in esecuzione il sistema operativo corrente. Le attuali applicazioni VM includono: VMWare (che ha anche un prodotto server disponibile gratuitamente), alternative open source, Bochs, Microsoft Virtual PC (non compatibile con Linux) e Oracle VirtualBox.
Passaggio 15. Avvia la "release candidate" o la versione Beta
Questo passaggio consentirà all'utente di avvisarti di potenziali problemi con il tuo sistema operativo.
Passaggio 16. Anche il sistema operativo dovrebbe essere facile da usare
Assicurati di aggiungere funzionalità intuitive, rendile parte integrante del tuo design.
Suggerimenti
- Controlla potenziali deadlock e altri bug. Bug, deadlock e altri problemi influenzeranno il progetto di build del sistema operativo.
- Assicurati di implementare le funzionalità di sicurezza come priorità assoluta se desideri che il sistema funzioni correttamente.
- Usa siti web come OSDev e OSDever per aiutarti a sviluppare il tuo sistema operativo. Si prega di notare che per la maggior parte degli scopi, la comunità OSDev.org sarà più che felice se si utilizza la loro wiki e non si partecipa al forum. Se decidi di unirti a un forum, c'è una precondizione: devi conoscere davvero il C o C++ e il linguaggio assembly x86. Dovresti anche comprendere concetti di programmazione generali e complessi come elenchi collegati, code, ecc. La comunità OSDev, nei suoi regolamenti, afferma esplicitamente che la sua comunità non è creata per nutrire nuovi programmatori.
- Non unirti con il forum OSDev.org e poi fai la domanda ovvia. Ti verrà chiesto solo di leggere la guida. Leggi Wikipedia e le istruzioni per qualsiasi attrezzatura desideri utilizzare.
- Se stai cercando di sviluppare un sistema operativo, sei sicuramente considerato il "dio" della programmazione.
- Dovresti anche aver letto il manuale del processore per l'architettura del processore che hai selezionato; se x86 (Intel), ARM, MIPS, PPC, ecc. I manuali per le architetture del processore sono facili da trovare utilizzando una ricerca su Google ("manuale Intel", "manuale ARM", ecc.).
- Una volta completato tutto il lavoro di sviluppo, decidi se vuoi rilasciare il codice come codice aperto o tramite copyright.
- Non iniziare un progetto di sistema operativo per iniziare ad apprendere la programmazione. Se non conosci dentro e fuori C, C++, Pascal o qualche altro linguaggio adatto, inclusa la manipolazione dei puntatori, la manipolazione dei bit di basso livello, lo spostamento dei bit, i linguaggi assembly inline, ecc., non sei pronto per il sistema operativo sviluppo.
- La creazione di una partizione completamente nuova per "espandere" SO potrebbe essere una buona opzione.
- Se vuoi un modo semplice, considera le distribuzioni Linux come Fedora Revisor, Custom Nimble X, Puppy Remaster, PCLinuxOS Mk LiveCD o SUSE Studio e SUSE KIWI. Tuttavia, il sistema operativo che crei appartiene alla società che ha avviato per prima il servizio (sebbene tu abbia il diritto di distribuirlo liberamente, modificarlo ed eseguirlo come desideri sotto la licenza GPL).
Avvertimento
- Non avrai un sistema operativo completo entro due settimane. Inizia con un SO avviabile, quindi passa a cose più interessanti.
- Scrivere con noncuranza il tuo sistema operativo su un disco rigido può danneggiarlo completamente. Stai attento.
- Se fai qualcosa che non è raccomandato, come scrivere byte casuali su porte I/O casuali, bloccherai il tuo sistema operativo e (in teoria) potresti bruciare il tuo hardware.
- Non aspettarti che il sistema operativo sia facile da costruire. Ci sono molte interdipendenze complicate. Ad esempio, per creare un sistema operativo in grado di gestire più processori, Memory Manager deve disporre di un meccanismo di "blocco" per impedire a più processori di accedere alla stessa risorsa contemporaneamente. Il "blocco" utilizzato per questo richiederebbe uno scheduler per garantire che solo un processore acceda alle risorse critiche in un dato momento e tutti gli altri debbano aspettare. Lo scheduler infatti dipende dalla presenza del Memory Manager. Questo è un esempio di dipendenza senza uscita. Non esiste un modo standard per risolvere questo tipo di problema; ci si aspetta che ogni programmatore di sistemi operativi sia abbastanza esperto da conoscere il proprio modo di gestirlo.
Risorse addizionali
- Linee guida: Linux From Scratch
- Bootloader: GRUB
- Applicazioni per macchine virtuali: Bochs, VM Ware, XM Virtual Box.
- Manuale del processore: manuale Intel
- Siti di sviluppo SO: OSDev, OSDever