Quali sono alcune risorse per iniziare a sviluppare il sistema operativo? [chiuso]


589

Una cosa che ho sempre voluto fare è sviluppare il mio sistema operativo (non necessariamente elegante come Linux o Windows, ma meglio di un semplice caricatore di avvio che ho già fatto).

Sto facendo fatica a trovare risorse / guide che ti portano a scrivere un semplice sistema operativo "Hello World".

So che molte persone probabilmente mi consiglieranno di guardare Linux o BSD; ma la base di codice per sistemi del genere è (presumibilmente) così grande che non saprei da dove cominciare.

Eventuali suggerimenti?

Aggiornamento: per facilitare le persone che arrivano a questo post tramite Google, ecco alcune risorse di sviluppo del sistema operativo:

Altre risorse:

Ho trovato una bella risorsa chiamata MikeOS , "MikeOS è uno strumento di apprendimento per dimostrare come funzionano i sistemi operativi semplici. Utilizza la modalità reale a 16 bit per l'accesso al BIOS, quindi non ha bisogno di driver complessi"

Aggiornato il 14/11/08

Ho trovato alcune risorse nella Guida di Freebyte a ... Sistemi operativi gratuiti e non liberi che si collegano a kit come OSKit e la libreria ExOS. Questi sembrano molto utili per iniziare nello sviluppo del sistema operativo.

23/02/09 aggiornato

Ric Tokyo ha raccomandato nanoo in questa domanda . Nanoos è un sistema operativo scritto in C ++.

Aggiornato il 09/03/09

Dinah ha fornito alcune utili discussioni su Stack Overflow di aspiranti sviluppatori di sistemi operativi: i roadblock nella creazione di un sistema operativo personalizzato discutono quali insidie ​​si potrebbero incontrare durante lo sviluppo di un sistema operativo e lo sviluppo del sistema operativo è una discussione più generale.

Aggiornato il 09/07/09

LB ha fornito un collegamento al Progetto Pintos , un sistema operativo educativo progettato per gli studenti che imparano lo sviluppo del sistema operativo.

Aggiornato il 27/07/09 (Ancora forte!)

Mi sono imbattuto in un corso OS online di Berkley con 23 lezioni.

TomOS è un fork di MikeOS che include un piccolo gestore di memoria e il supporto del mouse. Come MikeOS, è progettato per essere un progetto educativo. È scritto nell'assemblatore NASM.

Aggiornato il 04/08/09

Ho trovato le diapositive e altri materiali da abbinare alle lezioni online di Berkeley elencate sopra.

Aggiornato il 23/08/09

Tutte le domande hanno taggato osdev su stackoverflow

OS / 161 è un sistema operativo accademico scritto in c che gira su un hardware simulato. Questo sistema operativo è simile in Nachos. Grazie Novelocrate!

tangurena consiglia http://en.wikipedia.org/wiki/MicroC/OS-II , un sistema operativo progettato per sistemi embedded. C'è anche un libro dei compagni .

Lo sviluppo del kernel Linux di Robert Love è suggerito da Anders. È un "acclamato sguardo degli addetti ai lavori al kernel Linux".

Aggiornato il 18/09/2009

Grazie Tim S. Van Haren per averci parlato di Cosmos , un sistema operativo scritto interamente in c #.

tgiphil ci parla di Managed Operating System Alliance (MOSA) Framework , "un insieme di strumenti, specifiche e codice sorgente per favorire lo sviluppo di sistemi operativi gestiti basati sul Common Intermediate Language".

Aggiornamento del 24/09/2009

Steve ha trovato un paio di risorse per lo sviluppo su Windows usando Visual Studio, controlla la configurazione della guida di BrokenThorn con VS 2005 o la sezione VS di OSDev .

Aggiornato il 9/5/2012

kerneltrap.org non è più disponibile. Il kernel Linux v0.01 è disponibile da kernel.org

21/12/2012 aggiornato Un tutorial di sviluppo del sistema operativo di base progettato per essere un progetto di semestre. Ti guida nella creazione di un sistema operativo con componenti di base. Ottimo inizio per i principianti. Related carta . Grazie Srujan!

Aggiornato il 15/11/2013

Scrivere un semplice sistema operativo da zero . Grazie James Moore!

Aggiornato il 12/8/2013

