c - requisiti - installare due sistemi operativi sullo stesso hard disk



Come posso costruire un piccolo sistema operativo su un vecchio computer desktop? (14)

È molto semplice grazie al fatto che il BIOS ha già molte funzioni di input / output incorporate per cambiare la modalità dello schermo, cambiare il colore dei pixel, scrivere il 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 sistema operativo deve essere collocato con la prima istruzione nel primo settore sul disco rigido.

Questo articolo di Wikipedia dovrebbe iniziare sulle interruzioni BIOS per scrivere testo sullo schermo, ricevere chiavi dalla tastiera e altro materiale. https://en.wikipedia.org/wiki/BIOS_interrupt_call

Anche se prevedi di usare c ++, ti consiglio vivamente di leggere la programmazione degli assembly, poiché è fondamentale capire come funziona l'hardware.

https://src-bin.com

Questo potrebbe essere inutile, perché 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, pieno di bug e non funzionerà, ma va bene.

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

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

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

Voglio imparare come scrivere il mio bootloader (ho trovato molte risorse su questo, ma per completezza, per favore aggiungi ancora dei buoni), il mio driver USB (se necessario), un driver per 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 puoi suggerire riferimenti per costruirli?

  • Dopo la sequenza di avvio, allora cosa? Come accedere alla modalità protetta, ecc.

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

  • Cosa mi imbatterò senza dubbio in quello che mi confonderà?

  • Come posso renderlo una riga di comando O / S, e una grafica?

  • Che cos'è un O / S grafico integrato? Come, come potrei fare qualcosa di simile, una riga di comando, con un carattere e un'immagine in alto?

  • Dove posso leggere sull'impostazione di un ambiente multitasking? (es., con due linee di comando simili a quelle grafiche che funzionano fianco a fianco).

  • Come installerei una sorta di sistema di finestre? Come posso visualizzare la grafica sullo schermo una volta impostato il semplice multitasking?

Credimi, capisco che questo è un progetto molto complicato, e probabilmente non riuscirò mai a completarlo o scrivere qualcosa su di esso di qualche utilità.

Ci sono molti altri pezzi a questo che non ho menzionato, se ci pensate, sentitevi liberi di aggiungere anche quelli.

Si prega di inserire un "argomento" per risposta - ad esempio, i driver USB, e quindi forse un elenco di risorse, cose da cercare, ecc.

Inoltre, per favore non suggerire di costruire un altro codice O / S o un codice preesistente. So che leggerò un sacco di codice preesistente (come il kernel di Linux, o risorse di esempio, driver esistenti, ecc.) Ma alla fine voglio fare tutto da solo. So che dovrei costruire da qualcos'altro, e ci sono molte altre domande su SO su quello che posso leggere se cambio idea e seguo questa strada. Ma questo è tutto sul fare tutto da zero.

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


Answer #1

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

Cosa mi imbatterò senza dubbio in quello che mi confonderà?

Capirai che su PC ci sono un sacco di cose che non sono chiare: l'istruzione x86 si imposta è complicata, e quando si accede direttamente all'hardware, ci vuole un po 'di tempo 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.


Answer #2

Dai un'occhiata a Minix . Studiare il codice sorgente insieme a " Progettazione e implementazione dei sistemi operativi ". Prendi in considerazione la possibilità di contribuire al progetto. Penso che Minix sia un sistema operativo davvero valido e promettente. È anche un progetto ben finanziato. Ciò significa che potresti persino essere pagato per i tuoi contributi!




Answer #5

Molte scuole hanno classi di OS che fanno gran parte di ciò che descrivi. La mia scuola (CMU) ha insegnato il sistema operativo in C, e abbiamo scritto un kernel, un file system e una shell, e abbiamo fornito il codice per un boot loader.

Sfortunatamente, non sono stato in grado di trovare alcuna risorsa definitiva per questo corso (15-412) sul Web e si è evoluta nel tempo. Ma forse le persone potrebbero pubblicare link a fonti e incarichi per le scuole che hanno buone risorse sul web.


Answer #6

Potresti considerare di dare un'occhiata a Operating Systems Concepts, di Abraham Silberschatz - Comprendere i concetti di programmazione dei sistemi è un requisito fondamentale, dare un'occhiata agli interni del kernel F / OSS dei sistemi operativi Linux * BSD e GNU/Linux , specialmente le versioni precedenti, che sono probabilmente un po 'più documentati. alt text http://ecx.images-amazon.com/images/I/51zezQiqYYL._SL500_AA240_.jpg alt text http://ecx.images-amazon.com/images/I/51NEmsW4TCL._SL500_AA240_.jpg


Answer #7

