Come posso creare un piccolo sistema operativo su un vecchio computer desktop? [chiuso]


111

Questo potrebbe essere vano, poiché so che scrivere un sistema operativo è insopportabilmente complicato (specialmente da soli).

  • Non mi aspetto di costruire il prossimo Linux o Windows.

  • So che sarà orribile e pieno di bug e non funzionerà, ma va bene.

Voglio scrivere tutto da solo, in Assembly , C e (alcuni) C ++ .

Questo è un progetto futuro, poiché al momento sono impegnato con altre cose e non ho tempo immediatamente, ma ho pensato di chiederlo ora, quindi forse potrei ottenere molte risposte a questo, e potrebbe costruire ed essere una risorsa utile per questo tipo di approccio (tutto il resto che ho visto ha coinvolto la creazione di minix, l'utilizzo di un bootloader esistente, la creazione di un programma di avvio virtuale, ecc.).

Desidero configurare uno dei miei vecchi desktop con monitor, tastiera e mouse e iniziare a lavorare su un disco rigido vuoto .

Voglio imparare a scrivere il mio bootloader (ho trovato molte risorse su questo, ma per completezza, aggiungine ancora alcune buone), il mio driver USB (se necessario), un driver CD (se necessario ), ecc. Tutto, da zero.

  • Come inserisco il codice nel computer? È meglio farlo con un floppy disk? La maggior parte dei computer può farlo da una chiavetta USB?

  • Di quali driver ho bisogno e potete suggerirmi dei riferimenti per costruirli?

  • Dopo la sequenza di avvio, allora cosa? Come si entra in modalità protetta, ecc.

  • Come posso gestire la memoria senza l'aiuto di un sistema operativo? Uso solo gli indirizzi che voglio? Nessuna inizializzazione necessaria?

  • In cosa mi imbatterò senza dubbio che mi confonderà?

  • Come posso renderlo un O / S da riga di comando e uno grafico?

  • Su cosa si basa un O / S grafico? Ad esempio, come potrei fare qualcosa come una riga di comando, con un carattere e un'immagine in alto?

  • Dove posso leggere informazioni sulla configurazione di un ambiente multitasking? (cioè, avere due righe di comando di tipo grafico in esecuzione fianco a fianco).

  • Come potrei impostare una sorta di sistema a finestre? Come faccio a visualizzare la grafica sullo schermo una volta configurato il multitasking semplice?

Credimi, capisco che questo è un progetto molto complicato e probabilmente non riuscirò mai a completarlo o a scriverci sopra qualcosa di utile.

Ci sono molti altri pezzi che non ho menzionato, se ne pensi qualcuno, sentiti libero di aggiungere anche quelli.

Si prega di inserire un "argomento" per risposta, ad esempio, driver USB, quindi magari un elenco di risorse, cose a cui prestare attenzione, ecc.

Inoltre, non suggerire di creare un altro sistema operativo o un codice preesistente. So che leggerò molto codice preesistente (come il kernel Linux, o risorse di esempio, driver esistenti, ecc.) Ma alla fine voglio scrivere tutto da solo. So che dovrei partire da qualcos'altro, e ci sono molte altre domande su SO al riguardo che posso leggere se cambio idea e seguo quella strada. Ma in questo caso si tratta di fare tutto da zero.

Qualche suggerimento su come ottenerlo grafico? Diverse modalità video e come lavorare con loro, ecc.?


14
Questo è il mio unico più grande obiettivo. Voglio scrivere un sistema operativo così tanto, solo per il divertimento e l'apprendimento di esso ... Non ho potuto risparmiare tempo negli ultimi anni. Se stai cercando qualcuno che ti aiuti o che parli con te, puoi scrivermi a schmeling88 su gmail.com
Max Schmeling

2
@Max e @Tom, anch'io ho ricevuto il bug. In realtà mi sto preparando per iniziare questa volta :)
Giovanni Galbo

2
Non pensare alla grafica ora. Unix non ha mai supportato la grafica direttamente e non è poi così male. :-) Ma fondamentalmente non esiste un modo semplice e portatile per andare oltre l'IIRC 800x600.
Bastien Léonard