Come creare un sistema operativo per computer Grazie ddtoni!

Aggiornato il 18/03/2014

ToAruOS un sistema operativo costruito principalmente da zero, inclusa la GUI

Aggiornato il 12 settembre 2016

Scrivi il tuo sistema operativo Toy

Aggiornato il 10 dicembre 2016

Scrivere un sistema operativo semplice —da Scratch (grazie @Tyler C)


5
Non dimenticare forums.osdever.net
Brenden,

15
Perché questo tipo di buone domande di carattere generale sono sempre chiuse su SO?
Pratik Singhal,

30
Questa domanda ha 370 voti, è stata votata 422 volte ed è in circolazione da quando StackOverflow è stato lanciato per la prima volta. Sembra che alla comunità sia piaciuta, ma per qualche ragione una manciata di persone deve rovinarla per tutti. Questo è il motivo per cui sto davvero iniziando a non gradire SO
Giovanni Galbo

1
C'è una tendenza molto interessante con Unikernels (fai solo una cosa e fallo bene) in cui questi sforzi sono molto rilevanti. In genere è possibile avviare a freddo un unikernel in una macchina virtuale e avere il codice utente in esecuzione in meno di un secondo. Ho visto una soluzione in cui solo la ricerca DNS per un tale servizio fa in modo che il server DNS attivi una "macchina virtuale di avvio", quindi è pronto quando arriva la richiesta effettiva per il servizio.
Thorbjørn Ravn Andersen

Risposte:


95

Ci sono molti collegamenti dopo questa breve panoramica di ciò che è coinvolto nella scrittura di un sistema operativo per la piattaforma X86.

Il link che sembra essere il più promettente (www.nondot.org/sabre/os/articles) non è più disponibile, quindi dovrai leggere la versione di Archive.org per leggerlo.

Alla fine della giornata il bootloader prende il codice macchina del kernel, lo mette in memoria e lo salta. Puoi inserire qualsiasi codice macchina nel kernel che desideri, ma la maggior parte dei programmi C si aspetta un sistema operativo, quindi dovrai dire al tuo compilatore che non avrà tutto questo, o il bootloader deve crearne alcuni.

Il kernel quindi fa tutto il lavoro pesante, e sospetto che sia il kernel di esempio che desideri. Ma c'è ancora molta strada da fare tra avere un kernel che dice "Hello world" e avere un kernel che carica un interprete di comandi, fornisce servizi su disco, carica e gestisce programmi.

Potresti prendere in considerazione l'abbonamento ad ACM per ottenere l'accesso alla loro letteratura precedente: ci sono molti articoli alla fine degli anni '80 e all'inizio degli anni '90 nelle prime riviste di informatica su come creare sistemi operativi alternativi . Probabilmente ci sono libri fuori stampa anche da questa era. Potresti essere in grado di ottenere le stesse informazioni gratuitamente cercando gli indici di quelle riviste (che sono disponibili su quel sito - fai clic su "indice" vicino al nome della rivista) e quindi chiedendo in giro persone con una copia.

Infine, so che Usenet è morto (per così dire i profeti del destino di Internet) ma scoprirai che molti dei vecchi esperti scoscesi di quell'epoca vivono ancora lì. Dovresti cercare gruppi di Google (hanno il vecchio repository di dejanews) e mi aspetto che troverai molte persone che fanno le stesse domande un decennio o 1,5 anni fa che stai facendo ora. Potresti anche imbatterti in molte domande di Linus Torvalds per aiuto mentre stava sviluppando Linux originariamente. Se le ricerche non fanno apparire nulla, chiedi nel newsgroup appropriato (probabilmente inizia con comp.arch, ma cerca quelli con OS nel nome).


ehi signore, COSMOS è un ottimo strumento per sviluppare il sistema operativo?
Vikas Verma,

@VikasVerma Non l'ho usato, quindi non lo so.
Adam Davis,

@AdamDavis Il primo collegamento è interrotto (e anche gli altri sembrano esserlo). Per favore, risolvili!
nbro,

35

Minix è molto più piccolo e progettato per scopi di apprendimento, e anche il libro con esso è buono.

Aggiornamento: immagino che Minix 3 abbia un obiettivo un po 'diverso, ma Minix 2 (e ovviamente la prima versione) erano a scopo didattico.


