Back to site
Since 2004, our University project has become the Internet's most widespread web hosting directory. Here we like to talk a lot about web servers, web development, networking and security services. It is, after all, our expertise. To make things better we've launched this science section with the free access to educational resources and important scientific material translated to different languages.

MikeOS

Kako napisati jednostavan operativni sistem

(C) 2011 Mike Saunders and MikeOS Developers

Ovaj dokument vam pokazuje kako da napišete i izgradite svoj prvi operativni sistem u x86 sklopljenom jeziku. Objašnjava šta vam je potrebno, osnove procesa PC boot procesa i sklapanje jezika, kao se ide dalje. Dobijeni OS će biti jako mali (uklapa se u bootloader) i ima veoma malo mogućnosti, ali je to polazna tačka za vas da istražujete dalje.

Nakon što ste pročitali uputstvo, pogledajte MikeOS projekatza veći x86 sklopljeni jezik OS koji možete istraživati da biste proširili svoje veštine.



Zahtevi

Pre programiranja iskustvo je neophodno.Ako ste radili nešto malo kodiranja u jeziku visokog nivoa kao što je PHP ili Java, to je dobro, ali idealno je da imate neko znanje o jeziku nižeg nivoa kao što je C, naročito na temu memorije i pokazivača.

Za ovo uputstvo koristimo Linux. Razvoj OS je svakako moguć na Windows-u, ali je mnogo lakše na Linuxu jer možete da dobijete kompletan razvojni lanac alatki sa samo nekoliko klikova mišem/komandi.Linux je takođe veoma dobar za izradu flopi disketa i CD-ROM slike - ne morate da instalirate gomilu nezgodnih programa.

Instaliranje Linuxa je danas veoma jednostavno; zgrabite Ubuntu i instalirati ga u VMware ili Virtualbox-u ako ne dual-butu.Kada budete u Ubuntu,prinabavite sve alatke koje vam trebaju da biste pratili ovaj vodič unošenjem ovoga na terminalnom prozoru:

sudo apt-get install build-essential qemu nasm

Ovo će vas odvesti na lanac alatki za razvoj (kompajler, itd), QEMU PC emulator i NASM asembler, koji konvertuje sklopljene jezike u sirovom mašinskom kodu izvršenih fajlova.



PC prajmer

Ako pišete OS za x86 računare (najbolji izbor, zbog ogromne količine dokumentacije), morate da razumete osnove kako se računar pokreće. Srećom, ne morate da se se zamarate sa komplikovanim stvarima poput grafičkih drajvova i mrežnih protokola,jer ćete se usredsrediti na suštinske delove.

Kada je računar pokrenut,počinje sa izvršavanjem BIOSa (Basic Input / Output Sistem), koji je u suštini mini-OS ugrađen u sistem. On obavlja nekoliko hardverskih testova (npr. proveru memorije) i obično se proteže izvan grafike(npr. Dell logo) ili dijagnostičkog teksta na ekranu. Onda, kada je to gotovo,počinje da učitava vaš operativni sistem iz bilo kog medija koji može naći. Mnogi računari skoče na hard disk i počnu sa izvršavanjem koda koji su našli u Master Boot Record (MBR),deo od 512-bajta na početku hard diska;neki pokušavaju da nađu izvršni kod na disketi (boot sektor) ili CD-ROMu.

Ovo sve zavisi od poretka pokretanja- obično možete da ga odredite u BIOS opciji ekrana. BIOS učitava 512 bajtova iz odabranih medija u svoju memoriju, i počinje sa izvršavanjem. Ovo je bootloader, mali program koji potom učitava glavni OS kernel ili veći boot program (npr. GRUB / LILO za Linux sisteme). Ovaj 512obajtni bootloader ima dve posebna broja na kraju da kaže OS-u da je boot sektor - o tome ćemo pričati kasnije.

Imajte na umu da računari imaju zanimljivu funkciju za pokretanje.Istorijski gledano, većina računara je imala flopi disk, tako da je BIOS bio podešen da se pokrene sa tog uređaja. Danas, međutim, mnogi računari nemaju flopi disk - samo jedan CD-ROM - pa je razvijena caka da se pobrine za to.Kada pokrećete sa CD-ROM-a, on može da imitira disketu;BIOS čita CD-ROM drajv, učitava u gomilu podataka i izvršava ga kao da je flopi disk. To je neverovatno korisno za nas OS programere, jer možemo da napravimo flopi disk verziju našeg OS-a, ali možmo da ga pokrenemo u CD-only mašinama. (Sa disketama je stvarno lako raditi, dok CD-ROM fajl sistemi mnogo komplikovaniji.)