1
Perché? Questa domanda è antica e non genera più alcuna attività. Che importa?
Carson Myers

Risposte:


51

Cominciando dall'inizio. Leggi, leggi, leggi, leggi, leggi. È necessario avere una solida conoscenza di come funziona il sistema operativo prima di poter sperare di implementare il proprio.

Prendi uno dei libri di Andrew Tanenbaum sui sistemi operativi. Questo è quello che abbiamo usato nella mia classe OS al college:

PDF dei sistemi operativi moderni

Sistemi operativi moderni su Amazon

Nonostante la copertina ridicola, è una lettura fantastica, soprattutto per un libro di testo. Tanenbaum è davvero un esperto in questo settore e le sue spiegazioni su come funziona il sistema operativo sotto il cofano sono chiare e facili da capire. Questo libro è principalmente teoria, ma credo che abbia anche un libro che discute maggiormente dell'implementazione. Non l'ho mai letto, quindi, quindi non posso commentarlo.

Questo dovrebbe aiutarti a migliorare la gestione dei processi, la gestione della memoria, i filesystem e tutto il resto che il kernel del tuo sistema operativo deve fare per portarlo a uno stato avviabile. Da quel momento in poi è fondamentalmente una questione di scrivere driver di dispositivo per l'hardware che devi supportare e offrire implementazioni delle funzioni della libreria C per effettuare chiamate al kernel per cose come l'apertura di file e dispositivi, lettura e scrittura, passaggio di messaggi tra processi, ecc. .

Leggi l'assembly x86 (supponendo che tu lo stia progettando per una macchina x86). Questo dovrebbe rispondere a molte delle tue domande riguardo al passaggio tra le modalità operative del processore.

Se hai qualche conoscenza di elettronica, potrebbe essere più facile iniziare a scrivere un sistema operativo per un dispositivo incorporato che abbia un'ampia documentazione, perché generalmente sarà più semplice di un PC x86. Ho sempre voluto scrivere anche il mio sistema operativo e sto iniziando a scrivere un sistema operativo integrato con microkernel per questa scheda di sviluppo di Digilent. Può eseguire il processore soft-core MicroBlaze di Xilinx, che ha una documentazione molto completa. Ha anche un po 'di RAM, memoria flash, LED, interruttori, pulsanti, uscita VGA, ecc. Un sacco di cose con cui giocare con la scrittura di semplici driver.

Uno dei vantaggi di un dispositivo integrato è anche che potresti evitare di scrivere un driver VGA per molto tempo. Nel mio caso, la scheda di sviluppo Digilent ha un UART integrato, quindi posso utilizzare efficacemente l'output seriale come console per avviare il tutto e avviarlo da una riga di comando con il minimo sforzo.

Assicurati solo che qualunque cosa tu scelga di target abbia un compilatore prontamente disponibile e ben collaudato. Tu non vuoi essere la scrittura di un sistema operativo e un compilatore, allo stesso tempo.


2
+1, ma preferisco il libro Tanenbaum Minix (che è più mirato all'implementazione), e non c'è davvero bisogno di concentrarsi prima solo sulla teoria. Comunque, non scriverà un sistema operativo al primo tentativo. Scriverà prima un bootloader, quindi passerà alla modalità protetta, quindi gestirà l'I / O e così via.
Bastien Léonard

2
+1 per scrivere un sistema operativo per un chip incorporato. Alla fine della giornata sentirai di aver creato qualcosa di unico, ed è semplicemente estremamente più semplice che scriverne uno per (diciamo) x86, pur mantenendo gli stessi concetti fondamentali. Guarda TinyOS, ad esempio (sebbene non sia tecnicamente un sistema operativo, ci sono cose come scheduler e moduli di attività per esso ..)
Kristopher Micinski

29

http://www.osdev.org/ e http://www.osdever.net/

benvenuto nel mondo dello sviluppo di sistemi operativi.

Vedi anche altri collegamenti alla documentazione x86 in SO tag wiki : manuali Intel e AMD, documenti del compilatore / assemblatore e varie guide.

Suggerisce inoltre di utilizzare BOCHS o un altro ambiente virtuale per il debug, poiché è possibile eseguire un singolo passaggio del bootloader ed esaminare i registri.


1
E soprattutto wiki.osdev.org !
Matthew Iselin,

Non dimenticare forums.osdever.net :)
Brenden