Ho l'ultimo libro di Tanenbaum ma il codice sorgente minix3 sembra dannatamente enorme! Ho un obiettivo simile a quello dell'OP, mentre non voglio costruire un kernel da zero, voglio davvero capire come funziona un kernel e cosa fa. Seguire quanto Tanenbaum book and minix3basta per apportare modifiche a minix3 mi aiuterà eventualmente a contribuire al kernel di Linux?
Gideon,

32

Come qualcuno che ha scritto da zero un sistema operativo multi-tasking in tempo reale ...

routine di debounce della tastiera, driver della tastiera, driver del disco, driver video, file system e infine un caricatore di avvio - e questo è solo per avviarlo per la prima volta senza nulla da fare!

... Non posso sottolineare abbastanza quanto sia importante familiarizzare con l'hardware! Questo è particolarmente vero se vuoi davvero fare tutto da solo invece di raccogliere un sistema primitivo che qualcun altro ha già predisposto per te. Ad esempio, contatta Intel e chiedi loro una scheda CPU per il tuo tipo di CPU! Questo lo farà per te: i "pin-out", gli interrupt, i codici operativi, lo chiami!

Ricorda che l'hardware rende tutto possibile. Studia l'hardware. Non te ne pentirai.

.


18

Scrivi un sistema operativo microcontrollore. Consiglio un microcontrollore x86. Un sistema operativo moderno è semplicemente enorme . Impara prima le basi.


2
qualche idea da dove cominciare con questa? sono molto interessata? quale kit comprare ... libri per iniziare ecc.
Julio

@Uncle: ad oggi non ho mai incontrato un libro di sistemi embedded di prim'ordine. O sono troppo di alto livello e assumono un sistema operativo, oppure sono rivolti a un ingegnere elettrico e ignorano il codice. Per quanto riguarda i kit, un google trova un " bifferos.bizhat.com ". Esistono anche kit ARM. Personalmente non mi piacciono le architetture di Harvard, quindi non sono interessato all'Arduino, ma è il più popolare. Per lavori più esotici, anche l'XC-1A è bello.
Paul Nathan,

@Paul apprezzerebbe se potessi espandere la tua risposta. Ho esaminato AVR e Arduino, ma recentemente ho visto .NET micro. Sono un ragazzo LOB di astrazione troppo alto, ma voglio iniziare a camminare giù per lo stack. Dove consigli di iniziare?
Gideon,

@giddy: gli AVR sono la moda attuale. Sono piccoli ed economici, ma non mi piace molto l'architettura. Consiglierei di ottenere un kit di sviluppo ARM (costo stimato ~ 100). Sono popolari nelle applicazioni commerciali.
Paul Nathan,

@Paul grazie! Non ho sentito molto su ARM. Che dire di .net micro? Sono un po 'preoccupato di bruciare qualcosa. La maggior parte dei kit verrà con qualche tipo di istruzioni giusto? grazie ancora.
Gideon,

16

Vorrei che ci fosse un posto per ottenere tutte le informazioni sullo sviluppo del proprio sistema operativo. Il più vicino a questo è OS Dev Wiki e Forum . Offrono moltissime informazioni utili sull'installazione, lo sviluppo e le informazioni sull'hardware del dispositivo.

Inoltre su BoneFide ci sono alcuni fantastici tutorial , ho usato il tutorial per iniziare di Bran , e ora sto guardando uno più recente basato sul suo chiamato Roll your own OS OS-clone .

Secondo controllo: "Sistemi operativi: progettazione e implementazione"

E se vuoi sviluppare su Windows, dai un'occhiata al post sul blog di jolson .

Modifica: per lo sviluppo su Windows utilizzando Visual Studio, consulta la guida di BrokenThorn BrokenThorn o la wiki di OSDev .


1
Correlati: il wiki di tag x86 di SO ha collegamenti a manuali Intel / AMD e un sacco di cose buone.
Peter Cordes,

15

Una risorsa eccellente è il materiale del corso MIT 6.828: ingegneria del sistema operativo.

XV6 - semplice sistema operativo di insegnamento in stile Unix scritto in ANSI C per x86 http://pdos.csail.mit.edu/6.828/2012/xv6.html

