wow, vyzera to pekne, i ked az tak velmi vsetkemu tam nerozumiem. Ten OS sa bude na co pouzivat? ma neake vyssie ambicie? alebo to je skor iba „na hranie“ ?
Ale inac pekna praca :-)
PS: A mne sa serial paci, nikdy nebudem pisat vlastne jadro ani OS, ale vzdy som bol zvedavy ako sa to robi ;) Vdaka za pekny clanok.
Lze ho použít už nyní jak na embedded zařízení, tak menších serverech nebo i desktopech. Pomaličku tam připisuji drivery, podporu dalších architektur a nový software. Ze všeho nejvíc pracuji ale na jádru – nyní lze spouštět OpenGL aplikace, povedlo se mi naportovat knihovnu SDL, je tam už docela použitelné DE, nějaké servery, klienti, atd.
grub moc do hlbky nepoznam tak mam dotaz. Grub pozna elf a je schopny prepnut automaticky pri boote do protect modu ? Tak som prehrabal zdrojaky grubu a vie loadnut elf aj prepnut do protect modu.Akurat neviem ci toto je zrovna dobry „start“ do uvodu o nejakom os a bootovani.Celkom podstatna cast bola preskocena a nebolo by odveci ju aspon napisat.Obcas trochu teorie na zaciatok nezaskodi, ak je teda toto serial pre „zaciatocnikov“ ktory mozno ani netusia ze nejaky real a protect mod existuje len si chcu napisat dalsi os :-)
První článek byl jenom úvod a chtěl jsem aby to hned „něco dělalo“ – takhle si s tím člověk může trochu hrát. To co jste zmiňoval (chráněný režím, ..) jsem nepřeskočil, bootování se budeme věnovat v dalším díle – jednoduše budeme připisovat kód do stávajícího. Myslím, že tato metoda je pro ty, kteří se z toho něco chtějí naučit a především pochopit celek nejjednoduší.
Trošku mi to připomíná přístup použitý tady k vytvoření kompilátoru. Myslím, že k oběma tématům (napsání OS a napsání kompilátoru) lze přistupovat jak způsobem „nejdřív vystudovat školu, napsat tři monografie a pak metodou big bang dospět k výsledku“, tak i způsobem „začneme s hello world a postupně vylepšujeme“. Autor tohoto článku i autor odkazovaného paperu evidentně preferují ten druhý způsob. :-)
Je nutné aby se jádro přeložilo správně – především vám nesmí chybět žádný ze zmíněných balíčků. Při „make“ byste měl viďet přůběh kompilace, aby vše fungovalo, bez chyby. Poté co se vytvoří binárka „kernel.bin“ se musí vytvořit iso obraz („make image“), který potřebuje balík cdrtools, jmenovitě utilita mkisofs. Vytvoří se iso MujOS.iso a pomocí „make qemu“ se pouze spustí.
Teorie operačních systémů je třeba v tomto seriálu: http://www.root.cz/…nux-freebsd/
Preco pouzivate NASM a nie gnu as ? Predsalen nasm je obmedzene na x86 a bolo by lepsie od zaciatku pouzivat as. tu je osekany kod strart.s pre as:
.text .globl start, _start
start:
_start:
jmp multiboot_entry
/* Align 32 bits boundary. */
.align 4
/* Multiboot header. / multiboot_header: / magic / .long 0×1BADB002 / flags / .long 0×00000003 / checksum */ .long -(0×1BADB002 + 0×00000003)
multiboot_entry:
jmp main
loop: hlt jmp loop
inak dik za super clanok :)
Ide o navyky. Ja sam som zacinal s borlandovskym asm s intel syntaxou a potom som mal problem prejst na A&T syntax.
Ze intel syntax je znamejsia je diskutabilne. Podla mna clovek co este nepisal v asm by sa mal rovno naucit a&t syntax ktoru pouziva GNU AS. Predsalen definicia sekcii, premennych, registrov, konstant, volanie cckovych procedur… je rovnaka na kazdom cpu. rozdielne su len instrukcie…
Takze myslim ze pouzitie as by bolo lepsie.
AT&T syntax je stejně nutné používat v inline assembleru (*). Když bude programátor používat oba typy syntaxe, tak se mu to bude plést a najít banální chyby typu „MOV EAX,ECX vs. MOV ECX,EAX“ trvá celkem dlouho. Takže bych byl taky pro jeden typ syntaxe (AT&T) od začátku. Sám jsem dělal dost chyb, když jsem mezi těmito syntaxemi přecházel.
(*) vím, že gcc má switch -mintel-syntax, ale s tím dost programů nejde zkompilovat vůbec, protože v include souborech se assember s inline AT&T syntaxí vyskytuje. Pokud si svoje include soubory přepíšeš sám v Intel assembleru, tak tam zase nerozchodíš běžné open source programy, které kusy AT&T assembleru v sobě mají. AT&T syntax je prostě běžnější.
Je to tak, oči to trhá, ale za sebe mohu říci, že čím zajímavější a „ojedinělejší“ téma, tím moje citlivost na gramatiku klesá. V tomhle případě se jedná o extrémně zajímavou věc, aspoň pro mě. Předpokládám, že je nás spousta takových, kteří se sice na psaní vlastního OS nevrhnou, ale přečíst si takové „how to“ určitě stojí za to!
Nechci moc rypat. Je to urcite uzitecny pocin, spousta lidi si alespon neco vyzkousi, ale misto takovehoto serialu by myslim bylo lepsi dat odkaz na knizky od Tanenbauma (autor Minixu).
Ono je to sice prima udelat hello world, ale bez znalosti dalsich veci (algoritmy na prepinani tasku, mutexy, alokaci pameti, …) to moc pouzitelne nebude. A v tom je ta sila OS, treba napsat dobry alokator pameti je velky problem.
Na ARM7 jsem splacal taskswitcher (nebudeme tomu rikat OS) asi za den. Nejvetsi problem byl s ladenim s obnovou stavu threadu, jinak to je pochopitelne snadne.
Dobre jsou taky odkazy na historicke unixy v jednom mem clanku: http://martin.hinner.info/…les/unix.pdf (na konci „The Unix Heritage Society“ vede k archivu vseho mozneho…).
Minix bych třeba nepovažoval za dobře navržený systém:
Příklad: nabootujte to LIVE-CD (na fyzickém počítači, nikoli virtuálním), nalogujte se na na dvě konzole, na jedné konzoli zadejte ls -laR / a na druhé pouze pište znaky do shellu. Znaky se na obrazovce neobjevují. Minix totiž při čekání na I/O neprovádí žádné jiné syscally.
Další problém Minuxu 3 je synchronní posílání zpráv, když dva procesy proti sobě pošlou zprávu, tak dostanou chybu -EDEADLOCK a musí se z toho nějak vzpamatovat bez ztráty funkčnosti.
Jestli chce někdo nějaký OS na zkoumání, ať si vezme Linux 1.0 nebo 2.0, ten je ještě dost jednoduchý bez přílišných abstrakcí. A 2.0 ti na součaných počítačích možná i poběží.
Minix je podle mě krásnou ukázkou toho, do jakých problémů se člověk může dostat s mikrojádrem. Nicméně i tak si myslím, že Minix za pozornost rozhodně stojí.
Pokud by zájemci nevadilo to, že se nejedná o unixoid, doporučil bych ke zkoumání systém XINU a poněkud starší a místy dost tendenční, nicméně pro začátečníka stále jednu z nejlepších českých knih na dané téma – O. Čada: Operační systémy. Na tom, co tato kniha probírá, se dá už stavět a člověk získá ucelenou představu o základních mechanismech. Navíc XINU, který je v této knize popisován včetně fragmentů kódu v C, tvořících jeho rozhodující část, bych označil za nejjednodušší funkční model plnohodnotného operačního systému, jaký si asi lze vymyslet. Obsahuje jednoduchou správu procesů včetně preemptivního multitaskingu, velmi jednoduché IPC (zprávy, semafory), vlastní systém ovladačů, jednoduchovou blokovou správu paměti, postrádá jakékoliv ochrany, čímž se jeho kód stává mimořádně čitelný, prostý všeho „rušivého“. Řekl bych, že jako úvod do problematiky tento učebnicový OS převyšuje Minix o řád.
Pro zájemce o Unix bych doporučoval od M. J. Bacha „Principy operačního systému Unix“ – skvělá knížka odhalující vnitřní mechanismy, vazby a algoritmy v klasickém Unixu. Stejně jako u předchozí knížky i tady schopnější čtenář dokáže po jejím přečtení celý systém implementovat svými silami.
Ovšem jednoznačně nejlepší jsou dle mého názoru ke studiu Tanenbaumovy knihy „Operating Systems: Design and Implementation“ nebo „Modern Operating Systems“ (v mnoha částech se vzájemně překrývají, první je zaměřena více prakticky – součástí je i výpis Minixu, na němž se v průběhu výkladu demonstruje praktická realizace a odlišnosti od teorie). Pro ty, kdo by se problematikou OS chtěli vážně zabývat, bych je označil za povinnou literaturu. :-)
Už se těším na další pokračování. Jistě nemůže nikdo čekat, že zde vznikne v pár článcích použitelný operační systém, ale jako praktická ukázka jak OS pracuje má tento seriál – pokud bude kompletní – velký význam.
Případným zájemcům o prostudování minimalistického OS doporučuji http://www.jbox.dk/sanos
Rootu přeji vícero odborných článků jako je tento.
Neškodilo by trochu popsat ten linkovací script.
Co přesně znamenají tyto řádky:
code = .; _code = .; __code = .;
bss = .; _bss = .; __bss = .;
atd…Pochopitelně vím co to je code, data, bss, ale ta syntaxe s podtržítky atd. mě mate.
Intuitivně tuším o co jde, ale šlo by to nějak upřesnit?
Seriál bude asi zajímavý i když na to jde odprostřed – spíš než
teorii OS objasní nástroje, pomocí kterých se takový OS dá také začít
psát, což není málo a díky za to. Já třeba teorii znám, ale
v nástrojích zde používaných mám mezery – viz. ten můj dotaz
k linkovacímu scriptu…
Ty slova code, bss a data jsou tam jen ke zmatení nepřítele (Medvěda). Nemají žádný význam, kromě toho, že jsou to identifikátory.
Konkrétně
code = .; _code = .; __code = .;
vytvoří tři symboly (jména uhodnete), každý z nich bude na adrese „aktuálního místa“ ve výstupu, konkrétně tady na začátku kódu. K čemu se pak budou tyhle symboly používat nechci domýšlet, ale např. „end“ je značka konce jádra, takže pamět od „end“ do konce fyzické paměti je volná, což je rozhodně zajímavá informace pro správu paměti.
Pridavam link na jednu pracu, jedna sa o vytvorenie minimalistickeho
kernelu, kde vlastne nic nie je – ide o to,ze je dopodrobna vysvetlene
multiboot, praca s grubom a vlastne vsetko,co sa v tejto casti spominalo,ale
nikde nebolo vysvetlene + ukazky samozrejme.
http://altair.sk/…l-kernel.pdf
Akorát nějak nechápu ten název. Jádro se nazývá jádrem právě proto, že je jádrem nějakého operačního systému. Ne vše, co startuje nikoli z příkazového řádku či kliknutím myši, ale nabootováním do „čistého“ PC, se dá nazvat jádrem OS nebo dokonce OS. Když napíšu jednoduchý file manager s textovým editorem, který bootuje do prázdného PC, neznamená to ještě, že jsem napsal OS nebo jádro OS.
skutecne me velmi prekvapilo, ze autor dokaze ‚polopaticky‘ popsat takove veci. Je to prijemne prakticke, nejvetsi prinos vidim v tom, ze se trochu sirsi technicka verejnost dozvi, ze delat operacni systemy neni zadna alchymie.
Prakticky pristup autora pripisuji jeho pusobeni na VSB, tam si urcite nehraji na neco vic jak MU nebo Matfyz.
Hm, a co ses v tomto dílu dozvěděl o operačních systémech? Vůbec nic. Mám docela rád texty, kde autor dokáže polopaticky vysvětlit _základy_ komplikovaných věcí, ale znamená to do problematiky hodně dobře vidět. Tak jsem na to zvědavý (už proto, že jsem si podobně hrál když mi bylo 16 a v současnosti se technologiemi operačních systémů dost zabývám). V každém případě na hodnocení je ještě příliš brzo. A k té poslední větě – napsat operační systém opravdu dokáže 16ti letý kluk, když na to příjde, ale to ještě neznamená, že tomu rozumí. Dát si do kupy auto svede taky, ale asi taky snad na základě toho neřekneš, že strojaři si na něco hrajou.
autor bloguje na abclinuxu uz leta, takze je mozno lehce zjistit, jestli te problematice rozumi. Na rozdil od tech blogu (ktere jsou takove release notes) je ale tento clanek podan v tom polopatickem tonu. Podle me se to lisi na hony od bezneho zdejsiho prumeru.
Druha vec je, ze v tomto tonu by musel mit ten serial 50 pokracovani. Ale protoze nikde neni napsano, ze to tak nebude, tak musime halt pockat, az na ty taje operacniho systemy dojde. Myslim, ze na to v diskuzi i autor upozornuje.
Praktický přístup autora připisuji jeho vřelému vztahu k vynikajícímu webu osdev.org, kde lze na wiki najít celou řadu návodů ve velmi podobném duchu a s velmi podobným obsahem. Jako metlu proti matfyzu bych to fakt nepoužívala, ostatně tuším, že na matfyzáckém cvičení z operačních systémů tento web také doporučují.
Jinak článek se mi líbil a těším se na pokračování.
Na čem to vlastně teď Root jede?
Přidával jsem předchozí příspěvek, už před tím mi nešlo zobrazit diskuzi, (jen názvy) a po odeslání příspěvku mi to hodilo zpátky na stránku do Firefoxu tohle:
DibiDriverException Object ( [sql:private] ⇒ [message:protected] ⇒ [string:private] ⇒ [code:protected] ⇒ 0 [file:protected] ⇒ /var/www/virtual/root/php-libs/dibi/drivers/mysql.php [line:protected] ⇒ 110 [trace:private] ⇒ Array ( [0] ⇒ Array ( [file] ⇒ /var/www/virtual/root/php-libs/dibi/libs/DibiConnection.php [line] ⇒ 130 [function] ⇒ connect [class] ⇒ DibiMySqlDriver [type] ⇒ → [args] ⇒ Array ( [0] ⇒ Array ( [driver] ⇒ mysql [host] ⇒ db-local [username] ⇒ usys [password] ⇒ Tiapwatufij3 [database] ⇒ usersys [charset] ⇒ utf8 [lazy] ⇒ 1 [name] ⇒ [options] ⇒ ) ) ) [1] ⇒ Array ( [file] ⇒ /var/www/virtual/root/php-libs/dibi/libs/DibiConnection.php [line] ⇒ 231 [function] ⇒ connect [class] ⇒ DibiConnection [type] ⇒ → [args] ⇒ Array ( ) ) [2] ⇒ Array ( [file] ⇒ /var/www/virtual/root/php-libs/UserSys.php
STS Chvojkovice-Brod? Holt asi nějakej dobrej framework… (parafrázuju Jáchyme, hoď ho do stroje)
Ahoj, jsem studentem střední průmyslové školy elektrotechnické Ječná 30 v Praze.
Jsem relativně dobrý programátor a rád se učím nové věci. Vytoření vlastního OS je krásná výzva.
Ovše po přečtění tvého članku jsem absolutně, ale absolutně mimo. Programování OS jsem se nikdy předtím nezajímal a tak nemám absolutní páru o čem mluvíš.
Jediné co jsem dokázal je naistalovat virtuál box (mám ho raději)
Ten zbytek? Akorát stáhnuto. Co stím ale nepíšeš.
Pak kody, krásné srozumitelné (i když linkovací systém či co to je :D vidím prvně). Ale jak smina naložit? Kam sdtrčit jak a tak?
Chybí, je sice krásný že mám kod, ale nevím jak sním :(
Velmy bych ocenil třeba video s komentářem. Nebo poddíl toho dílu s krok za krokem postupem.
Pročítal jsem komentáře a spoustu lidí ti psalo že trocha víc teorie by neškodila. Souhlasím stebou že první díl by měl něco dělat.
Moc jsem se těšil, ale u toho dílu jsem zasekl, neboť nemám šajnu jak se vůbec cokoliv z tohoto dělá.
(třeba základ, zda se mají ty ulity instalovat na konečný stroj, či na stroj ve kterém OS vytvářím)
PS: Prosím mojí otřesnou gramatiku přehlídněte :D Děkuji