Potresti divertirti con this tutorial chiamato "Roll your own toy UNIX-clone OS", è molto intuitivo e dovrebbe aiutarti a raggiungere la tua strada.

In bocca al lupo.


Answer #8

Se non ti dispiace usare la virtualizzazione dell'hardware, c'è un corso (libro + lezioni + software) che ti porterà da "Da Nand a Tetris". Si crea un intero sistema interamente dal proprio (a tal fine atomico, e dato) il gate NAND elettrico, fino alla costruzione del sistema operativo, un linguaggio e infine la codifica di un semplice gioco sulla propria macchina personale.

Penso che sia una grande idea e qualcosa a cui intendo completamente incastrare presto. Il libro è sorprendentemente economico e credo che il corso sia insegnato al MIT. Non riesco ad immaginare sentimenti più grandi di avere la piena conoscenza completa di un intero sistema che hai costruito da zero.

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


Answer #9

Studia il sistema A2 (precedentemente chiamato sistema Oberon ) per le idee che puoi rubare. Si tratta di un sistema operativo grafico costruito da sole due persone, anche se ammette che si tratta di Niklaus Wirth. Prima uscita nel 1990 e la velocità è sorprendentemente buona. C'è un libro di Gutknecht.


Answer #10

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

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

Ad esempio, avrai bisogno di un set di driver per leggere il tuo 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! Molto poco del lavoro che fai per ottenere il chip in modalità protetta sarà trasferibile dopo quel punto. Volete eseguirlo su un PC diverso + - 4 anni e avrete bisogno di un altro set di driver.

Cerca nel bootstrap un ARM o altro chip "embedded" a 32 bit. Sono disponibili schede di sviluppo economiche o puoi saldare le tue! Alcuni hanno built-in Ethernet e USB. Penso che ti divertirai di più a lavorare su un'architettura sana e non croccante, e magari a trovare alcune abilità riutilizzabili.


Answer #11

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

Costruire anche un display VGA Il clone DOS è 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 puoi suggerire riferimenti per costruirli?

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

Dopo la sequenza di avvio, allora cosa? Come accedere alla modalità protetta, ecc.

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

quindi inizierai il multitasking e scoprirai 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 vorrai risolvere un sistema di memoria virtuale alla fine.

Cosa mi imbatterò senza dubbio in quello che mi confonderà?

non avendo strumenti di debug, non avendo IO

Come posso renderlo una riga di comando O / S, e una grafica?

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

Che cos'è un O / S grafico integrato? Come, come potrei fare qualcosa di simile, una riga di comando, con un carattere e un'immagine in alto?

Cerca le finestre X.

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


Answer #12

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

benvenuto nel mondo dello sviluppo del sistema operativo.

Vedere anche altri collegamenti alla documentazione x86 nel wiki dei tag x86 di SO: manuali Intel e AMD, documenti del compilatore / assemblatore e varie guide.

Suggerisce inoltre di utilizzare BOCHS o altri ambienti virtuali per il debug, poiché è possibile eseguire il single-step del bootloader ed esaminare i registri.


Answer #13

Cominciando dall'inizio. Leggi, leggi, leggi, leggi, leggi. È necessario avere una solida comprensione 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 di OS al college:

Sistemi operativi moderni PDF

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 è per lo più teorico, ma credo che abbia anche un libro che discute più dell'implementazione. Non l'ho mai letto, quindi non posso commentare.

Ciò dovrebbe aiutarti a migliorare la gestione dei processi, la gestione della memoria, i file system e tutto il resto del kernel del sistema operativo che devi fare per portarlo a uno stato di avvio. Da quel momento in poi si tratta fondamentalmente di scrivere driver di dispositivo per l'hardware che è necessario supportare e offrire implementazioni delle funzioni della libreria C per fare chiamate al kernel per cose come aprire file e dispositivi, leggere e scrivere, passare messaggi tra processi, ecc. .

Leggi sull'assemblaggio x86 (supponendo che tu stia progettando questo per una macchina x86). Questo dovrebbe rispondere a molte delle tue domande riguardo allo spostamento tra le modalità operative del processore.

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

Uno dei vantaggi di un dispositivo integrato è anche la possibilità di evitare di scrivere un driver VGA per un lungo periodo di tempo. Nel mio caso, la scheda di sviluppo Digilent ha un UART integrato, quindi posso utilizzare efficacemente l'uscita seriale come console per ottenere il tutto e avviarlo a una riga di comando con il minimo sforzo.

Assicurati solo che qualsiasi cosa tu scelga di target abbia un compilatore prontamente disponibile e ben testato. Non vuoi scrivere un sistema operativo e un compilatore contemporaneamente.





assembly