Dakle, da ponovimo, boot proces je:

  1. Uključivanje: PC startuje i počne izvršavanje BIOS koda
  2. BIOS traži različite medije kao što su flopi disk ili hard disk.
  3. BIOS učitava 512 bajtova boot sektora od određenih medija i počinje izvršavanje.
  4. Tih 512 bajtova onda idu na učitavanje samog OS-, ili mnogo složenijeg bootloadera.

Za MikeOS, imamo 512obajtni bootloader, koji učitavamo na flopi disk fajl sa slikama (virtuelni flopi). Posle možemo da ubacimo tu flopi sliku u CD, za računare koji imaju samo CD-ROM drajvove. U svakom slučaju, BIOS ga učitava kao da je na disketi, i počne sa izvršavanjem. Mi imamo kontrolu nad sistemom!



Prajmer za izgradnju jezika

Većina modernih operativnih sistema su napisani u C / C ++. To je veoma korisno kada su prenosivost i održavanje koda od presudnog značaja, ali to dodaje dodatni sloj složenosti u postupku. Za vaš prvi operativni sistem,bolje vam je da se držite sa igradjenim jezicima,kao onim kod MikeOS.Opsirniji je i nije prenosiv, ali ne morate da brinete o kompajlerima i linkersima. Pored toga, potrebno je malo izgradnje da se pokrene bilo kakav OS.

Izgradjeni jezik (ili kolokvijalno "asm") je tekstualni način predstavljanja instrukcija koje CPU izvršiava. Na primer, instrukcija za pomeranje neke memorije u CPU može biti 11001001 01101110 -- ali to se teško pamti! Dakle,izgradnja omogućava mnemotehnika za zamenu ovih instrukcija, kao što je mov ax, 30. Ona direktno korelira sa mašinskim kodom CPU instrukcija, ali bez besmislenih binarnim brojeva.

Kao kod većine programskih jezika,izgradnja je spisak uputstava koje treba sledili po redu. Možete da šarate po različitim mestima i postavite podprograme / funkcije, ali mnogo minimalnije od C # i prijatelja. Ne možete uneti samo "Hello world" na ekran - CPU nema koncept o tome šta je ekran! Umesto toga, radite sa memorijom, manipulišući komade RAM-a, primenjivajući aritmetiku na njih i stavite rezultate na pravo mesto. Zvuči strašno? Malo je strano u početku, ali nije teško da se shvati..

Na nivou izgradnje jezika ne postoji takva stvar kao što su promenljive u smislu jeziku visokog nivoa.Ono šta vi imate je, međutim, skup registara,koji su skladištani na CPU memoriji.Možete staviti brojeve u ove registre i obavljati proračune na njima. U 16-obitnom režimu, ovi spiskovi mogu sadržati brojeve između 0 i 65535. Evo liste osnovnih registara o tipičnom x86 CPU:

AX, BX, CX, DX Registri opšte namene za čuvanje brojeva koje koristite. Na primer, možete da koristite AX za skladištenje karaktera koji je pritisnut na tastaturi, dok koristite CX da deluje kao brojač u šupljini.. (Napomena: ovi 16-obitni registri se mogu podeliti u 8-obitne registre kao što su AH / Al, BH / BL itd)
SI, DI Registri izvora i odredišta podataka indeksa. Oni ukazuju na mesta u memoriji za preuzimanje i čuvanje podataka.
SP Stack Pointer (objašnjen u trenutku).
IP (ponekad CP) Instrukcija / Code pointer Ovo sadrži lokaciju u memoriji instrukcija koje će biti izvršene.Kada je instrukcija završena,ona se povećava i dolazi do druge se na instrukcije. Možete promeniti sadržaj ovog registra za kretanje u vašem kodu.

Dakle, možete koristiti ove registre za čuvanje brojeva dok radite - nešto kao promenljive, ali one su mnogo više fiksne u veličine i nameni.Postoji nekoliko drugih, posebno segmentnih registera.Zbog ograničenja u starim računarima, memorijom se moglo rukovati u 64k delovima nazvanim segmenti. Ovo je zaista zbunjujuće, ali srećom ne morate da brinete o tome - za sada, vaš OS će biti manje od kilobajta u svakom slučaju! U MikeOS-u mi se ograničavamo na jedan 64K segment, tako da ne moramo da se bavimo neredom okolo sa segmentnim registrima..

