Nejlepší odpověď
Záleží na tom, co máte na mysli pod operačním systémem. Jednou jsem napsal jednoduchý systém čekání na fronty, který by prováděl více relací protokolu způsobem každý s každým. Ale běžel pod standardním operačním systémem. Když mikrokontroléry poprvé vyšly pro vestavěné systémy, inženýři obvykle psali svůj vlastní základní operační systém, jak je uvedeno v jedné z dalších odpovědí.
Nejmenší užitečný operační systém, který jsem použil a který měl základní vlastnosti multitaskingu, který byl vypnut – regálový systém se jmenoval QNX. Byl to omezený unixový systém a běžel na prvním počítači IBM IBM. Neměl fantastickou grafiku, ale mohl jsem na něm pohodlně provádět vývoj softwaru. Jediným skutečným rozdílem od moderního stroje bylo ve skutečnosti uživatelské rozhraní s barvou a grafikou. Zavedení systému DOS společností IBM tedy v zásadě vrátilo počítačový průmysl zpět nejméně na 10 let. V té době existovala řada nadřazených operačních systémů (které mohly být přizpůsobeny) nebo byly vyvíjeny v té době, přičemž standard stanovil Unix.
Odpověď
Právě jsem dokončil vývoj jádro pro třídu ( CS-4284 Systems & Networking Capstone ) během mého posledního semestru ve škole. Dříve jsem vzal třídu OS, která si klade za cíl pracovat s OS z pohledu programátora, a nikoli z pohledu návrháře OS. Být zapojen do vývoje OS a jádra za poslední rok a půl (není to dlouho, ale hodně jsem se toho naučil), tady doporučuji:
1. Mistře C , už to nemohu zdůraznit. Ve skutečnosti ne, zvládněte to. Vývoj OS je těžký. Zahrnuje spoustu konceptů, které opravdu potřebujete ke zvládnutí jazyka C, takže vám nestojí v cestě. Vezměte například potrubí Unix (zadané | v prostředí). Chcete-li ve vašem OS vyvinout rouru, musíte opravdu dobře porozumět systému souborů a struktuře souborů OS. Je to typický problém s omezenou vyrovnávací pamětí (spotřebitel / producent) a bude se muset vypořádat se všemi synchronizacemi. Při zápisu si musíte být vědomi virtuální paměti. Kromě toho je Unix obvykle BYOB (přineste si vlastní vyrovnávací paměť). budete muset správně spravovat vyrovnávací paměť, kterou uživatel poskytl atd. Poslední věcí, kterou zde chcete udělat, je vypořádat se se základními problémy C, jako jsou ukazatele a správa paměti (poznámka: správa paměti v OS je 10x obtížnější než správa paměti C: musíte si být vědomi adresních prostorů uživatel vs. jádro)
2. Kernel vs. OS Musíte pochopit rozdíl mezi jádrem a OS. Jádro je v zásadě mozkem operačního systému. OS je sada aplikací spojených dohromady. Například Mac OS X obsahuje: jádro, rozhraní (GUI), zabudované standardní aplikace (Finder – což je pouze abstrakce vizualizujte souborový systém, TextEdit, prostředí atd …)
3. Nepotápějte se přímo Nelze spustit vývoj jádra během několika dní nebo týdnů. Doporučuji začít s následujícím:
- Seznamte se s kroky kompilace GCC (co se stane, když spustíte gcc, jak se vytvoří spustitelný soubor a co se stane, když spustíte program). Můžete také napsat jednoduchý assembler v C (vzít kód sestavy jako vstupní a výstupní strojový kód. To vyžaduje, abyste pochopili, jaké části .data, .text a .bss jsou v sestavě (velmi užitečné dolů cesta k pochopení virtuální paměti OS). Budete také rozumět adresování na úrovni stroje a tomu, jak jsou vyřešeny pobočky.
- Seznamte se s mach nástroje a programy na úrovni. Navrhuji udělat bombovou laboratoř, protože je k tomu spousta vzdělávacích materiálů. Stačí google bombová laboratoř.
- Seznamte se se základními útoky OS. Navrhuji podívat se na přetečení vyrovnávací paměti ze stejného důvodu jako v bodě 1 (laboratoř přetečení vyrovnávací paměti google).
- Zjistěte více o systémových voláních, vláknech a procesech v C. Odtud si vytvořte svůj vlastní shell v C.
- Zjistěte více o alokaci paměti a implementujte malloc a free v jazyce C. Zjistěte více o návrhových kompromisech, alokačních strategiích, uvolňovacích strategiích atd …
- Další informace o vícevláknovém zpracování a vícenásobném zpracování v C. Odtud se ponořte do synchronizačních mechanismů (zámky, mutexy, semafory) a vytvořte fond vláken v jazyce C, který mohou používat i jiné programy.
4. Nyní můžete zahájit skutečný, ale zjednodušený vývoj jádra OS V tomto okamžiku můžete začít vyvíjet na reálném OS jako návrhář OS. Google Stanford Pintos a získáte přístup k malému vzdělávacímu jádru vyvinutému ve Stanfordu. Dodává se s dokumentací a sadou 4 projektů. Můžete vyhledávat na Googlu pro některé školy, které mají přednášky pro Pintose. Navrhuji koupit koncepty operačního systému ( Amazon.com: koncepty operačního systému (9781118063330): Abraham Silberschatz, Peter B.Galvin, Greg Gagne: Knihy ). Dokumentace je docela dobře a projekty jsou dobře vysvětleny. Operační systém také přichází s testy, které můžete spustit spuštěním příkazu „make check“, takže můžete zjistit, zda jste věci udělali správně nebo ne.
5. Můžete začít přispívat do systému Linux Bude velmi náročné prozkoumat zdrojový kód a rozhodnutí o návrhu Linuxu (což je mnohem komplikovanější než u Pintose), ale myslím, že v tomto okamžiku budete být schopen alespoň začít. S více tréninkem a čtením to zvládnete.
Právě jsem dokončil krok č. 4. Miloval jsem kroky 1 až 3, ale upřímně řečeno, v polovině 4 jsem si uvědomil, že nemám zájem o vývoj OS. Hodně se mi líbilo pracovat s OS jako programátor (z pohledu programátora), ale příliš mě nebavilo kopat hlouběji. Hodně jsem se naučil z vývoje jádra a vystavuje vás spoustě věcí. Kromě toho, pokud umíte napsat jádro, napíšete jakýkoli software. Důrazně doporučuji provést alespoň první 3 kroky, protože vám poskytne skvělý přehled o operačním systému. Doslova se z vás stane celkově lepší softwarový inženýr. Naučíte se více si vážit jazyků na vysoké úrovni a naučíte se také používat správný nástroj / jazyk / technologii pro správnou práci.
Mám spousta materiálu o vývoji OS, projektech, testech atd … Pokud mají lidé zájem, dejte mi vědět komentářem a možná sestavím online eBook / tutorial / průvodce s testovacím prostředím, které začátečníky provede vývojem OS a poskytovat projekty a zpětnou vazbu k práci.