Fonte XV6 - come un opuscolo stampato con numeri di riga http://pdos.csail.mit.edu/6.828/2012/xv6/xv6-rev7.pdf

Libro XV6 - spiega le idee principali del design os http://pdos.csail.mit.edu/6.828/2012/xv6/book-rev7.pdf

Il materiale è compatto: fonte di 92 pagine e commento di 96 pagine.

Mi piace di più rispetto al libro Minix! È un vero gioiello!


11

potresti anche dare un'occhiata a SharpOS che è un sistema operativo che stanno scrivendo in c #.


9

Ci sono buone risorse per i fondamenti del sistema operativo nei libri. Dal momento che non ci sono molte chiamate per creare nuovi sistemi operativi da zero, non troverai molte informazioni di tipo hobbistico su Internet.

Consiglio il libro di testo standard "Modern Operating Systems" di Tanenbaum. Potresti anche essere in grado di trovare utili "Elementi del sistema operativo" di Calingaert: è una breve panoramica di un libro che fornisce uno schizzo di ciò che un sistema operativo è dal punto di vista di un progettista.

Se hai qualche interesse per i sistemi in tempo reale (e dovresti almeno capire le differenze e le ragioni dei sistemi operativi in ​​tempo reale), consiglierei anche "MicroC / OS-II" di Labrosse.

Modificare:

Puoi specificare cosa intendi per "più tecnico"? Questi libri forniscono dettagli sull'implementazione di pseudo codice, ma stai cercando un sistema operativo di esempio o frammenti di codice per un determinato computer / linguaggio?

-Adamo


7

Viene solo da un'altra domanda. Vorrei menzionare Pintos ... Mi sono ricordato che il mio corso OS con Nachos e Pintos sembra essere lo stesso tipo di cose che possono essere eseguite su x86.


7

Ho trovato lo sviluppo del kernel Linux di Robert Love piuttosto interessante. Descrive come i diversi sottosistemi nel kernel di Linux funzionano in modo molto realistico. Poiché la fonte è disponibile, Linux è il candidato principale per qualcosa su cui hackerare.



6

Il mio corso di sistemi operativi a undergrad ci ha fatto costruire un numero di sottosistemi per OS / 161 , un semplice kernel simile a BSD che fornisce alcune nozioni di base lasciando la libertà di esplorare varie decisioni di spazio di progettazione nell'implementazione di servizi di livello superiore.


6

Inizia a hackerare su Minix. È molto più piccolo di Linux (ovviamente) ed è progettato pensando agli scopi dell'insegnamento (alcuni, almeno). Non Minix 3, però, è una storia completamente diversa.


5

Ho già risposto, ma quando ho preso i sistemi operativi al college abbiamo iniziato con un kernel Linux iniziale e aggiunto funzionalità moderne semplicistiche (file system di base, memoria virtuale, multitasking, mutex). Buon divertimento. Puoi saltare alcune delle cose ASSOLUTAMENTE pazze di basso livello solo per mucking con modalità protetta e tabelle di pagine mentre hai ancora imparato un po 'di coraggio.

http://kerneltrap.org/node/14002 http://kerneltrap.org/files/linux-0.01.tar.bz2


4

Potresti voler guardare Linuxfromscratch .

Linux From Scratch (LFS) è un progetto che fornisce istruzioni dettagliate per la creazione del proprio sistema Linux personalizzato, interamente a partire da codice sorgente.


32
Compilare un sistema operativo è molto lontano dallo scriverne uno.
duskwuff -inattivo-

7
@duskwuff Hai ragione ma imparerai molto da questo. Quindi puoi andare avanti e scrivere il tuo.
jfs,

4

Un tutorial di sviluppo del sistema operativo semplice e di base progettato per essere un progetto di un semestre. Ti guida nella creazione di un sistema operativo con componenti di base. Ottimo inizio per i principianti. L'articolo correlato è qui .


Grandi risorse L'articolo fa riferimento a Nachos (2500 righe di codice), OS / 161 (11000), MINIX (30000), GeekOS. Vai su ogni pagina ufficiale dell'università e troverai codice sorgente, simulatore e strumenti e incarichi all'anno.
limitcracker



3

Dai un'occhiata al progetto Managed Operating System Alliance (MOSA) su www.mosa-project.org . Stanno progettando un compilatore AOT / JIT e un sistema operativo completamente gestito in C #. Alcuni sviluppatori provengono dal progetto SharpOS inattivo.