Skladišteje prostor vašeg glavnog RAM koji se koristi za čuvanje privremenih informacija. To se zove skladište, jer se brojevi slažu jedan na drugi. Zamislite Pringles tubu: ako stavite karticu za igranje, iPod shuffle i podmetač za pivo, vi ćete ih izvući u obrnutom redosledu (podmetač za pivo, onda iPod, i na kraju karticu). Isto je sa brojevima: ako gurnete brojeve 5, 7 i 15 na gomilu,izvućićeteih kao 15, onda 7, i na kraju 5. U izgradnji možete gurnuti registare na gomilu i izvući ih kasnije -to je korisno kada želite da privremeno skladištate vrednosti registra dok koristite taj registar za nešto drugo.

PC memorijase može posmatrati kao linearna linije golub-rupa u rasponu od 0 bajta do koliko god da ste instalirali (milioni bajtova na savremenim mašinama). Na droju bajtova 53,634,246 u vašem RAMu, na primer, možete da imate kod web pretraživača da biste videli ovaj dokument. Ali, dok mi ljudi računamo u nadležnosti od 10 (10, 100, 1000 itd - decimalno), računari su bolje sa dve snage (jer su oni binarno bazirani). Dakle, mi koristimo heksadecimale, kojima je baza 16, kao način predstavljanja brojeva. Pogledajte ovaj grafikon da biste razumeli:

Decimalno 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Hexadecimalno 0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 13 14

Kao što možete da vidite, dok naš normalan decimalni sistem koristi 0 - 9, heksadecimalni koristi 0 - F u brojanju. To je malo čudno u početku, ali ćete se navići. U izgradnji programiranja, mi smo identifikovali heksadecimalne (hex) brojeve označavanjem 'h' na kraju- pa je 0Ahheksadecimala za broj 10. (Takođe možete označiti heksadecimalnu u izgradnji tako što ćete staviti prefiks 0x broju -na primer, 0x0A)

Hajde da završimo sa nekoliko zajedničkih uputstva o izgradnji. Ovo pokreće memoriju okolo, uporedjuje ih i obavlja izračunavanja. Oni su gradivni blokovi vašeg OS -postoje stotine uputstava, ali ne morate da iu upamtite sve, jer se nekolicina najvažnijijih koristi 90% vremena.

mov Kopira memoriju sa jedne lokacije ili registra na drugu . Na primer, mov ax, 30stavlja broj 30 u AX registar. Koristeći uglaste zagrade, možete dobiti broj na memorijskoj lokaciji ukazanoj od atrane registra. Na primer, ako BX sadrži 80, a onda mov ax, [bx] znači "uzmi broj iz memorijse lokacije 80i stavi ga u AX." Možete da premeštate brojeve izmedjuregistara takodje: mov bx, cx.
add / sub Dodaje broj registru. add ax, FFhdodaje FF u heksadecimali (255 u našoj normalnoj decimali) AX registru. Možete koristiti sub na isti način: sub dx, 50.
cmp Poredi registar sa brojem. cmp cx, 12 poredi CX registar sa brojem 12.On zatim ažurira poseban registar o procesoru pod nazivom FLAGS - specijalni registar koji sadrži informacije o poslednjoj operaciji. U tovom slučaju, ako je broj 12 je veći od vrednosti u CX, stvara negativan rezultat, i upisuje te negativne u FLAGS registru. Možemo koristiti ovo u sledećim instrukcijama .
jmp / jg / jl... Prelazi na drugi deo koda. jmp labelprelazi (GOTOs) na deo izvornog koda gde imamo oznaku: written. Ali, ima još - možete preći uslovno, na osnovu CPU flags postavljenih u prethodnoj komandi Na primer, ako je cmpinstrukcijom utvrđeno da registar držao manju vrednost od one sa kojom je uporedjen, možete delovati na to sa jl oznakom(prelaz na ako je manje-nego nivo). Slično tome,, jge oznakaprelazi na "nivo" u kodu ako je vrednost u cmp veće od ili jednaka broju sa kojim je poredjen.
int Prekida program i prelazi na određeno mesto u memoriji. Operativni sistemi postavljaju prekde koji su analogni potprogramima u jezicima visokog nivoa. Na primer, u MS-DOS, 21h prekida pruža DOS usluge (npr.otvaranje fajla). Obično se stavi vrednost u AX registar, onda se pozove prekid i sačekate rezultat (prešao je u registar takodje). Kada pišete OS od nule, možete pozvati BIOS sa int 10h, int 13h, int 14h or int 16h za obavljanje zadataka kao što su štampanje žica, čitajanje sektora sa diskete itd.

