MINIX 3 | |
---|---|
X11 shell se správcem oken TWM , běžící na operačním systému MINIX 3 | |
Vývojář | Andrew Tanenbaum |
rodina OS | Operační systém podobný UNIXu |
Nejnovější verze | |
Frekvence aktualizací finálních verzí | Ano |
Podporované platformy | i386 ( IA-32 ) |
Typ jádra | mikrokernel |
Licence | BSD |
Stát | Aktuální |
Úložiště zdrojového kódu | git.minix3.org/?p=minix.… |
Předchozí | Minix |
Webová stránka | minix3.org |
MINIX 3 je projekt na vytvoření malého , vysoce spolehlivého a funkčního operačního systému podobného Unixu . Byl publikován pod licencí BSD a je nástupcem dříve vytvořených operačních systémů MINIX 1 a MINIX 2 .
Hlavním cílem projektu je vytvořit systém odolný proti chybám , který je schopen detekovat a opravovat vlastní chyby „za běhu“ bez přímého zásahu uživatele. V podstatě se mělo používat operační systém ve vestavěných systémech a vzdělávání. [3]
MINIX 3 aktuálně podporuje architekturu IA-32 počítačů kompatibilních s PC . Je také možné provozovat MINIX pod emulátory a virtuálními stroji , jako jsou Bochs , [4] [5] VMware Workstation , [6] Microsoft Virtual PC [7] a QEMU . Porty pro architektury ARM [8] a PowerPC [9] jsou ve vývoji.
Je distribuován jako obraz operačního systému načtený z vyměnitelného média ( Live CD ).
Vzhledem k povaze systémů založených na monolitickém jádře , kde ovladač (který obsahuje podle tvůrce MINIX 3 Tanenbaum asi 3–7krát více chyb než běžný program) [10] může srazit celý systém, [11 ] MINIX 3 si klade za cíl vytvořit operační systém, který by byl "spolehlivým, samoléčivým, víceserverovým klonem UNIX ." [12]
Aby toho bylo dosaženo, kód běžící v režimu jádra by měl být omezen na minimum a souborový server, procesní server a každý ovladač zařízení by měly běžet jako samostatné procesy v uživatelském režimu. Každý ovladač je pečlivě řízen částí systému známou jako server obnovy. Pokud ovladač nereaguje na ping ze serveru pro obnovení, je zavřen a nahrazen novou kopií.
Na monolitickém systému může chyba v ovladači shodit celé jádro, což je v MINIX 3 mnohem méně pravděpodobné. [13]
MINIX 3 byl oznámen 24. října 2005 Andrewem Tanenbaumem během své úvodní přednášky na ACM Operating Systems Principles Symposium . Zatímco MINIX 3 stále slouží jako plán pro nové vydání knihy Tanenbaum a Woodhull, byl přepracován tak, aby byl „použitelný jako robustní operační systém pro vestavěná zařízení a zařízení s omezenými zdroji, která vyžadují vysokou spolehlivost“.
verze | datum vydání | Popis |
---|---|---|
3.1.0 | 2005-10-24 |
|
3.1.2a | 2006-05-29 |
|
3.1.3 | 2007-04-13 |
|
3.1.3a | 2007-06-08 |
|
3.1.4 | 2009-06-09 |
|
3.1.5 | 2009-11-05 |
|
3.1.6 | 2010-02-08 |
|
3.1.7 | 2010-06-16 |
|
3.1.8 | 2010-10-04 | |
3.2.0 | 2012-02-29 |
|
3.2.1 | 2013-02-21 |
|
3.3.0 | 2014-09-16 |
|
|
S vydáním MINIX 3.2.0 byly vylepšeny oficiální stránky. Jeho výhodou je, že tlačítko ke stažení a odkazy na další důležité stránky jsou umístěny přímo na hlavní stránce. Oficiální wiki dosud neobdržela požadovanou revizi a v současné době využívá MoinMoin .
Hlavním cílem MINIX 3 je spolehlivost. Níže jsou uvedeny některé z nejdůležitějších zásad pro zlepšení spolehlivosti.
Monolitické operační systémy jako Linux a FreeBSD a hybridní systémy jako Windows obsahují miliony řádků kódu jádra . MINIX 3 má asi 6 000 řádků spustitelného kódu jádra, což usnadňuje dohledání problému v kódu.
V monolitickém OS jsou ovladače zařízení umístěny v jádře. To znamená, že když se nahraje nová periferie, do jádra se vloží neznámý a potenciálně nedůvěryhodný kód. Chyba v kódu ovladače může vést ke zničení systému. V MINIX 3 běží každý ovladač ve vlastním procesu. Ovladače nemohou provádět privilegované příkazy, jako je úprava tabulek stránek , libovolné I/O nebo zápis do paměti na absolutní adresu. Jsou nuceni zavolat do jádra, aby tak učinili, a to zkontroluje platnost každého příkazu.
V monolitickém OS může ovladač zapsat do paměti libovolné slovo a tím náhodně poškodit uživatelský program. V MINIX 3, když uživatel očekává data například ze souborového systému, vytvoří popisovač udávající, kdo má přístup ke kterým adresám. Poté předá index tohoto deskriptoru systému souborů, který jej pak může předat ovladači. Systém souborů nebo ovladač požaduje, aby jádro zapisovalo do tohoto deskriptoru, což jim znemožňuje zapisovat adresy mimo vyrovnávací paměť.
Dereferencování špatného ukazatele v ovladači by zabilo proces ovladače, ale nemělo by žádný vliv na systém jako celek. Reinkarnační server automaticky restartuje havarovaný ovladač. U některých ovladačů (například diskových a síťových ovladačů) je obnovení pro uživatelské procesy transparentní, zatímco u jiných (například ovladače zvuku a tiskárny) může být uživatel upozorněn. V monolitických systémech dereferencování špatného ukazatele v jádře nebo ovladači naruší systém.
Pokud se ovladač dostane do nekonečné smyčky , plánovač postupně sníží svou prioritu, dokud nepřejde do pohotovostního režimu. Nakonec reinkarnační server uvidí, že ovladač nereaguje na požadavky na stav, takže ovladač zabije a spustí ve smyčce. V monolitickém systému může smyčka ovladače způsobit zablokování systému.
MINIX 3 používá pro interní komunikaci pevnou délku zpráv, což eliminuje určité problémy se správou přetečení a vyrovnávací paměti. Mnoho exploitů také funguje tak, že přeteče vyrovnávací paměť, aby přiměl program k návratu z funkce volajícího a přepsal návratovou adresu ukazující na přeplněnou vyrovnávací paměť pomocí zásobníku. V MINIX 3 tento útok nebude fungovat, protože příkaz a data jsou odděleny mezerou a lze provést pouze kód (kód ke čtení) příkazu.
Ovladače zařízení přistupují k funkcím jádra (jako je kopírování dat z uživatelského adresního prostoru) prostřednictvím volání do jádra. V Minixu 3 má jádro bitmapu, která každému ovladači říká, jaká volání smí provádět. V monolitických systémech může každý ovladač volat libovolnou funkci jádra, ať už je autorizovaná nebo ne.
Jádro také udržuje tabulku, která každému ovladači říká, ke kterým I/O portům má přístup. V důsledku toho může ovladač pracovat pouze se svými vlastními I/O porty. Na monolitických systémech může ovladač přistupovat k I/O portům jiných zařízení.
Ne každý ovladač nebo server potřebuje komunikovat s jinými takovými ovladači nebo servery. Podle toho bitmapový proces určuje, ke kterým směrům může každý proces přistupovat.
Speciální zařízení zvané reinkarnační server se pravidelně dotazuje každého řidiče. Pokud se ovladač zastaví nebo nereaguje na požadavky, reinkarnační server jej automaticky nahradí novou kopií. Detekce a výměna nefunkčních ovladačů probíhá automaticky bez zásahu uživatele. Tato funkce momentálně nefunguje pro ovladače disků, ale v příští verzi bude systém schopen obnovit každý ovladač disku, který je skrytý v paměti RAM . Obnovení ovladače neovlivní pracovní postup.
Dojde-li k přerušení, je převedeno na upozornění odeslané příslušnému ovladači. Pokud řidič čeká na zprávu, pak přerušení obdrží okamžitě, jinak bude upozorněn příště. Toto schéma eliminuje vnořená přerušení a usnadňuje psaní ovladače.
Jak vidíte, spodní úroveň je mikrokernel , který se skládá z asi 4000 řádků kódu (většinou v C a malé množství v assembleru ). Zvládá přerušení , provádí plánování a předávání zpráv. Podporuje také API asi 30 volání jádra, která může provést služba nebo ovladač. Uživatelský program nemůže taková volání uskutečnit. Místo toho mohou provádět systémová volání POSIX , která posílají zprávy službám. Volání jádra provádí funkce, jako je konfigurace přerušení a kopírování dat mezi adresovými prostory.
Na další úrovni jsou ovladače zařízení , z nichž každý běží jako samostatný uživatelský proces. Každý z nich řídí určitá I/O zařízení, jako je disk nebo tiskárna. Ovladač nemá přístup k I/O portům a nemůže vydávat přímé pokyny. Místo toho musí provést systémové volání se seznamem I/O portů a hodnot, na které mají zapisovat. Toto schéma, i když zavádí malou režii (asi 500 nanosekund), umožňuje jádru kontrolovat oprávnění, takže například zvukový ovladač nemůže zapisovat data na disk.
Další úrovní je server. Tam je umístěna téměř veškerá funkčnost OS. Uživatelské procesy pracují se soubory, například odesláním zprávy na souborový server za účelem otevření, zavření, čtení a zápisu souborů. Souborový server zase přijme I/O, aby odeslal zprávu ovladači disku, který disk ve skutečnosti spravuje.
Jedním z klíčových serverů je reinkarnační server. Jeho úkolem je dotazovat všechny servery a ovladače, aby pravidelně kontrolovali jejich stav. Pokud komponenty nereagují správně, upadnou do nekonečné smyčky, reinkarnační server (který je rodičovským procesem pro ovladače a servery) zničí vadnou komponentu a nahradí ji novou kopií. V tomto případě se systém automaticky sám uzdraví bez zásahu spuštěných programů.
V současné době jsou reinkarnační server, souborový server, procesní server a mikrokernel součástí důvěryhodné počítačové základny. Pokud některý z nich „padne“, pak selže celý systém. Snížení výpočetní základny ze 3–5 milionů řádků kódu v systému Linux nebo 20 000 řádků systému Windows však výrazně zlepšuje spolehlivost systému.
MINIX 1, 1.5 a 2 byly vytvořeny jako nástroje pro výuku návrhu OS.
Minix 1.0 byl vytvořen v roce 1987. 12 000 řádků zdrojového kódu jádra bylo napsáno primárně v programovacím jazyce C a v assembleru. V knize byl vytištěn zdrojový kód jádra, systém souborů a systém správy paměti . Tanenbaum původně vytvořil MINIX pro počítače IBM PC a IBM PC/AT dostupné v té době.
MINIX 1.5, vydaný v roce 1991, obsahoval podporu pro IBM PS/2 MicroChannel a byl také portován na architektury Motorola 68000 a SPARC podporující počítačové platformy Atari ST , Commodore Amiga , Apple Macintosh a Sun Microsystems SPARCstation . K dispozici je také verze MINIX, která běží jako uživatelský proces pod SunOS .
MINIX 2, vydaný v roce 1997, byl dostupný pouze pro architektury x86 a SPARC . Minix-vmd byl vytvořen dvěma výzkumníky z Vrije Universiteit s přidanou virtuální pamětí a podporou pro X Window System .
MINIX 3 dělá totéž a poskytuje moderní operační systém s mnoha novými nástroji a unixovými aplikacemi. [15] Profesor Tanenbaum jednou řekl:
Mějte na paměti, že MINIX 3 není MINIX vašeho dědečka... MINIX 1 byl napsán jako tutoriál... MINIX 3 je začátek vysoce spolehlivého, samoléčebného OS bez nadýmání... MINIX 1 a MINIX 3 souvisí stejným způsobem jako Windows 3.1 a Windows XP – stejná část názvu. [12]
MINIX 3.2.0 byl vydán v únoru 2012. Tato verze má mnoho nových funkcí, včetně kompilátoru Clang , experimentální podpory symetrických víceprocesorů, podpory souborů procfs a ext2fs a GDB . Do vydání bylo také zahrnuto několik částí NetBSD , včetně bootloaderu, libc a různých dalších knihoven. [16]
MINIX 3.2.1 byl vydán 21. února 2013.
Operační systémy v reálném čase | |
---|---|
| |
OTEVŘENO | |
Proprietární |
|
historický |
|
|