MINIX 3

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 ).

Cíle projektu

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]

Historie

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
  • První vydání MINIX 3 (knižní vydání).
3.1.2a 2006-05-29
  • Nový správce balíčků Packman.
  • Opraven problém s instalací s automatickým rozdělením disku.
3.1.3 2007-04-13
3.1.3a 2007-06-08
  • Oprava chyb.
3.1.4 2009-06-09
3.1.5 2009-11-05
  • Zlepšení výkonu
  • Sdílená paměť
  • funkce nastavovače
  • Systém souborů ISO 9660
  • otevřený zvukový systém
  • Zachyťte přístup k neinicializovaným ukazatelům NULL pro pohodlí uživatele
  • Vylepšené zpracování signálu
  • Lepší podpora pro debuggery (vylepšené ptrace atd.)
  • Automatická detekce síťové karty (pro podporované karty PCI ), vylepšení konfigurace sítě
3.1.6 2010-02-08
3.1.7 2010-06-16
  • Plánování uživatelského prostoru a plánovací server [14]
  • Podpora více síťových karet stejného typu
  • Stáhnout systémové obrazy > 16 MB
  • Pomocí GCC
  • Podpora pro kódování cp1251 a koi8-u
3.1.8 2010-10-04
3.2.0 2012-02-29
  • Portování GNU Debuggeru na MINIX 3 a implementace podpory Core Dump
  • Podpora FUSE s experimentálním NTFS-3G
  • Částečné nahrazení uživatelského prostoru MINIX implementací NetBSD
  • Nahrazení výchozího kompilátoru ACK za Clang ( podporuje se také GCC )
  • Přepněte na knihovny ELF a NetBSD libc
  • Upstreaming Pkgsrc a portování aplikací
  • Server asynchronního virtuálního souborového systému (VFS).
  • Výměna zavaděče MINIX za NetBSD
  • Podpora NCQ v ovladači AHCI
3.2.1 2013-02-21
3.3.0 2014-09-16
  • Podpora architektury ARM. Minix byl úspěšně spuštěn na široce rozšířených jednodeskových počítačích Beagle
  • Experimentální podpora USB pro Beaglebone (rozbočovač a velkokapacitní úložiště)
  • Křížová kompilace pro ARM a x86
  •      Vydání knihy
  •      Staré vydání
  •      Aktuální stabilní vydání
  •      Aktuální vývojová verze

Revize stránek

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 .

Spolehlivost MINIX 3

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.

Zmenšení velikosti jádra

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.

Chyby při ořezu

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.

Omezení přístupu ovladače k ​​paměti

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ěť.

Udržování vadných ukazatelů při životě

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.

Ruční nekonečné smyčky

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.

Omezení poškození při přetečení vyrovnávací paměti

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.

Omezení přístupu k funkcím jádra

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.

Omezení přístupu k I/O portům

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í.

Omezení komunikace s komponentami OS

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.

Obnovení zastavených nebo problematických ovladačů

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.

Vestavěná přerušení a zprávy

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.

Architektura

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.

Rozdíly mezi MINIX 3 a předchozími verzemi

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.

Literatura

Poznámky

  1. (nespecifikovaný název) - 2014.
  2. http://www.minix3.org/330.html
  3. "LWN.net." LWN: MINIX 3 zasáhne síť. 28. října 2005. Eklektix , Inc. 4. července 2006 [1] Archivováno 14. července 2015 ve Wayback Machine .
  4. Woodhull, Al. Začínáme s Minix na Bochs na Mac OS. 20. února 2003. 8. července 2006 [2] Archivováno 7. října 2013 na Wayback Machine .
  5. Senn, Will. OSNews.com. Virtuálně Minix: Návod a úvod do Minixu na XP přes Bochs - OSNews.com. 8. července 2006. OSNews.com. 8. července 2006 [3] Archivováno 10. prosince 2006 na Wayback Machine .
  6. Wagstrom, Patrick. Minix pod návodem k instalaci VMWare. 8. července 2006 Archivovaná kopie (odkaz není k dispozici) . Získáno 1. května 2014. Archivováno z originálu 12. listopadu 2013.   .
  7. Woodhull, Al. Minix na Virtual PC: první pohled. 2. června 2005. 8. července 2006 . Datum přístupu: 10. prosince 2012. Archivováno z originálu 7. října 2013.
  8. Oficiální stránky operačního systému MINIX 3 . Získáno 10. prosince 2012. Archivováno z originálu 21. června 2012.
  9. Alting, Ingmar A. MinixPPC: Port MINIX 3 na platformu PowerPC, 15. září 2006. [4] Archivováno 6. února 2012 na Wayback Machine
  10. Tanenbaum, Andy Úvod do MINIX 3 . OSnové . OSnews (25. září 2006). - "Ze sekce Znovuzrození : "Různé studie ukázaly, že software obecně obsahuje něco jako 6-16 chyb na 1000 řádků kódu a že ovladače zařízení mají 3-7krát více chyb než zbytek operačního systému. V kombinaci s skutečnost, že 70 % typického operačního systému se skládá z ovladačů zařízení, je jasné, že ovladače zařízení jsou velkým zdrojem problémů. Získáno 4. července 2008. Archivováno z originálu 18. ledna 2013.
  11. Tanenbaum, Andrew. Kalendář akcí CSAIL. 25. srpna 2006 [5] Archivováno 4. února 2012 na Wayback Machine .
  12. 1 2 Tanenbaum, Andrew. "Debata Tanenbaum-Torvald, část II:." 12. května 2006. Vrije Universiteit. 15. června 2006 [6] Archivováno 5. srpna 2015 na Wayback Machine .
  13. Tanenbaum, Andrew S. "Spolehlivost." Operační systém MINIX 3. Univerzita Vrije. 22. června 2006 [7] Archivováno 1. července 2006.  (odkaz nedostupný od 14-05-2013 [3461 dní] - historie )
  14. Individuální přiřazení programování Plánování uživatelského režimu v MINIX 3 Archivováno 8. května 2016 na Wayback Machine od Bjorna Patricka Swifta
  15. Woodhull, Albert S.. "MINIX 3: Malý, spolehlivý bezplatný operační systém: "MINIX 3 FAQ. 24. října 2005. Vrije Universiteit. 15. června 2006 [8] Archivováno 30. srpna 2015 na Wayback Machine .
  16. Vydání MINIXu . wiki.minix3.org . Datum přístupu: 29. února 2012. Archivováno z originálu 18. ledna 2013.

Odkazy