2009-02-24 10 views
9

Che tipo di C++ (Restate to programming) dovrei imparare a creare il mio kernel del sistema operativo? (So ​​che dovrei anche imparare il montaggio.) EDIT *** Come interrupt, driver della tastiera, ottenendo input.Che tipo di C++ dovrei imparare per creare il mio kernel del sistema operativo?

Ok tutti ho fatto un SO * veramente 3 e vorrei condividerlo.

Ecco qui. http://bcsy.hostzi.com/BytOS.zip

Compile su linux

+2

Risposta breve: tutto. – Crashworks

+11

LOL, dovremmo fidarci di un ragazzo chiamato "hacklord" abbastanza per scaricare il suo codice? –

+1

Certo che ti fidi di lui. Perché il suo Q più aggiornato è "Come faccio a causare un buffer overflow". Quindi deve essere abbastanza innocuo :-) – hirschhornsalz

risposta

0

tutto. Questo non è un compito banale, devi imparare la maggior parte degli aspetti del linguaggio, ti consiglio di consultare la programmazione del kernel. A giudicare dall'aspetto, vorrei cercare teorie logiche e paradigmi per i linguaggi di programmazione prima di incorporarmi nella sintassi. Ci sono livelli hardware e così tanto che dovrai imparare molto più che da una risposta che stai per ottenere su questo sito o facendo una ricerca su google.

Buona fortuna!

6

Date le vostre scelte oggi non c'è assolutamente alcun motivo per "creare" un sistema operativo. Impara un linguaggio molto bene e mettiti a tuo agio con Windows o con una variante di Linux. C o C++ è bello da imparare.

Modifica per chiarimenti - Il mio punto è che è follia sia irreale che borderline cercare di imparare una lingua per la prima volta creando un sistema operativo. Almeno un buon background in C è un requisito, altrimenti iniziare a creare applicazioni e sfruttare la potenza dei sistemi operativi esistenti prima di tentare di eseguire il rollover.

+4

Non posso essere d'accordo, ho scritto un piccolo SO ed è un modo fantastico per imparare cose come filesystem, concorrenza, primitive di sincronizzazione, scheduling, I/O e interrupt, ecc. Ecc. –

+1

@David Sono d'accordo, ma scommetto che hai dovuto imparare una lingua molto bene prima di affrontarlo. È assurdo cercare di imparare una lingua scrivendo il proprio sistema operativo. – Brandon

+0