3

Ho giocato con Cosmos , che è "un progetto di sistema operativo implementato completamente in linguaggi conformi a CIL". È scritto in C #, quindi era proprio il mio vicolo. Per qualcuno come me che non ha mai tentato di costruire un sistema operativo, è stato davvero bello poter far funzionare un sistema operativo "Hello World" in pochissimo tempo.



3

Come accennato in precedenza, il Wiki OSDev è (di gran lunga) la migliore fonte per lo sviluppo del sistema operativo. Per quelli di voi che parlano tedesco, anche il wiki di lowlevel.eu è fantastico. Qualcosa di relativamente sconosciuto Incitatus OS , un semplice kernel con un piccolo set di app per spazio utente. È ottimo da usare per entrare nel complicato argomento dello sviluppo del sistema operativo.


2

Movitz è un ambiente Lisp scritto in Common Lisp e in esecuzione "sul metallo". Sfortunatamente, alcuni link sulla pagina principale di Movitz negano l'accesso, ma puoi trovare istruzioni su come scaricare e compilare il codice sorgente dalla pagina trac . Inoltre, un'immagine pronta è disponibile nell'archivio di questa pagina .

Questo è estremamente interessante, poiché riporta il concetto di macchina Lisp sull'hardware attualmente disponibile. È fallito commercialmente, ma questo non mi dimostra che l'idea fosse negativa.

Il manuale di Unix haters è un libro divertente che rimprovera semi-seriamente il concetto di Unix e dei suoi derivati. Molte sezioni discutono di quanto fosse migliore il concetto di macchina Lisp.


2

Ecco un documento chiamato " Scrivere un sistema operativo semplice da zero ". Copre la scrittura di un bootloader, l'accesso alla modalità protetta x86-32 e la scrittura di un kernel di base in C. Sembra fare un buon lavoro nel spiegare tutto in dettaglio.


Ho seguito questo libro e sviluppato in base al suo codice. È fantastico iniziare con un libro del genere.
user3405291


1

Domanda interessante per i programmatori. Vedere ci vorrà molto, molto tempo per costruire un sistema operativo come Windows o Mac, ma se vuoi crearne di semplici, puoi fare del tuo meglio

  1. È necessario concentrarsi su Assembly Language, C e C ++. Dovresti essere esperto in queste lingue.
  2. Prima leggi un buon libro su come funziona il sistema operativo [Google it], quindi leggi tutte le informazioni dal sistema operativo Wiki
  3. Cerca in YouTube "Come creare il tuo sistema operativo in Assembly Language" guarda il video, ad es. video
  4. Scarica il codice sorgente del sistema operativo Linux e compila tu stesso e prova a modificare tu stesso il codice
  5. Ora sei un esperto editor di sistemi operativi ora scarica Minix e QNX e inizia a sviluppare con loro e ottieni i loro documenti da qui Minix Doc e QNX Doc

Ora hai acquisito il master (non completamente solo un po 'di più per andare) nella creazione del sistema operativo ora distribuisci questa conoscenza ai tuoi amici e con il loro aiuto prova a creare un sistema operativo potente come Mac, Linux o Windows


Redattori, per favore, modifica la mia risposta e rimuovi lo spazio tra http: e www dato che sono un nuovo arrivato, quindi non ho una risposta così alta, per favore fai quella roba per me
BharatKhanna,

1

Dopo aver creato un sistema operativo di base, in realtà è difficile continuare perché non ci sono molte risorse per creare GUI o eseguire il porting delle librerie. Ma penso che dare un'occhiata a ToAruOS sarebbe di grande aiuto!

Il codice sotto la superficie di quel sistema operativo è così dannatamente semplice! ma allo stesso tempo ha portato cose come cairo, python, (non ancora ma presto) sdl, ha fatto memoria condivisa e ha anche creato un suo toolkit di widget. È tutto scritto in C.

Un altro sistema operativo interessante sarebbe pedigreeOS . È realizzato da JamesM (l'uomo dietro il tutorial del kernel di jamesM . Sebbene abbia più funzionalità di ToaruOS, è anche più grande e più confuso.

Ma comunque questi 2 OS ti aiuteranno molto, specialmente ToAruOS.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.