6
Sono consapevole che queste sono risorse utili, ma penso che potrebbe essere più utile per i futuri lettori se fornissi un contesto piuttosto che un insieme di collegamenti senza spiegazioni.
icktoofay

@icktoofay La domanda è troppo ampia per una risposta adeguata, credo.
user253751

15

Suggerirei di lavorare, almeno all'inizio, su Bochs o su qualche altra macchina virtuale, il motivo è che puoi portarlo con te dove vuoi, è più facile eseguire il debug (puoi vedere lo stato esatto dell'hardware), e se tu hanno bisogno di aiuto esterno per il debug possono usare lo stesso identico 'hardware' che hai tu.

Il consiglio più utile che ho è di metterti in uno stato in cui puoi eseguire il codice C il più rapidamente possibile, ad esempio avviare, configurare le tabelle dei descrittori e arrivare a un punto in cui è sicuro eseguire C. se non tutto il kernel dovrebbe essere in C se vuoi rimanere sano di mente e continuare a lavorarci. L'assemblaggio, sebbene richiesto in alcuni punti, è noioso e tende ad essere difficile da eseguire il debug.


Cercherò di giocare a Bochs per ora, ma alla fine voglio solo costruirlo su qualche PC
Carson Myers

Se funziona in BOCHS, di solito funzionerà su un PC reale, differenze di modulo nel BIOS. La maggior parte dei tuoi bug saranno probabilmente cose che influenzano BOCHS e l'hardware reale, ma la differenza è che quando il tuo codice rimane bloccato in un loop infinito in BOCHS, puoi usare il debugger integrato di BOCHS per scoprire dove e un singolo passaggio per trovare come / perché. Su hardware reale, tutto ciò che puoi fare è aggiungere stampe di debug. L'uso di un debugger farà risparmiare ore e giorni di grattacapi.
Peter Cordes

14

Al suo livello più basso, il minimo che un sistema operativo deve essere in grado di fare è guidare l'hardware di un sistema in qualche modo e in qualche modo caricare un'esecuzione una sorta di "codice utente". Se hai intenzione di iniziare con un PC, devi scrivere del codice che può essere caricato da esso da un dispositivo o da un altro. I PC più vecchi hanno un BIOS nel firmware che determina come l'hardware esegue alcune inizializzazioni (almeno video, tastiera e qualche forma di archiviazione o boot loader). (Aggiornamento ottobre 2017: i PC più recenti hanno firmware EFI o UEFI ... che è in gran parte una differenza pedante; hanno gli stessi scopi per questa discussione).

Quindi inizia imparando i dettagli di basso livello su come utilizzare il BIOS o un altro firmware, sul tuo sistema di destinazione. Cioè, impara a scrivere un programma che il BIOS può caricare ed eseguire. Questo finirà per trasformarsi nel tuo boot loader. Inizia in piccolo. Procurati un programma che stampi: "Hello, Linus" direttamente dal processo di avvio del firmware (su un floppy, o su una chiavetta USB, sarebbe un buon inizio ... o su un disco rigido se vuoi).

Da lì consiglierei di scrivere un driver seriale molto semplice ... aggiorna il tuo boot loader per inizializzare alcune porte seriali e avvia un download da lì. Quindi può eseguire il codice che trasporta. Da lì scrivi un po 'di bootstrap che può scrivere su un altro set di blocchi (non abbiamo ancora implementato un file system ... nemmeno l'analisi della tabella delle partizioni; quindi all'inizio dovremmo occuparci solo di intervalli grezzi di blocchi sul disco ).

A quel punto il tuo boot loader dovrebbe essere in grado di estrarre il nuovo codice attraverso la linea seriale, scaricarlo in una partizione (sì, implementare la gestione della tabella delle partizioni di qualche tipo ... se è conforme alle convenzioni standard del PC dipende da te a questo punto ) ed eseguirlo.