Certo, ho avuto una discreta conoscenza di C (e un po 'di assemblaggio), ma ciò non significa che non ci sia alcun motivo per programmare un sistema operativo. –

5

C'è solo un tipo che dovrebbe aiutare a restringerlo. Inizia studiando i manuali di architettura della CPU, Intel sono disponibili for free. Ottenere la documentazione per il BIOS sarà la parte difficile.

+0

C'è solo un tipo - grazie! Stavo pensando la stessa cosa! – NTDLS

0

Non suggerirei di usare C++ quando si realizza un kernel monolitico, punto. Tuttavia, se si sta pensando a un progetto di microkernel, è possibile scrivere i server (networking, console, fs, vfs, ecc.) In C++, mantenendo il kernel stesso con C/inline asm.

Quindi, ancora una volta, se stai solo andando per x86, non importa tanto.

Quali sono gli obiettivi di progettazione del sistema operativo?

7

Ho un amico che ha scritto un kernel del sistema operativo in C++:

http://sourceforge.net/projects/ekp/

quindi è sicuramente possibile. (Alcuni dei commenti sopra dicono che è impossibile. Sbagliato.)

Si potrebbe anche voler rubare il suo bootstrapping e costruire codice, in modo che si può giusto in tuffo e iniziare ad attuare la "cose ​​divertenti".

5

check out nanoos, è un progetto OS in C++!

In risposta alla tua domanda:

Un sistema operativo (comunemente abbreviato a uno OS o O/S) è un'interfaccia tra hardware e applicazioni; è responsabile per la gestione e il coordinamento delle attività e la condivisione delle risorse limitate del computer . Il sistema operativo funge da host per le applicazioni eseguite sulla macchina . Quindi devi imparare i bit in C++ che consentono al tuo programma (OS) di interagire con l'hardware su cui verrà eseguito.

Quindi deve andare oltre l'interazione con l'hardware e fornire l'utilizzo all'utente.

Per questo, tornare ancora una volta e vedere ciò che viene tentata nei nanoos come punto di partenza (per C++ esigenze di quello che la costruzione di un sistema operativo in C++ comporterebbe l'apprendimento)

Caratteristiche trovati in nanoos:

  • C++ il tempo di esecuzione

  • direttore di modalità protetta di memoria a 32 bit

  • rilevamento della CPU, il rilevamento di memoria e IDE rilevamento del disco rigido

  • disco rigido IDE leggere

In sostanza, di scrivere un Operating System, basta verificare che cosa un sistema operativo deve fare (o cosa è)

Se dovessi scrivere un sistema operativo, prima ancora di considerare la lingua, proverei a capire cos'è un sistema operativo, this is a great book: Progettazione e implementazione dei sistemi operativi.

alt text http://ecx.images-amazon.com/images/I/3125C47MR4L._SL500_AA180_.jpg

Avere una lettura. Buona fortuna

0

Scopri il kernel Linux mailing list FAQ per le domande più comuni (che si applicherebbe a qualsiasi sviluppo del kernel), e non scoraggiarti dal punto this.

1

Per un numero di motivi tecnici, Linux non è programmato in nessuna lingua oltre a C. Per vari motivi politici, pochi altri sistemi operativi sono programmati in C++.

Se si desidera imparare sui kernel di programmazione, il sistema operativo Minix/microkernel è espressamente progettato per l'apprendimento della progettazione del sistema operativo. È piccolo e minimale. È anche programmato in C.

+1

Solo per curiosità, quali sono queste ragioni politiche? – Angela

+0

Google per Rant di C++ di Linus Torvalds e penso che capirai. –

+2

Il rant di linus è solo stupido:/ –

0

L'unico sistema operativo di qualsiasi dimensione significativa che conosco è stato programmato in C++ fino a "bare metal" è il sistema operativo AS/400 OS/400 (dopo v3r6).

Non c'è nulla che ti impedisca di eseguire qualsiasi sistema operativo in C++, specialmente quando ti ricordi che vanilla C è "quasi" valido C++. Quello che diventa interessante è fare new/ ai livelli più bassi, perché è necessario garantire assenza di perdite e così via. Ciò comporta la necessità di ri-implementare le funzioni new.

Ho aiutato a fare v3r6, ma sono passati circa 13 anni e non ricordo i dettagli pelosi. Non sono a conoscenza di pubblicazioni su di esso, ma se sei davvero interessato, prova a scrivere Marshall Cline al numero http://www.parashift.com.

(Augh. "Cancella" vizio "libero".)

+0

implementare new/delete è banale e spesso può essere solo un breve wrapper attorno a malloc/free. La compilazione emetterà il codice costruttore/distruttore per te. Ho un sistema operativo C++ di mia scelta, l'unica vera parte difficile è se vuoi eccezioni /rtti.If puoi fare a meno di quelli, non molto lavoro per alzarsi e correre. –

+0

Immagino che un'altra cosa degna di nota sono i contructor/destructors globali, dal momento che questi devono essere chiamati prima di "main", ma ancora una volta, è una funzione a 5 linee gestirla, niente di epico. –

+0

Evan, in realtà implementare nuovo/delete per le classi "bare metal" di basso livello è * not * banale; questo vale doppiamente per le classi che devono, per esempio, mappare a specifici indirizzi fisici. –

1

vi suggerisco di dare un'occhiata a nachos (Non è un'altra completamente Heuristic Operating System). È il sistema di insegnamento che abbiamo usato per il mio corso di sistemi operativi al college.

6

Vi consiglio di guardare il OSDev wiki. È una fantastica fonte di informazioni sulla programmazione di un sistema operativo in molte lingue, incluso C++.

In particolare, la sezione see this che indica tutto ciò che è necessario per andare con un kernel C++ utilizzando gcc.

Infine, controlla il OSDev forums, ci sono molti utenti che vanno dai principianti ai più esperti. Di solito sono più che felici di aiutare le persone (purché dimostrino di provare prima di chiedere :-P)

+0

+1 per aver menzionato OSDev. –

1

Newos è un buon kernel C++. Quindi sono eCos e L4. Newos è un microkernel di un ex sviluppatore BeOS. L4 è anche un microkernel, famoso per il passaggio incredibilmente veloce dei messaggi. Ed eCos è un kernel monolitico.

0

Guardare L4Ka :: Pistachio, il kernel Haiku, o EKA2 di Symbian potrebbe essere una buona idea, se ti interessano esempi di kernel "reali" basati su C++ che sono stati usati come basi di complessi, funzionalità sistemi operativi portatili.

Ho trovato quest'ultimo ben strutturato e composto da un codice molto conciso e leggibile, ma altri potrebbero non essere d'accordo. Tuttavia, al momento è difficile ottenere e creare (poiché i siti della Symbian Foundation sono attualmente offline), sebbene una copia sia mirrored su Google Code.

A parte questo, ho trovato L4Ka :: Pistacchio di essere uno dei più facili da costruire kernel ancora, ma la personalizzazione e la realizzazione di componenti di livello superiore è un altro modo - anche se Genode sembrava un percorso promettente per rapidamente costruire componenti di livello superiore quando l'ho testato, secoli fa.

Problemi correlati