Pogledajmo neke od ovih uputstava malo detaljnije. Razmotrite sledeći fragment koda:

	mov bx, 1000h
	mov ax, [bx]
	cmp ax, 50
	jge label
	...

label:
	mov ax, 10

U prvoj instrukciji, smo pomerili broj 1000h u BX registar. Zatim, u drugoj instrukciji, smo uskladištali u AX šta god je u memorijskoj lokaciji istaknuto od strane BX. To je ono što [bx]znači: ako smo samo upravo uradili mov ax, bxbx će jednostavno kopirati broj 1000h u AX registar. Ali pomoću uglastih zagradama, mi kažemo: nemoj samo da kopiraš sadržaj BX u AX, već kopiraj sadržaj memorijske adrese koju ističe BX.Imajući u vidu da BX sadrži 1000h, ova instrukcija kaže: nadji sve što je u memorijskih lokaciji 1000h i stavi ga u AX.

Dakle, ako jbajt memorije na lokaciji 1000h sadrži 37, onda će taj broj 37 biti stavljen u AX registar preko naše druge instrukcije. Sledeće koristimo cmpda uporedimo broj u AX sa brojem 50 (decimalni broj 50 - nismo stavili sufiks ‘h'). Sledeća jgeinstrukcija deluje na cmp odnosu, koji je postavio FLAGS registar kao što je opisano ranije. Jge oznakaoznaka kaže: ako je rezultat prethodnog poređenja veći ili jednak, predjite na deo koda koji je označen:. Dakle, ako je broj u AX veći ili jednak 50, izvršenje prelazi na oznaku.Ako ne, izvršenje se nastavlja na '...' fazi.

Još nešto: možete uneti podatke u program sa db (definisani bajt) direktno.Na primer, ovo definiše niz bajtova sa brojem nula na kraju, koji predstavljaju niz:

	mylabel: db 'Message here', 0

U našoj izgradjenom kodu, mi znamo da se niz karaktera,okončan sa nulom, može naći na mylabel: poziciji. Takođe možemo postaviti jedian bajt za upotrebu donekle kao promenljive:

	foo: db 0

Sada foo: ukazuje na jedan bajt u kodu, koji će u slučaju MikeOS biti pisan kao OS je potpuno kopiran na RAM.Dakle, možete imati ovu instrukciju:

	mov byte al, [foo]

Ovo pomera ukazani bajt na foo u AL registar.

То su osnove x86 izgradnje jezika i dovoljno za početak. Prilikom pisanja OS-a,ipak ćete morati da naučite mnogo toga tokom daljeg rada,zato pogledajte Resourcesdeo za linkove o dubljim pričama o izgradnji.



Vaš prvi OS

Sada ste spremni da napiše svoj prvi kernel operativnog sistema.Naravno, ovo će biti izuzetno ogoljeno, samo 512-bajta boot sektora kao što je opisano ranije, ali to je polazna tačka za vas da proširite dalje. Nalepite sledeći kod na fajl pod nazivom myfirst.asmi sačuvajte ga u svoj home direktorijum - ovo je izvorni kod vašeg prvog OS-a.

	BITS 16

start:
	mov ax, 07C0h		; Set up 4K stack space after this bootloader
	add ax, 288		; (4096 + 512) / 16 bytes per paragraph
	mov ss, ax
	mov sp, 4096

	mov ax, 07C0h		; Set data segment to where we're loaded
	mov ds, ax


	mov si, text_string	; Put string position into SI
	call print_string	; Call our string-printing routine

	jmp $			; Jump here - infinite loop!


	text_string db 'This is my cool new OS!', 0


print_string:			; Routine: output string in SI to screen
	mov ah, 0Eh		; int 10h 'print char' function

.repeat:
	lodsb			; Get character from string
	cmp al, 0
	je .done		; If char is zero, end of string
	int 10h			; Otherwise, print it
	jmp .repeat

.done:
	ret


	times 510-($-$$) db 0	; Pad remainder of boot sector with 0s
	dw 0xAA55		; The standard PC boot signature

Idemo korak po korak kroz ovo BITS 16nije x86 CPU instrukcija, samo govori NASM asembleru da radite u 16-obitnom modu. NASM tada možeprevesti sledeće instrukcije u sirovi x86 binarni. Onda imamo početak:oznaku, koja nije strogo potrebna kada izvršenje počine odmah na početku fajla u svakom slučaju, ali to je dobra oznaka. Odavde pa nadalje, imajte u vidu da je zarez (;) znak se koristi da označe ne-izvršni tekstualni komentari -.možemo staviti bilo šta tu.

Sledećih šest redova koda nas zapravo ne ineteresuju - oni jednostavno postavljaju segment registra tako da ukazatelj gomile (SP) zna gde je naša zgodna gomila privremenih podataka, i gde se segment podataka (DS) nalazi. Kao što je pomenuto, segmenti su užasno konfuzan način rukovanja memorijom iz starih 16-obitnih dana, ali mi samo postavljamo segment registra i zaboravimo da postoje. (Reference na 07C0h su ekvivalenti segmenta lokacija na kojima BIOS učitava naš kod, tako da možemo da počnemo odatle.)

Sledeći deo je zabavni deo. mov si, text_stringkaže: kopirajte lokaciju linje teksta ispod u SI registar. Jednostavno dovoljno! Zatim koristimo call, koji je kao GOSUB u BASIC ili poziv funkcije u C.To znači: predji na određeni deo koda, ali budi spreman za povratak ovde kada završimo.

Kako kod zna kako da uradi to? Pa, kad koristimo call instrukciju, CPU inkrementira položaj IP (Instruction Pointer) registra i guraga na gomilu. Možda se sećate iz prethodnog obrazloženja gomile da je poslednji ulazi-prvi izlazi mehanizam skladištanja memorije. Svi ti poslovi sa ukazivačem na gomilu (SP) i segmentom gomile (SS) na početku su očistili prostor za skladištanje, tako da možemo tu ubaciti privremene brojeve bez zamene našeg koda.

Dakle, call print_stringkaže: predji na print_string rutinu, ali stavi lokaciju sledeće instrukcije na gomilu, tako da je možemo izvući kasnije i nastaviti izvršenje ovde. Izvršenje je sprebačeno na print_string: -ova rutina koristi BIOS za izlaz teksta na ekran. Prvo smo stavili 0Eh na AH registar (gornji bajt AX-a). Onda imamo lodsb(učitani niz bajta) instrukciju, koja preuzima bajt podataka od lokacije ukazane od strane SI, i skladišta ga u AL (niži bajt AX). Sledeće što koristimo cmpda proverite da li je taj bajt nula -ako jeste,to je kraj linije i mi prestajemo sa štampanjem (prelazimo na .done oznaku).

Ako nije nula, pozivamo int 10h(prekidamo naš kod i idemo na BIOS), koji čita vrednost u AH registru (0Eh) koju smo postavili pre. Ah, kaže BIOS - 0Eh u AH registru znači "odštampaj karakter u AL registar na ekranu!". Dakle BIOS štampa prvi karakter u našem nizu i vraća iz int poziva. Zatim prelayimo na .repeatoznaku, koja počinje ponovo proces- lodsb učitava naredni bajt iz Sl (povećava SI svaki put), gleda da je nula i odlučuje šta je sledeće raditi. Retna kraju naše rutine žica za štampanje znači: "mi smo ovde završili - vratiti se na mesto gde smo bili tako što prizovemolokaciju koda iz gomile nazad u IP registar”.

Dakle imamo demonstraciju petlje, u samostalnoj rutini. Možete videti da je text_string oznaka uz niz karaktera, koje ubacujemo u naš OS koristeći db.Tekst je u apostrofima, tako da NASM zna da nije kod, i na kraju stavimo nulu da kažemo našem print_string rutini da smo na kraju.

Hajde da se podsetimi:počinjemo sa uspostavljanjem segmenta registra, tako da je naš OS zna gde se stack pointeri i izvršni kodovi nalaze. Onda usmerimo SI registar na niz u našem binarnom OS-u, i prizovemo našu niz- štampa rutinu. Ova rutina skenira kroz karaktere ukazani od strane SI i prikazuje ih dok se ne pronađe nulu, i tada se vrati u kod koji je pozvala. Onda jmp $ red kaže: nastavi sa prelaskom u isti red.( '$' u NASM označava trenutnu tačku koda). Ovo postavlja beskonačne petlje, tako da je poruka prikazana i naš OS ne pokušava da izvrši sledeći niz!

Poslednja dva reda su zanimljivi. Za PC prepozna ispravnu disketu u sektoru diska za pokretanje sistema, ona mora da bude tačno 512 bajtova u veličini i da se završava sa brojevima AAH i 55h (boot potpis). Dakle, prvi od ovih lredova kaže: podloga našeg krajnjeg binarnog fajlada bude 510 bajta. Onda drugi red koristi dw(definisati reč - dva bajta) koji sadrži pomenuti boot potpis. Voila:. 512 bajta boot fajl sa pravilnim brojevima na kraju za BIOS da prepozna.

Hajde da napravimo naš novi OS. U prozoru terminala, u vašem home direktorijumu, unesite:

nasm -f bin -o myfirst.bin myfirst.asm

Ovde sastavljamo kod našeg tekstualnog fajla u sirovi binarni fajl instrukcije u mašinskog koda.Sa -f binzastavom,mi kažemo NASM da želimo običan binarni fajl (ne komplikovanu Linux izvršnu - želimo ga što običnijeg mogućeg). -o myfirst.bin deo govori NASM da generiše rezultat binarno u fajlu pod imenom myfirst.flp.

Zatim unesite

dd status=noxfer conv=notrunc if=myfirst.bin of=myfirst.flp

On koristi 'dd' uslugu da direktno kopira naš kernel na prvi sektor slike flopi diska.Kada je to gotovo,možemo pokrenuti naš novi OS pomoću QEMU PC emulatora kako sledi:

qemu -fda myfirst.flp

i to je to! Vaš OS će se pokrenuti u virtuelnom PCu. Ako želite da ga koristite na pravom PC-ju možete da upišete sliku flopi diska i pokrenete njega, ili generišete sliku CD-ROM ISO-a. Za ovo drugo, napravite novi direktorijum pod nazivom cdiso i pomerite myfirst.flp Zatim, u svom home direktorijumu, unesite:

mkisofs -o myfirst.iso -b myfirst.flp cdiso/

Ovo generiše CD-ROM ISO sliku pod nazivom myfirst.iso sa emulacije diskete pomoću virtuelnog flopi diska od ranije. Sada možete da narežete taj ISO na CD-R i podignete svoj računar sa toga! (.Imajte na umu da morate da ga narežete kao direktan ISO sliku, a ne samo da ga kopirate na disk).

Sledeće što ćete želeti je da poboljšate svoj OS- istražite MikeOS kod da biste dobili inspiraciju. Zapamtite da bootloadersi ograničeni na 512 bajta, tako da ako želite da uradite mnogo više, moraćete da napravite vaš bootloader da učitava poseban fajl sa diska i počne sa izvršavanjem, na isti način kao MikeOS.



Korak dalje

Znači, sada imamo pokrenut vrlo jednostavan bootloader operativni sistem. Šta je sledeće? Evo nekoliko ideja:

  • Dodajte još rutina -- već imate print_string u kernelu. Možete dodati rutine da biste dobili nizove,pomerite kursore itd .Pozovite pretražite internet za BIOS koje možete koristiti za postizanje ovoga.
  • Napunite fajlove ---Bootloader je ograničen na 512 bajta, tako da nemate mnogo prostora. Možete da namestite bootloader da učitava naknadne sektore na disku u RAM-u, i predjete do te tačke da nastavite izvršenje. Ili možete dočitati FAT12 ,fajl sistem koji koriste flopi diskovi, i sprovode to. (Videti izvor / bootload / bootload.asm u MikeOS zip za implementaciju)
  • Pridružite još jedan projekat -- Ovo uputstvo je napisao Majk Saunders, vodeći programer za MikeOS.To je jednostavni 16-obitni x86 operativni sistem izgradjenog jezika i kada ste potpuno sigurni sa koncepatima koji su obuhvaćen ovde, moći ćete da zapnete na rad na kodu i dodate funkcije. Pogledajte Sistem Developer Handbook link na naslovnoj strani za više informacija, i pridružite se mailing listi!


Published (Last edited): 11-12-2012 , source: http://mikeos.berlios.de/write-your-own-os.html