Da lì dovresti essere in grado di lavorare su funzionalità molto più sofisticate. Da questa base puoi scrivere e compilare un nuovo "kernel" ... riavviare il tuo banco di prova e avere il nuovo kernel distribuito su di esso.

(Il tuo bootloader dovrebbe ricevere un segnale, come un INTERRUZIONE sulle linee di handshaking seriale come comando per saltare il download e avviare semplicemente l'immagine esistente; e dovrebbe gestire anche un certo timeout in questo modo).

Da lì scrivere un livello terminale molto semplice e una shell di comando? Un filesystem? Implementa comandi per scaricare nuovo contenuto eseguibile diverso dal kernel (file o oggetti di qualche tipo). E così via.

Naturalmente avresti potuto iniziare con un driver della console usando la tastiera e il video del PC (il BIOS INT 0x16h e INT 0x10H, rispettivamente, se ricordo bene). Tuttavia, suggerirei di iniziare con un driver seriale poiché è quindi possibile automatizzare il ciclo di compilazione / distribuzione / test da qualsiasi altro sistema (funzionale) esistente. Dal momento che il tuo nuovo sistema operativo inizierà come progetto cross-compilato, sarà essenziale per te avere un modo semplificato di gestirlo.

Non so fino a che punto vuoi spingere il tuo progetto. Un obiettivo ragionevolmente impressionante sarebbe raggiungere il "self hosting". Se riesci a creare un semplice assemblatore / compilatore che ti consenta di utilizzare il tuo nuovo sistema operativo per (ri) costruire, collegare e avviare una versione funzionante del tuo nuovo sistema operativo ... allora hai raggiunto questo obiettivo. (Nota che non è un requisito. Molti sistemi embedded non saranno mai self-hosting e non c'è niente di sbagliato in questo).


Su hardware moderno potrebbe essere più difficile far funzionare un driver seriale che scrivere driver per console (video / tastiera). Nei diversi anni trascorsi da quando ho scritto questo, i semplici vecchi connettori seriali sono diventati praticamente inesistenti sui desktop e laptop moderni. Alcuni hardware embedded e "hobbisti" hanno ancora interfacce RS-232C antiquate senza la necessità di passare attraverso l'emulazione USB. Ad esempio: mpl.ch/t2600.html sembra averlo.
Jim Dennis

12

Se non ti dispiace usare la virtualizzazione hardware, c'è un corso (libro + lezioni + software) che ti porterà "Da Nand a Tetris". Crei un sistema informatico completo interamente da solo dal gate NAND elettrico (per questi scopi atomico e dato), fino alla costruzione del sistema operativo, un linguaggio e, infine, alla codifica di un semplice gioco sulla tua macchina personale.

Penso che sia una grande idea e qualcosa in cui ho intenzione di rimanere bloccato presto. Il libro è sorprendentemente economico e credo che il corso sia tenuto al MIT. Non riesco a immaginare una sensazione più grande che avere la piena, completa conoscenza di un intero sistema che hai costruito da solo da zero.

Collegamento: http://www1.idc.ac.il/tecs/


Penso che questo collegamento sia morto. Qualcuno conosce un altro modo per accedervi?
Koray Tugay

1
@KorayTugay nand2tetris.org
user253751

10

Vorrei iniziare in piccolo e acquistare un kit di sviluppo integrato 8086 e sviluppare un sistema operativo multitasking su quello. Una volta che hai un kernel e hai acquisito familiarità con il lavoro a livello hardware, sarai pronto per fare qualcosa di più impegnativo.

Costruire anche un clone DOS per display VGA è una cosa abbastanza impegnativa. I dettagli sono enormi. :-)

argomenti specifici.

Come inserisco il codice nel computer? È meglio farlo con un floppy disk? La maggior parte dei computer può farlo da una chiavetta USB?

Il BIOS eseguirà il bootstrap elementare.


Di quali driver ho bisogno e potete suggerirmi dei riferimenti per costruirli?

tutto ciò che non è operazioni dirette su CPU / memoria. Tutto ciò che non è direttamente nel manuale di riferimento della CPU.


Dopo la sequenza di avvio, allora cosa? Come si entra in modalità protetta, ecc.

La modalità protetta farà parte della sequenza di avvio.

quindi si avvia il multitasking e si capisce come avviare i processi.


Come posso gestire la memoria senza l'aiuto di un sistema operativo? Uso solo gli indirizzi che voglio? Nessuna inizializzazione necessaria?

Corretta. Probabilmente alla fine vorrai sistemare un sistema di memoria virtuale.


In cosa mi imbatterò senza dubbio che mi confonderà?

non avere strumenti di debug, non avere IO


Come posso renderlo un O / S da riga di comando e uno grafico?

Con dolore. Cerca Windows 3.1 e Linux, in particolare X Windows.


Su cosa si basa un O / S grafico? Ad esempio, come potrei fare qualcosa come una riga di comando, con un carattere e un'immagine in alto?

Cerca X windows.


consiglio finale: studia linux / x windows. Non è perfetto, ma fornisce la comprensione di un approccio. Studia anche i sistemi embedded.


ottima risposta, ho già il kernel Linux a portata di mano e cercherò di sicuro Windows 3.1.
Carson Myers

8

Vedo molti buoni riferimenti ai siti di sviluppo del sistema operativo, quindi descriverò un approccio diverso:

Se vuoi l'esperienza di implementare un sistema operativo da bare metal, ci sono scelte hardware migliori rispetto a un vecchio PC. Con l'architettura del PC, trascorrerai una quantità eccessiva del tuo tempo a codificare artefatti poco interessanti dei suoi 30 anni di storia del design. Ad esempio, solo la parte del bootloader del progetto ha probabilmente bruciato molti programmatori coraggiosi.

Ad esempio, avrai bisogno di un set di driver per leggere il kernel dal disco e / o dalla rete. Quindi avrai bisogno del codice per entrare in modalità protetta. A quel punto, hai bisogno di un altro set di driver! Dopo quel punto, molto poco del lavoro che farai per portare il chip in modalità protetta sarà trasferibile. Vuoi eseguirlo su un PC diverso + - 4 anni e avrai bisogno di un altro set di driver.

Cerca di eseguire il bootstrap di un ARM o di un altro chip "incorporato" a 32 bit. Sono disponibili schede di sviluppo economiche, oppure puoi saldare le tue! Alcuni hanno Ethernet e USB integrati. Penso che ti divertirai di più a lavorare su un'architettura sana e non croccante, e forse finirai con alcune abilità riutilizzabili.


non esattamente quello che ho chiesto, ma +1 per avermi inviato su una tangente di lettura
Carson Myers

Marsh ti sta dando ottimi consigli. I dettagli di basso livello dell'architettura x86 / BIOS sono complessi. Probabilmente ti impantanerai su questi dettagli, lasciandoti incapace di concentrarti su problemi più grandi come la gestione della memoria e la pianificazione dei processi. Scegli un'architettura "più pulita" con una porta seriale. Sarai più felice a lungo termine.
Barry Brown,

8

Più di ogni altra cosa, se vuoi che questo funzioni su hardware reale, hai assolutamente bisogno di una copia del manuale del tuo processore. I manuali Intel ( http://www.intel.com/products/processor/manuals/ ) sono inestimabili. Si occupano di tutto, dal cambio di modalità (reale / protetta) alla gestione della memoria virtuale (se si sceglie di arrivare a tanto) all'effettuare chiamate di sistema (se mai si arriva a fare la modalità utente). Ancora più importante , spiegano in grande dettaglio una serie di cose che devono essere impostate affinché le cose funzionino, come il TSS ei registri di segmento, che la maggior parte dei testi del sistema operativo non discute perché sono più interessati a concetti di livello superiore rispetto al processore- dettagli specifici.


E puoi ottenere copie cartacee gratuitamente tramite Intel.
Matthew Iselin


8

Prova a leggere il codice di un piccolo sistema operativo open source di base, come MikeOS.

In alternativa, suggerisco i seguenti passaggi (dovrebbe essere divertente!):

  1. Scrivi una macchina virtuale. Definisci tutte le istruzioni del tuo processore in modo da conoscere il tuo sistema dentro e fuori. Interfaccia con SDL per tastiera, mouse, schermo, accesso audio. Mantienilo semplice in modo da poter inserire tutto nella tua testa in una volta. Non è necessario che sia una macchina virtuale all'avanguardia, solo una che può emulare la funzione di un computer "reale".
  2. Scrivi un assemblatore per il processore della tua macchina virtuale. Ricorda che questo assemblatore non deve essere un programma scritto nel linguaggio della macchina virtuale, ma qualsiasi cosa che possa convertire il tuo linguaggio assembly in codice macchina.
  3. Definisci un formato eseguibile e scrivi un semplice linker.
  4. Hai tutte le parti per scrivere il tuo sistema operativo ora! Scrivilo in linguaggio assembly, assemblalo ... ecc. Non hai bisogno di un processo di bootloading così complicato, basta che la tua macchina esegua prima il tuo sistema operativo.

I passaggi precedenti possono sembrare un po 'stupidi per la scrittura di un semplice sistema operativo, ma ehi, è dannatamente divertente.


6

controlla MikeOS . È un sistema operativo abbastanza semplice scritto è leggibile (come nei commenti). Anche se è abbastanza semplice, ha una GUI e supporta alcune funzionalità di rete e multimediali.

modifica : MenuetOS è grafico. Anche la sua scritta è semplice asm, ma è più sofisticata di MikeOS


6

Hai un obiettivo ambizioso. Ma l'esecuzione è la chiave.

La maggior parte degli approcci strutturati (libri di testo o lezioni universitarie) ti guideranno attraverso il processo, ma forniscono molto del codice essenziale che sorvola i dettagli arcani della piattaforma scelta e ti consente di concentrarti sulle idee del quadro generale: pianificazione dei processi, gestione della memoria, prevenzione dei deadlock, I / O e così via.

Il mio consiglio è questo: riduci le tue aspettative e inizia con una domanda di base.

Cos'è un sistema operativo?

Un informatico (si spera) non dirà mai che un sistema operativo è un'interfaccia utente grafica, o un browser web, o un modo per collegare dispositivi USB o qualsiasi cosa che un utente possa effettivamente vedere o toccare. Invece, un sistema operativo al suo livello più fondamentale sono quelle cose che ho menzionato sopra. Rientrano tutti sotto un unico grande ombrello: la gestione delle risorse.

Un sistema operativo non è altro che un programma che gestisce le risorse hardware del computer: memoria, CPU e periferiche.

Ecco un semplice sistema operativo: un programma consente all'utente di digitare un programma (in esadecimale o binario) utilizzando una connessione seriale. Una volta che il programma è stato digitato, esegue il programma. Quando il programma è finito, il controllo viene restituito all'utente dove può eseguire nuovamente il programma o digitarne uno nuovo.

Fallo su un'architettura "pulita" come un processore ARM incorporato con 64 KB di memoria o giù di lì. È possibile codificarlo in assembly dopo alcuni giorni di apprendimento dei dettagli di ARM. E voilà!, hai un sistema operativo.

Fa tutto ciò che un sistema operativo dovrebbe fare:

  • Gestisce la memoria non consentendo all'utente di sovrascrivere il sistema operativo stesso.
  • Pianifica l'esecuzione di un singolo processo.
  • Gestisce l'I / O alla singola periferica seriale.

Questo ti dà un mattone da cui partire. Hai molte scelte ora. Forse uno di questi sarebbe consentire a due programmi di essere caricati in memoria e consentire all'utente di decidere quale eseguire successivamente.

Oppure si può consentire all'utente di sospendere l'esecuzione di un programma, passare a un altro, sospendere e tornare indietro. Questo è un multitasking rudimentale, anche se è interamente manuale.

Le tue scelte sono illimitate ma ognuna è un piccolo passo da quello che avevi prima.

È divertente se non metti gli occhi troppo in alto!



4

Molte scuole hanno classi di OS che fanno molto di ciò che descrivi. La mia scuola (CMU) insegnava OS in C e abbiamo scritto un kernel, un file system e una shell e ci è stato fornito il codice per un boot loader.

Sfortunatamente, non sono riuscito a trovare nessuna risorsa definitiva per questo corso (15-412) sul web, che si è evoluto nel tempo. Ma forse le persone potrebbero pubblicare collegamenti a fonti e compiti per le scuole che hanno buone risorse sul web.


3

Si potrebbe godere di questo tutorial chiamato "Roll your own toy UNIX-clone OS", è molto intuitivo e dovrebbe aiutarti nel tuo cammino.

In bocca al lupo.


1
Sebbene sia brillante avere un tutorial così approfondito, ci sono molti bug in esso che i principianti incontrano costantemente. Il tutorial è ottimo se e solo se sei disposto ad aprire anche cose come i manuali Intel e pensare a quello che stai facendo (cioè, non copiare e incollare!).
Matthew Iselin

3

Studia il sistema A2 (precedentemente chiamato sistema Oberon ) per trovare idee che puoi rubare. È un sistema operativo grafico costruito da due sole persone, anche se uno è certamente Niklaus Wirth. Pubblicato per la prima volta intorno al 1990 e la velocità è sorprendentemente buona. C'è un libro di Gutknecht.


3

Sulla programmazione grafica di basso livello, questo ti darà molte informazioni: http://www.osdever.net/FreeVGA/home.htm . (È molto interessante anche per la modalità testo.)

In cosa mi imbatterò senza dubbio che mi confonderà?

Ti renderai conto che su PC ci sono un sacco di cose che non sono chiare: il set di istruzioni x86 stesso è complicato e quando ottieni l'accesso diretto all'hardware, può volerci un po 'prima di capire come scrivere un singolo carattere sullo schermo .

Non preoccuparti del floppy disk e simili, la maggior parte delle volte utilizzerai un emulatore come Bochs o QEmu.


3

Potresti prendere in considerazione l'idea di dare un'occhiata ai concetti dei sistemi operativi, di Abraham Silberschatz - Comprendere i concetti di programmazione dei sistemi è un requisito fondamentale, dai un'occhiata agli interni del kernel F / OSS dei sistemi operativi linux * BSD e GNU / Linux , in particolare le versioni precedenti, che sono probabilmente un po 'più documentati.testo alternativo testo alternativo


1
Silbershatz è davvero abbastanza buono, ma di altissimo livello.
Paul Nathan

Concordato; Tuttavia, direi che è fondamentalmente essenziale. Documentazione proprio lì con i sistemi operativi moderni di Tanenbaum (menzionato in precedenza)
amaterasu

2

Dai un'occhiata a Minix . Studia il codice sorgente insieme a " Progettazione e implementazione dei sistemi operativi ". Considera l'idea di dare un contributo al progetto. Penso che Minix sia un sistema operativo davvero buono e promettente in divenire. È anche un progetto ben finanziato. Ciò significa che potresti persino essere pagato per i tuoi contributi!


1

È molto semplice grazie al fatto che il BIOS ha già molte funzioni di input / output integrate per cambiare la modalità dello schermo, cambiare il colore dei pixel, scrivere testo sullo schermo e molte altre cose. Tuttavia, non include il supporto per i file system, che è una delle poche cose che devi incorporare nel tuo sistema operativo.

Il BIOS carica il primo settore sul disco rigido e inizia a eseguire il codice da lì, quindi il tuo sistema operativo deve essere posizionato con la prima istruzione nel primo settore del disco rigido.

Questo articolo di Wikipedia dovrebbe farti iniziare con le interruzioni del BIOS per scrivere testo sullo schermo, ricevere tasti dalla tastiera e altre cose. https://en.wikipedia.org/wiki/BIOS_interrupt_call

Anche se prevedi di utilizzare c ++, ti consiglio caldamente di leggere sulla programmazione in assembly, poiché è fondamentale per capire come funziona l'hardware.

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.