Jádro (operační systém) - Kernel (operating system)

Jádro spojuje aplikační software s hardwarem počítače

Jádro je počítačový program v jádru počítače je operační systém a má plnou kontrolu nad vším v systému. Je to „část kódu operačního systému, která je vždy uložena v paměti“ a usnadňuje interakce mezi hardwarovými a softwarovými komponentami. Plné jádro ovládá všechny hardwarové prostředky (např. I/O, paměť, kryptografii) prostřednictvím ovladačů zařízení, rozhoduje o konfliktech mezi procesy týkajícími se těchto zdrojů a optimalizuje využití běžných zdrojů, např. Využití CPU a mezipaměti, souborové systémy a síťové zásuvky. Ve většině systémů je jádro jedním z prvních programů načtených při spuštění (po zavaděči ). Zpracovává zbytek spuštění, stejně jako paměť, periferie a požadavky na vstup/výstup (I/O) ze softwaru a převádí je do pokynů pro zpracování dat pro centrální procesorovou jednotku .

Kritický kód jádra je obvykle načten do samostatné oblasti paměti, která je chráněna před přístupem aplikačním softwarem nebo jinými méně důležitými částmi operačního systému. Jádro v tomto chráněném prostoru jádra plní své úkoly, jako je spouštění procesů, správa hardwarových zařízení, jako je pevný disk , a zpracování přerušení . Naproti tomu aplikační programy, jako jsou prohlížeče, textové procesory nebo přehrávače zvuku nebo videa, používají samostatnou oblast paměti, uživatelský prostor . Toto oddělení brání vzájemnému vzájemnému rušení uživatelských dat a dat jádra a způsobuje nestabilitu a pomalost a také brání tomu, aby nefunkční aplikace ovlivňovaly jiné aplikace nebo havarovaly celý operační systém.

Jádro má rozhraní je na nízké úrovni abstrakce vrstva . Když proces požaduje od jádra službu, musí vyvolat systémové volání , obvykle prostřednictvím funkce obálky .

Existují různé návrhy architektury jádra. Monolitická jádra běží zcela v jednom adresním prostoru, přičemž CPU běží v režimu supervizora , hlavně kvůli rychlosti. Mikrojádra provozují většinu, ale ne všechny své služby v uživatelském prostoru, jako to dělají uživatelské procesy, hlavně kvůli odolnosti a modularitě . MINIX 3 je pozoruhodným příkladem mikrojádrového designu. Místo toho je jádro Linuxu monolitické, i když je také modulární, protože může za běhu vkládat a odebírat moduly jádra , které lze načíst .

Tato centrální součást počítačového systému je zodpovědná za spouštění programů. Jádro přebírá zodpovědnost za rozhodování kdykoli, který z mnoha spuštěných programů by měl být přidělen procesoru nebo procesorům.

Paměť s náhodným přístupem

Paměť s náhodným přístupem (RAM) se používá k ukládání jak programových instrukcí, tak dat. Aby se program mohl spustit, obvykle musí být oba přítomny v paměti. Přístup k paměti často vyžaduje více programů, které často vyžadují více paměti, než má počítač k dispozici. Jádro je zodpovědné za rozhodování o tom, kterou paměť může každý proces použít, a za rozhodnutí, co dělat, když není k dispozici dostatek paměti.

Vstupní/výstupní zařízení

Mezi I/O zařízení patří periferie jako klávesnice, myši, diskové jednotky, tiskárny, zařízení USB , síťové adaptéry a zobrazovací zařízení . Jádro přiděluje aplikacím žádosti o provedení I/O na příslušném zařízení a poskytuje pohodlné metody pro použití zařízení (obvykle abstrahované do bodu, kdy aplikace nemusí znát podrobnosti implementace zařízení).

Správa zdrojů

Klíčovými aspekty nezbytnými ve správě prostředků je definování prováděcí domény ( adresního prostoru ) a ochranného mechanismu používaného ke zprostředkování přístupu k prostředkům v rámci domény. Jádra také poskytují metody pro synchronizaci a meziprocesovou komunikaci (IPC). Tyto implementace mohou být v samotném jádře nebo se jádro může také spolehnout na jiné procesy, které běží. Ačkoli jádro musí poskytovat IPC, aby zajistilo přístup k zařízením poskytovaným navzájem, jádra musí také poskytovat běžícím programům způsob, jak podávat žádosti o přístup k těmto zařízením. Jádro je také zodpovědné za přepínání kontextu mezi procesy nebo vlákny.

Správa paměti

Jádro má plný přístup k paměti systému a musí umožňovat procesům bezpečný přístup k této paměti, jak to vyžadují. Prvním krokem je často virtuální adresování , kterého je obvykle dosaženo stránkováním a/nebo segmentací . Virtuální adresování umožňuje jádru vytvořit z dané fyzické adresy jinou adresu, virtuální adresu. Prostory virtuálních adres se mohou u různých procesů lišit; paměť, ke které jeden proces přistupuje na konkrétní (virtuální) adrese, se může lišit od paměti, ke které jiný proces přistupuje na stejné adrese. To umožňuje, aby se každý program choval, jako by byl spuštěn jako jediný (kromě jádra), a tím zabrání vzájemnému zhroucení aplikací.

V mnoha systémech může virtuální adresa programu odkazovat na data, která nejsou aktuálně v paměti. Vrstva indirection poskytovaná virtuálním adresováním umožňuje operačnímu systému využívat jiná úložiště dat, jako je pevný disk , k ukládání toho, co by jinak muselo zůstat v hlavní paměti ( RAM ). Výsledkem je, že operační systémy mohou umožnit programům využívat více paměti, než má systém fyzicky k dispozici. Když program potřebuje data, která aktuálně nejsou v paměti RAM, CPU signalizuje jádru, že se to stalo, a jádro odpoví zapsáním obsahu neaktivního bloku paměti na disk (je -li to nutné) a jeho nahrazením daty požadovanými Program. Program lze poté obnovit od bodu, kde byl zastaven. Toto schéma je obecně známé jako stránkování poptávky .

Virtuální adresování také umožňuje vytváření virtuálních oddílů paměti ve dvou nesouvislých oblastech, z nichž jedna je vyhrazena pro jádro ( prostor jádra ) a druhé pro aplikace ( uživatelský prostor ). Procesor nepovoluje aplikacím adresovat paměť jádra, což brání aplikaci v poškození běžícího jádra. Toto zásadní rozdělení paměťového prostoru přispělo velkou měrou k současným návrhům skutečných jader pro všeobecné použití a je v takových systémech téměř univerzální, ačkoli některá jádra výzkumu (např. Singularita ) používají jiné přístupy.

Správa zařízení

Aby mohly procesy provádět užitečné funkce, potřebují přístup k periferiím připojeným k počítači, které jsou ovládány jádrem prostřednictvím ovladačů zařízení . Ovladač zařízení je počítačový program, který umožňuje interakci operačního systému s hardwarovým zařízením. Poskytuje operačnímu systému informace o tom, jak ovládat a komunikovat s určitým kusem hardwaru. Ovladač je důležitou a životně důležitou součástí programové aplikace. Cílem návrhu řidiče je abstrakce; funkcí ovladače je převést volání abstraktní funkce (programovací volání) nařízená operačním systémem do volání specifických pro zařízení. Zařízení by teoreticky mělo správně fungovat s vhodným ovladačem. Ovladače zařízení se používají například pro grafické karty, zvukové karty, tiskárny, skenery, modemy a karty LAN.

Na hardwarové úrovni patří mezi běžné abstrakce ovladačů zařízení:

  • Přímé propojení
  • Použití rozhraní na vysoké úrovni (Video BIOS )
  • Použití ovladače zařízení nižší úrovně (ovladače souborů pomocí ovladačů disku)
  • Simulace práce s hardwarem, přičemž děláte něco úplně jiného

A na softwarové úrovni zahrnují abstrakce ovladačů zařízení:

  • Umožňuje operačnímu systému přímý přístup k hardwarovým prostředkům
  • Pouze implementace primitivů
  • Implementace rozhraní pro software bez ovladače, jako je TWAIN
  • Implementace jazyka (často jazyka na vysoké úrovni, jako je PostScript )

Například, aby se uživateli něco ukázalo na obrazovce, aplikace by vznesla požadavek na jádro, které by předalo požadavek jeho ovladači zobrazení, který je pak zodpovědný za skutečné vykreslení znaku/pixelu.

Jádro musí udržovat seznam dostupných zařízení. Tento seznam může být znám předem (např. Ve vestavěném systému, kde bude jádro přepsáno, pokud se změní dostupný hardware), konfigurovaný uživatelem (typicky na starších počítačích a v systémech, které nejsou určeny pro osobní použití) nebo detekovaný operační systém za běhu (běžně se tomu říká plug and play ). V systémech plug-and-play nejprve správce zařízení provede skenování na různých periferních sběrnicích , jako je například Peripheral Component Interconnect (PCI) nebo Universal Serial Bus (USB), aby detekoval nainstalovaná zařízení, a poté vyhledal příslušné ovladače.

Jelikož je správa zařízení velmi specifickým tématem operačního systému , jsou tyto ovladače v každém typu návrhu jádra zpracovávány odlišně, ale v každém případě musí jádro poskytnout I/O , aby řidiči mohli fyzicky přistupovat ke svým zařízením přes nějaký port nebo paměť umístění. Při návrhu systému správy zařízení je třeba učinit důležitá rozhodnutí, protože v některých provedeních mohou přístupy zahrnovat kontextové přepínače , což činí operaci velmi náročnou na CPU a snadno způsobuje významnou režii výkonu.

Systémová volání

Při práci na počítači je systémové volání způsob, jakým proces požaduje službu od jádra operačního systému, ke kterému obvykle nemá oprávnění ke spuštění. Systémová volání poskytují rozhraní mezi procesem a operačním systémem. Většina operací interagujících se systémem vyžaduje oprávnění, která nejsou k dispozici procesu na úrovni uživatele, např. I/O prováděné se zařízením přítomným v systému nebo jakákoli forma komunikace s jinými procesy vyžaduje použití systémových volání.

Systémové volání je mechanismus, který používá aplikační program k vyžádání služby z operačního systému. Používají instrukci strojového kódu, která způsobí, že procesor změní režim. Příkladem může být režim dohledu do chráněného režimu. Zde operační systém provádí akce, jako je přístup k hardwarovým zařízením nebo jednotce pro správu paměti . Operační systém obecně poskytuje knihovnu, která leží mezi operačním systémem a běžnými uživatelskými programy. Obvykle se jedná o knihovnu C, jako je Glibc nebo Windows API. Knihovna zpracovává podrobné informace o předávání informací jádru a přechodu do režimu správce. Systémová volání zahrnují zavírání, otevírání, čtení, čekání a zápis.

Aby proces skutečně vykonával užitečnou práci, musí mít přístup k službám poskytovaným jádrem. Toto je implementováno odlišně každým jádrem, ale většina poskytuje knihovnu C nebo API , které zase vyvolává související funkce jádra.

Způsob vyvolání funkce jádra se liší jádro od jádra. Pokud se používá izolace paměti, není možné, aby uživatelský proces zavolal přímo jádro, protože by to bylo porušením pravidel řízení přístupu procesoru. Několik možností je:

  • Pomocí softwarově simulovaného přerušení . Tato metoda je k dispozici na většině hardwaru, a proto je velmi běžná.
  • Pomocí brány volání . Call gate je speciální adresa uložená jádrem v seznamu v paměti jádra na místě známém procesoru. Když procesor detekuje volání na tuto adresu, místo toho přesměruje do cílového umístění, aniž by způsobil narušení přístupu. To vyžaduje hardwarovou podporu, ale hardware je zcela běžný.
  • Pomocí speciální instrukce pro systémové volání . Tato technika vyžaduje speciální hardwarovou podporu, která běžným architekturám (zejména x86 ) může chybět. Do nejnovějších modelů procesorů x86 však byly přidány pokyny k volání systému a některé operační systémy pro počítače je využívají, jsou -li k dispozici.
  • Použití fronty založené na paměti. Aplikace, která generuje velké množství požadavků, ale nemusí čekat na výsledek každého z nich, může přidat podrobnosti o požadavcích do oblasti paměti, kterou jádro pravidelně prohledává, aby našlo požadavky.

Rozhodování o návrhu jádra

Ochrana

Důležitým hlediskem při návrhu jádra je podpora, kterou poskytuje pro ochranu před chybami ( odolnost proti chybám ) a před škodlivým chováním ( zabezpečení ). Tyto dva aspekty obvykle nejsou jasně odlišeny a přijetí tohoto rozlišení v návrhu jádra vede k odmítnutí hierarchické struktury pro ochranu .

Mechanismy nebo zásady poskytované jádrem lze klasifikovat podle několika kritérií, včetně: statických (vynucených v době kompilace ) nebo dynamických (vynucených za běhu ); preventivní nebo post-detekce; podle zásad ochrany, které splňují (např. Denning ); ať už jsou podporovány hardwarem nebo jazykem; zda jsou spíše otevřeným mechanismem nebo závaznou politikou; a mnoho dalších.

Podpora domén hierarchické ochrany se obvykle implementuje pomocí režimů CPU .

Mnoho jader poskytuje implementaci „schopností“, tj. Objektů poskytovaných uživatelskému kódu, které umožňují omezený přístup k základnímu objektu spravovanému jádrem. Běžným příkladem je zpracování souborů: soubor je reprezentací informací uložených na trvalém paměťovém zařízení. Jádro může provádět mnoho různých operací, včetně čtení, zápisu, mazání nebo spouštění, ale aplikace na úrovni uživatele může provádět pouze některé z těchto operací (např. Může mít povoleno pouze čtení souboru). Běžnou implementací je to, že jádro poskytne aplikaci objekt (obvykle takzvaný „popisovač souboru“), na kterém může aplikace poté vyvolat operace, jejichž platnost jádro kontroluje v okamžiku, kdy je operace požadována. Takový systém lze rozšířit tak, aby pokrýval všechny objekty, které jádro spravuje, a skutečně i objekty poskytované jinými uživatelskými aplikacemi.

Efektivní a jednoduchý způsob, jak poskytovat hardwarovou podporu schopností, je delegovat na jednotku správy paměti (MMU) odpovědnost za kontrolu přístupových práv pro každý přístup do paměti, mechanismus nazývaný adresování založené na schopnostech . Většina komerčních počítačových architektur postrádá takovou podporu MMU pro schopnosti.

Alternativním přístupem je simulace schopností pomocí běžně podporovaných hierarchických domén. V tomto přístupu musí být každý chráněný objekt umístěn v adresním prostoru, ke kterému aplikace nemá přístup; jádro také udržuje seznam schopností v takové paměti. Když aplikace potřebuje získat přístup k objektu chráněnému schopností, provede systémové volání a jádro poté zkontroluje, zda jí schopnost aplikace uděluje oprávnění k provedení požadované akce, a pokud je povoleno, provede pro ni přístup (buď přímo, nebo delegováním požadavku na jiný proces na úrovni uživatele). Náklady na výkon přepínání adresního prostoru omezují praktičnost tohoto přístupu v systémech se složitými interakcemi mezi objekty, ale v současných operačních systémech se používá pro objekty, ke kterým se často nepřistupuje nebo u nichž se neočekává rychlý výkon.

Pokud firmware nepodporuje ochranné mechanismy, je možné simulovat ochranu na vyšší úrovni, například simulováním schopností manipulací s tabulkami stránek , ale existují důsledky pro výkon. Nedostatek hardwarové podpory však nemusí být problém u systémů, které se rozhodnou používat jazykovou ochranu.

Důležitým rozhodnutím o návrhu jádra je volba úrovní abstrakce, kde by měly být implementovány bezpečnostní mechanismy a zásady. Mechanismy zabezpečení jádra hrají zásadní roli při podpoře zabezpečení na vyšších úrovních.

Jedním z přístupů je použít podporu firmwaru a jádra pro odolnost proti chybám (viz výše) a navíc vybudovat zásady zabezpečení pro škodlivé chování (přidání funkcí, jako jsou kryptografické mechanismy , je -li to nutné) a delegovat určitou odpovědnost na kompilátor . Přístupy, které delegují vynucení zásad zabezpečení na kompilátor a/nebo úroveň aplikace, se často nazývají jazykové zabezpečení .

Nedostatek mnoha kritických bezpečnostních mechanismů v současných hlavních operačních systémech brání implementaci adekvátních bezpečnostních zásad na úrovni abstrakce aplikací . Ve skutečnosti je běžnou mylnou představou zabezpečení počítače, že v aplikaci lze implementovat jakoukoli bezpečnostní politiku bez ohledu na podporu jádra.

Hardwarová nebo jazyková ochrana

Typické počítačové systémy dnes používají hardwarem vynucená pravidla o tom, jaké programy mají přístup k jakým datům. Procesor monitoruje provádění a zastaví program, který porušuje pravidlo, například uživatelský proces, který se pokusí zapsat do paměti jádra. V systémech, kterým chybí podpora funkcí, jsou procesy od sebe navzájem izolovány pomocí oddělených adresních prostorů. Volání z uživatelských procesů do jádra je regulováno požadavkem, aby používali jednu z výše popsaných metod systémového volání.

Alternativním přístupem je použití jazykové ochrany. V systému ochrany založeném na jazycích jádro povolí spuštění kódu, který byl vytvořen kompilátorem důvěryhodného jazyka . Jazyk pak může být navržen tak, že pro programátora není možné dát pokyn, aby udělal něco, co by porušilo bezpečnostní požadavek.

Mezi výhody tohoto přístupu patří:

  • Není třeba samostatné adresní prostory. Přepínání mezi adresními prostory je pomalá operace, která způsobuje velkou režii, a v současné době se provádí mnoho optimalizačních prací, aby se zabránilo zbytečným přepínáním v současných operačních systémech. Přepínání je v systému ochrany založeném na jazycích zcela zbytečné, protože veškerý kód může bezpečně fungovat ve stejném adresním prostoru.
  • Flexibilita. Pomocí této metody lze implementovat jakékoli schéma ochrany, které lze navrhnout tak, aby bylo vyjádřeno prostřednictvím programovacího jazyka. Změny schématu ochrany (např. Z hierarchického systému na systém založený na schopnostech) nevyžadují nový hardware.

Mezi nevýhody patří:

  • Delší doba spuštění aplikace. Aplikace je nutné při spuštění ověřit, aby bylo zajištěno, že byly kompilovány správným kompilátorem, nebo může být nutné překompilovat buď ze zdrojového kódu, nebo z bytecode .
  • Nepružné systémy . V tradičních systémech aplikace často provádějí operace, které nejsou bezpečné pro typ . V jazykovém ochranném systému nelze takové operace povolit, což znamená, že může být nutné přepsat aplikace a v některých případech může dojít ke ztrátě výkonu.

Příklady systémů s ochranou jazyka na bázi zahrnují JX a Microsoft ‚s Singularity .

Procesní spolupráce

Edsger Dijkstra dokázal, že z logického hlediska jsou operace atomového zámku a odemykání fungující na binárních semaforech dostatečnými primitivy k vyjádření jakékoli funkcionality procesní spolupráce. Tento přístup je však obecně považován za chybějící z hlediska bezpečnosti a účinnosti, zatímco přístup předávání zpráv je flexibilnější. K dispozici je také řada dalších přístupů (buď nižší nebo vyšší úrovně), přičemž mnoho moderních jader poskytuje podporu pro systémy, jako je sdílená paměť a vzdálená volání procedur .

Správa I/O zařízení

Myšlenku jádra, kde jsou I/O zařízení ovládána jednotně s jinými procesy, jako paralelní spolupracující procesy, poprvé navrhl a implementoval Brinch Hansen (ačkoli podobné myšlenky byly navrženy v roce 1967). V Hansenově popisu toho „běžné“ procesy nazýváme interní procesy , zatímco I/O zařízení nazýváme externí procesy .

Podobně jako ve fyzické paměti může umožnění přímého přístupu aplikací k portům a registrům řadiče způsobit selhání ovladače nebo selhání systému. Díky tomu se v závislosti na složitosti zařízení mohou některá zařízení překvapivě složitě programovat a používat několik různých řadičů. Z tohoto důvodu je důležité poskytnout abstraktnější rozhraní pro správu zařízení. Toto rozhraní se obvykle provádí pomocí ovladače zařízení nebo vrstvy abstrakce hardwaru. Aplikace často vyžadují přístup k těmto zařízením. Jádro musí udržovat seznam těchto zařízení tak, že se na ně nějakým způsobem zeptá systému. To lze provést prostřednictvím systému BIOS nebo pomocí jedné z různých systémových sběrnic (například PCI/PCIE nebo USB). Když aplikace požaduje operaci na zařízení (například zobrazení znaku), jádro musí odeslat tento požadavek aktuálnímu aktivnímu ovladači videa. Ovladač videa zase musí tuto žádost provést. Toto je příklad meziprocesové komunikace (IPC).

Přístupy návrhu v celém jádru

Výše uvedené úkoly a funkce mohou být přirozeně poskytovány mnoha způsoby, které se navzájem liší designem a implementací.

Princip oddělení mechanismu a politiky je podstatným rozdílem mezi filozofií mikro a monolitických jader. Zde je mechanismem podpora, která umožňuje implementaci mnoha různých zásad, zatímco politika je konkrétní „režim provozu“. Příklad:

  • Mechanismus: Pokusy o přihlášení uživatele jsou směrovány na autorizační server
  • Zásady: Autorizační server vyžaduje heslo, které je ověřeno proti uloženým heslům v databázi

Protože mechanismus a zásada jsou oddělené, lze zásady snadno změnit, aby například vyžadovaly použití tokenu zabezpečení .

V minimálním mikrojádru jsou zahrnuty pouze některé velmi základní zásady a jejich mechanismy umožňují tomu, co běží nad jádrem (zbývající část operačního systému a další aplikace), rozhodnout, jaké zásady přijmout (jako správa paměti, proces na vysoké úrovni) plánování, správa systému souborů atd.). Monolitické jádro má místo toho tendenci zahrnovat mnoho zásad, a proto omezuje zbytek systému, aby se na ně spoléhal.

Per Brinch Hansen předložil argumenty ve prospěch oddělení mechanismu a politiky. Neschopnost řádně splnit toto oddělení je jednou z hlavních příčin nedostatku zásadních inovací ve stávajících operačních systémech, což je problém běžný v počítačové architektuře. Monolitický design je indukován architektonickým přístupem k ochraně „režim jádra“/„uživatelský režim“ (odborně nazývané domény hierarchické ochrany ), který je běžný v konvenčních komerčních systémech; ve skutečnosti je tedy každý modul, který potřebuje ochranu, přednostně zahrnut do jádra. Toto propojení mezi monolitickým designem a „privilegovaným režimem“ lze znovu přenést na klíčový problém oddělení mechanismu a politiky; ve skutečnosti architektonický přístup „privilegovaného režimu“ spojuje ochranný mechanismus s bezpečnostními politikami, zatímco hlavní alternativní architektonický přístup, adresování založené na schopnostech , mezi nimi jasně rozlišuje, což přirozeně vede k návrhu mikrokernelu (viz Oddělení ochrany a zabezpečení ).

Zatímco monolitická jádra spouštějí veškerý svůj kód ve stejném adresním prostoru ( jádrový prostor ), mikrojádra se snaží spouštět většinu svých služeb v uživatelském prostoru s cílem zlepšit udržovatelnost a modularitu kódové základny. Většina jader nezapadá přesně do jedné z těchto kategorií, ale nachází se spíše mezi těmito dvěma návrhy. Říká se jim hybridní jádra . K dispozici jsou exotičtější designy, jako jsou nanokernely a exokernely , ale pro produkční systémy se používají jen zřídka. Xen hypervisoru, například, je exokernel.

Monolitická jádra

Schéma monolitického jádra

V monolitickém jádře běží všechny služby OS společně s hlavním vláknem jádra, takže také sídlí ve stejné oblasti paměti. Tento přístup poskytuje bohatý a výkonný přístup k hardwaru. Někteří vývojáři, například vývojář UNIXu Ken Thompson , tvrdí, že je „snazší implementovat monolitické jádro“ než mikrojádra. Hlavní nevýhodou monolitických jader je závislost mezi systémovými komponentami - chyba v ovladači zařízení může způsobit selhání celého systému - a skutečnost, že údržba velkých jader může být velmi obtížná.

Monolitická jádra, která byla tradičně používána operačními systémy podobnými Unixu, obsahují všechny základní funkce operačního systému a ovladače zařízení. Toto je tradiční design systémů UNIX. Monolitické jádro je jediný program, který obsahuje veškerý kód nezbytný k provedení každé úlohy související s jádrem. Každá část, ke které má přístup většina programů, které nelze vložit do knihovny, je v prostoru jádra: ovladače zařízení, plánovač, zpracování paměti, souborové systémy a síťové zásobníky. Aplikacím je poskytováno mnoho systémových volání, která jim umožňují přístup ke všem těmto službám. Monolitické jádro, i když bylo zpočátku nabité subsystémy, které nemusí být potřeba, lze naladit do bodu, kdy je stejně rychlé nebo rychlejší než jádro, které bylo speciálně navrženo pro hardware, přestože je v obecném smyslu relevantnější. Moderní monolitická jádra, jako jsou Linux (jedno z jader operačního systému GNU ) a jádro FreeBSD , obě spadající do kategorie operačních systémů podobných Unixu, mají schopnost načítat moduly za běhu, což umožňuje snadné rozšíření možností jádra podle potřeby a zároveň pomáhá minimalizovat množství kódu spuštěného v prostoru jádra. V monolitickém jádru závisí některé výhody na těchto bodech:

  • Protože je zapojeno méně softwaru, je rychlejší.
  • Jelikož se jedná o jeden kus softwaru, měl by být menší ve zdrojové i kompilované podobě.
  • Méně kódu obecně znamená méně chyb, které mohou znamenat menší problémy se zabezpečením.

Většina práce v monolitickém jádře se provádí prostřednictvím systémových volání. Jedná se o rozhraní, obvykle uložená v tabulkové struktuře, která přistupují k určitému subsystému v jádře, jako jsou diskové operace. V zásadě se volání provádí v rámci programů a prostřednictvím systémového volání se předává zkontrolovaná kopie požadavku. Proto není vůbec daleko k cestování. Monolitické linuxové jádro může být extrémně malé nejen díky své schopnosti dynamicky načítat moduly, ale také kvůli snadnému přizpůsobení. Ve skutečnosti existuje několik verzí, které jsou dostatečně malé na to, aby se vešly společně s velkým počtem nástrojů a dalších programů na jednu disketu a stále poskytovaly plně funkční operační systém (jednou z nejpopulárnějších je muLinux ). Tato schopnost miniaturizace jádra také vedla k rychlému růstu používání Linuxu ve vestavěných systémech .

Tyto typy jader se skládají ze základních funkcí operačního systému a ovladačů zařízení se schopností načítat moduly za běhu. Poskytují bohaté a výkonné abstrakce základního hardwaru. Poskytují malou sadu jednoduchých hardwarových abstrakcí a k poskytování dalších funkcí používají aplikace zvané servery. Tento konkrétní přístup definuje virtuální rozhraní na vysoké úrovni hardwaru se sadou systémových volání k implementaci služeb operačního systému, jako je správa procesů, souběžnost a správa paměti v několika modulech, které běží v režimu správce. Tento design má několik nedostatků a omezení:

  • Kódování v jádře může být náročné, částečně proto, že nelze používat běžné knihovny (jako plně vybavený libc ), a protože je třeba použít ladicí program na úrovni zdroje jako gdb . Často je nutné restartovat počítač. To není jen problém pohodlí pro vývojáře. Když je ladění těžší a jak sílí potíže, je pravděpodobnější, že kód bude „buggier“.
  • Chyby v jedné části jádra mají silné vedlejší efekty; protože každá funkce v jádře má všechna oprávnění, chyba v jedné funkci může poškodit datovou strukturu jiné, zcela nesouvisející části jádra nebo jakéhokoli spuštěného programu.
  • Jádra se často stávají velmi velkými a obtížně se udržují.
  • I když jsou moduly obsluhující tyto operace oddělené od celku, integrace kódu je těsná a obtížně proveditelná správně.
  • Protože moduly běží ve stejném adresním prostoru , chyba může svrhnout celý systém.
  • Monolitická jádra nejsou přenosná; proto musí být přepsány pro každou novou architekturu, na které má být operační systém používán.
V mikrokernelovém přístupu poskytuje jádro pouze základní funkce, které umožňují spouštění serverů , samostatné programy, které předpokládají dřívější funkce jádra, jako jsou ovladače zařízení, servery GUI atd.

Příkladem monolitických jader je jádro AIX, jádro HP-UX a jádro Solaris.

Mikrojádra

Mikrokernel (také zkráceně μK nebo uK) je termín popisující přístup k návrhu operačního systému, pomocí kterého se funkčnost systému přesouvá z tradičního „jádra“ do sady „serverů“, které komunikují prostřednictvím „minimálního“ jádra , ponechat co nejméně v „systémovém prostoru“ a co nejvíce v „uživatelském prostoru“. Mikrojádro, které je navrženo pro konkrétní platformu nebo zařízení, bude mít vždy jen to, co potřebuje k provozu. Mikrokernelový přístup spočívá v definování jednoduché abstrakce nad hardwarem se sadou primitiv nebo systémových volání k implementaci minimálních služeb OS, jako je správa paměti , multitasking a meziprocesová komunikace . Ostatní služby, včetně služeb běžně poskytovaných jádrem, jako je síť , jsou implementovány v programech v uživatelském prostoru, označovaných jako servery . Mikrojádra se snadněji udržují než monolitická jádra, ale velký počet systémových volání a kontextových přepínačů může zpomalit systém, protože obvykle generují více režijních nákladů než volání obyčejných funkcí.

Pouze části, které opravdu vyžadují, aby byly ve privilegovaném režimu, jsou v prostoru jádra: IPC (Inter-Process Communication), základní plánovač nebo plánovací primitiva, základní zpracování paměti, základní I/O primitiva. V uživatelském prostoru nyní běží mnoho důležitých částí: kompletní plánovač, zpracování paměti, souborové systémy a síťové zásobníky. Mikrojádra byla vynalezena jako reakce na tradiční „monolitický“ design jádra, přičemž všechny funkce systému byly vloženy do jednoho statického programu běžícího ve speciálním „systémovém“ režimu procesoru. V mikrojádru se provádějí pouze ty nejzákladnější úkoly, jako je například přístup k některému (ne nutně ke všemu) hardwaru, správa paměti a koordinace předávání zpráv mezi procesy. Některé systémy, které používají mikro jádra, jsou QNX a HURD. V případě QNX a Hurd mohou být relacemi uživatele celé snímky samotného systému nebo pohledy, jak je uvedeno. Samotná podstata architektury mikrojádra ilustruje některé z jejích výhod:

  • Jednodušší údržba
  • Opravy lze testovat v samostatné instanci a poté je vyměnit, aby převzaly produkční instanci.
  • Rychlý vývojový čas a nový software lze testovat, aniž byste museli jádro restartovat.
  • Větší vytrvalost obecně, pokud se jedna instance pokazí, je často možné ji nahradit operačním zrcadlem.

Většina mikrojader používá systém pro předávání zpráv ke zpracování požadavků z jednoho serveru na druhý. Systém pro předávání zpráv obecně funguje na portovém základě s mikrojádrem. Pokud je například odeslán požadavek na více paměti, otevře se port s mikrojádrem a požadavek se odešle prostřednictvím. Jakmile se dostanete do mikrokernelu, jsou kroky podobné systémovým voláním. Důvodem bylo, že by to přineslo modularitu v systémové architektuře, což by znamenalo čistší systém, snadnější ladění nebo dynamické úpravy, přizpůsobitelné potřebám uživatelů a lepší výkon. Jsou součástí operačních systémů jako GNU Hurd , MINIX , MkLinux , QNX a Redox OS . Přestože jsou mikrojádra sama o sobě velmi malá, v kombinaci se všemi požadovanými pomocnými kódy jsou ve skutečnosti často větší než monolitická jádra. Zastánci monolitických jader také poukazují na to, že dvoustupňová struktura mikrojádrových systémů, ve kterých většina operačního systému neinteraguje přímo s hardwarem, vytváří z hlediska účinnosti systému nezanedbatelné náklady. Tyto typy jader běžně poskytují pouze minimální služby, jako je definování prostorů adres paměti, meziprocesová komunikace (IPC) a správa procesů. Ostatní funkce, jako je spouštění hardwarových procesů, nejsou zpracovávány přímo mikrojádry. Zastánci mikrojáder poukazují na to, že tato monolitická jádra mají tu nevýhodu, že chyba v jádře může způsobit zhroucení celého systému. Pokud však u jádra dojde k selhání jádra, je stále možné zabránit havárii systému jako celku pouhým restartováním služby, která chybu způsobila.

Ostatní služby poskytované jádrem, jako je síť, jsou implementovány v programech v uživatelském prostoru označovaných jako servery . Servery umožňují úpravu operačního systému pouhým spuštěním a zastavením programů. Například pro počítač bez podpory sítě není spuštěn síťový server. Úkolem přesunu dovnitř a ven z jádra k přesunu dat mezi různými aplikacemi a servery vzniká režie, která je na úkor účinnosti mikro jader ve srovnání s monolitickými jádry.

Nevýhody v mikrojádru však existují. Někteří jsou:

  • Větší stopa běžící paměti
  • Je zapotřebí více softwaru pro propojení, existuje možnost ztráty výkonu.
  • Opravy chyb v zasílání zpráv mohou být obtížnější kvůli delší cestě, kterou musí absolvovat, oproti jednorázové kopii v monolitickém jádře.
  • Řízení procesů obecně může být velmi komplikované.

Nevýhody mikrojáder jsou extrémně kontextové. Například fungují dobře pro malé jednoúčelové (a kritické) systémy, protože pokud není potřeba spustit mnoho procesů, komplikace procesního řízení jsou účinně zmírněny.

Mikrojádro umožňuje implementaci zbývající části operačního systému jako běžného aplikačního programu napsaného ve vysokém jazyce a použití různých operačních systémů nad stejným nezměněným jádrem. Je také možné dynamicky přepínat mezi operačními systémy a mít aktivní více než jeden současně.

Monolitická jádra vs. mikrojádra

Jak roste počítačové jádro, roste i velikost a zranitelnost jeho důvěryhodné výpočetní základny ; a kromě snížení zabezpečení existuje problém se zvětšením paměťové stopy . To je do určité míry zmírněno zdokonalením systému virtuální paměti , ale ne všechny počítačové architektury mají podporu virtuální paměti. Aby se zmenšila stopa jádra, je třeba provést rozsáhlé úpravy, které pečlivě odstraní nepotřebný kód, což může být velmi obtížné při zjevných vzájemných závislostech mezi částmi jádra s miliony řádků kódu.

Na počátku devadesátých let byla kvůli všem nedostatkům monolitických jader proti mikrokadernům monolitická jádra považována prakticky za zastaralá prakticky všemi výzkumníky operačních systémů. Výsledkem bylo, že návrh Linuxu jako monolitického jádra spíše než mikrojádra byl tématem slavné debaty mezi Linusem Torvaldsem a Andrewem Tanenbaumem . Argument předložený v debatě Tanenbaum – Torvalds má své opodstatnění .

Výkon

Monolitická jádra jsou navržena tak, aby měla veškerý svůj kód ve stejném adresním prostoru ( prostoru jádra ), což někteří vývojáři tvrdí, že je nezbytné pro zvýšení výkonu systému. Někteří vývojáři také tvrdí, že monolitické systémy jsou extrémně účinné, pokud jsou dobře napsané. Monolitický model má tendenci být efektivnější díky použití sdílené paměti jádra, spíše než pomalejší systém IPC mikrokernelových návrhů, který je obvykle založen na předávání zpráv .

Výkon mikrojádra byl v 80. a na počátku 90. let špatný. Studie, které empiricky měřily výkonnost těchto mikrojáder, však neanalyzovaly důvody takové neúčinnosti. Vysvětlení těchto dat byla ponechána na „folklóru“ s předpokladem, že jsou způsobeny zvýšenou frekvencí přepínání z „režimu jádra“ do „uživatelského režimu“, zvýšenou frekvencí meziprocesové komunikace a zvýšená frekvence kontextových přepínačů .

Ve skutečnosti, jak se odhadovalo v roce 1995, důvody pro špatnou výkonnost mikrojáder mohly být také: (1) skutečná neefektivita celého přístupu k mikrokernelům , (2) konkrétní koncepty implementované v těchto mikrojádrech a (3) konkrétní implementaci těchto konceptů. Zbývalo tedy prozkoumat, zda řešením pro vybudování účinného mikrojádra bylo, na rozdíl od předchozích pokusů, použití správných stavebních technik.

Na druhé straně architektura hierarchických ochranných domén, která vede k návrhu monolitického jádra, má významnou nevýhodu ve výkonu pokaždé, když dojde k interakci mezi různými úrovněmi ochrany (tj. Když proces musí manipulovat s datovou strukturou jak v "uživatelském režim “a„ režim správce “), protože to vyžaduje kopírování zpráv podle hodnoty .

Hybridní jádro přístup kombinuje rychlost a jednodušší konstrukce monolitického jádra s modularity a provádění bezpečnosti microkernel

Hybridní (nebo modulární) jádra

Hybridní jádra se používají ve většině komerčních operačních systémů, jako jsou Microsoft Windows NT 3.1, NT 3.5, NT 3.51, NT 4.0, 2000, XP, Vista, 7, 8, 8.1 a 10. Vlastní macOS společnosti Apple Inc používá hybridní jádro s názvem xnu , který je založen na kódu z OSF / 1 's Mach kernel (OSFMK 7,3) a FreeBSD je monolitické jádro . Jsou podobné mikro jádrům, kromě toho, že obsahují nějaký další kód v prostoru jádra pro zvýšení výkonu. Tato jádra představují kompromis, který někteří vývojáři implementovali, aby vyhověli hlavním výhodám monolitických i mikro jader. Tyto typy jader jsou rozšířením mikro jader s některými vlastnostmi monolitických jader. Na rozdíl od monolitických jader nejsou tyto typy jader schopny načítat moduly za běhu samy. Hybridní jádra jsou mikrojádra, která mají v jádrovém prostoru nějaký „nepodstatný“ kód, aby kód běžel rychleji, než kdyby byl v uživatelském prostoru. Hybridní jádra jsou kompromisem mezi monolitickým a mikrojádrovým designem. To znamená spouštění některých služeb (jako je síťový zásobník nebo souborový systém ) v prostoru jádra, aby se snížila režie výkonu tradičního mikrojádra, ale stále běží kód jádra (například ovladače zařízení) jako servery v uživatelském prostoru.

Mnoho tradičně monolitických jader nyní alespoň přidává (nebo jinak používá) možnosti modulu. Nejznámějším z těchto jader je jádro Linuxu. Modulární jádro v zásadě může mít jeho části, které jsou zabudovány do binárního jádra jádra nebo binárních souborů, které se načítají do paměti na vyžádání. Je důležité si uvědomit, že modul poskvrněný kódem má potenciál destabilizovat běžící jádro. Mnoho lidí je v tomto bodě při diskusi o mikro jádrech zmatených. Do zcela odděleného paměťového prostoru je možné napsat ovladač pro mikrojádro a vyzkoušet jej před „spuštěním“ naživo. Když je načten modul jádra, přistupuje k paměťovému prostoru monolitické části tím, že do něj přidá to, co potřebuje, a otevře tak dveře možnému znečištění. Modulární (nebo) hybridní jádro má několik výhod:

  • Rychlejší vývoj pro ovladače, které mohou pracovat z modulů. Pro testování není vyžadován restart (za předpokladu, že jádro není destabilizováno).
  • Schopnost na vyžádání versus trávení času překompilováním celého jádra pro věci, jako jsou nové ovladače nebo subsystémy.
  • Rychlejší integrace technologie třetích stran (související s vývojem, ale přesto související sama se sebou).

Moduly obecně komunikují s jádrem pomocí nějakého rozhraní modulu. Rozhraní je zobecněné (i když specifické pro daný operační systém), takže není vždy možné používat moduly. Ovladače zařízení často vyžadují větší flexibilitu, než jaké poskytuje rozhraní modulu. V zásadě se jedná o dvě systémová volání a často bezpečnostní kontroly, které musí být v monolitickém jádře provedeny pouze jednou, lze nyní provést dvakrát. Mezi nevýhody modulárního přístupu patří:

  • S více rozhraními, která projdou, existuje možnost zvýšených chyb (což znamená více bezpečnostních děr).
  • Údržba modulů může být pro některé správce matoucí při řešení problémů, jako jsou rozdíly symbolů.

Nanočástice

Nanokernel deleguje prakticky všechny služby - včetně těch nejzákladnějších, jako jsou řadiče přerušení nebo časovač  - na ovladače zařízení, aby byl požadavek na paměť jádra ještě menší než u tradičního mikrojádra.

Exokernely

Exokernels jsou stále experimentálním přístupem k návrhu operačního systému. Liší se od ostatních typů jader omezením jejich funkcí na ochranu a multiplexování surového hardwaru, přičemž neposkytují žádné hardwarové abstrakce, nad nimiž by bylo možné vyvíjet aplikace. Toto oddělení hardwarové ochrany od správy hardwaru umožňuje vývojářům aplikací určit, jak co nejefektivněji využít dostupný hardware pro každý konkrétní program.

Exokernely samy o sobě jsou extrémně malé. Jsou však doprovázeny operačními systémy knihoven (viz také unikernel ), které vývojářům aplikací poskytují funkce konvenčního operačního systému. To přijde na to, že každý uživatel píše své vlastní zbytek jádra téměř od nuly, což je velmi riskantní, složité a docela skličující zadání-zejména v časově omezeném produkčně orientovaném prostředí, proto exokernely nikdy chytil se. Hlavní výhodou systémů založených na exokernelech je, že mohou zahrnovat více operačních systémů pro knihovny, z nichž každý exportuje jiné API , například jeden pro vývoj na vysoké úrovni uživatelského rozhraní a jeden pro řízení v reálném čase .

Historie vývoje jádra

Raná jádra operačního systému

Přesně řečeno, ke spuštění počítače není vyžadován operační systém (a tedy ani jádro) . Programy lze přímo načítat a spouštět na stroji „holý kov“ za předpokladu, že autoři těchto programů jsou ochotni pracovat bez jakékoli abstrakce hardwaru nebo podpory operačního systému. Většina raných počítačů fungovala tímto způsobem v průběhu padesátých a na počátku šedesátých let, které byly resetovány a znovu načteny mezi spuštěním různých programů. Nakonec byly malé pomocné programy, jako jsou zavaděče programů a debuggery, ponechány v paměti mezi běhy nebo načteny z ROM . Jak byly vyvinuty, vytvořily základ toho, co se stalo raným jádrem operačního systému. Přístup „holého kovu“ se na některých herních konzolách a vestavěných systémech používá dodnes , ale obecně platí, že novější počítače používají moderní operační systémy a jádra.

V roce 1969 představil multiprogramovací systém RC 4000 filozofii návrhu systému malého jádra, „na kterém by bylo možné uspořádaně stavět operační systémy pro různé účely“, což by se nazývalo mikrokernelový přístup.

Operační systémy pro sdílení času

V desetiletí před Unixem rostly počítače obrovsky u moci - až do bodu, kdy počítačoví operátoři hledali nové způsoby, jak přimět lidi, aby na svých strojích využívali svůj volný čas. Jedním z hlavních vývojů v této éře bylo sdílení času , kdy řada uživatelů získala malé části počítačového času rychlostí, při které se zdálo, že je každý připojen ke svému vlastnímu, pomalejšímu počítači.

Rozvoj systémů sdílení času vedl k řadě problémů. Jedním z nich bylo, že uživatelé, zejména na univerzitách, kde se systémy vyvíjely, vypadali, že chtějí hacknout systém, aby získali více času na CPU . Z tohoto důvodu se zabezpečení a řízení přístupu staly hlavním cílem projektu Multics v roce 1965. Dalším pokračujícím problémem bylo správné zacházení s výpočetními prostředky: uživatelé trávili většinu času zíráním na terminál a přemýšlením, co zadat, místo toho, aby zdroje skutečně použili počítače a systém sdílení času by měl během těchto období poskytnout CPU čas aktivnímu uživateli. Nakonec systémy obvykle nabízely paměťovou hierarchii o několik vrstev hlouběji a rozdělení tohoto nákladného zdroje vedlo k významnému vývoji ve virtuálních paměťových systémech.

Amiga

Commodore Amiga byl propuštěn v roce 1985, a byl mezi první - a určitě nejúspěšnější - domácích počítačů jsou vybaveny pokročilou jádra architektury. Výkonná komponenta jádra AmigaOS, exec.library , používá návrh pro předávání zpráv v mikrokernel, ale existují i ​​další komponenty jádra, jako graphics.library , které mají přímý přístup k hardwaru. Neexistuje žádná ochrana paměti a jádro téměř vždy běží v uživatelském režimu. V režimu jádra se provádějí pouze speciální akce a aplikace v uživatelském režimu mohou požádat operační systém o spuštění kódu v režimu jádra.

Unix

Schéma rodinného vztahu předchůdce / nástupce pro Unix-jako systémy

Během fáze návrhu Unixu se programátoři rozhodli modelovat každé zařízení vyšší úrovně jako soubor , protože věřili, že účelem výpočtu je transformace dat .

Například tiskárny byly reprezentovány jako „soubor“ na známém místě - když byla data zkopírována do souboru, vytiskla se. Jiné systémy, které poskytují podobnou funkcionalitu, měly tendenci virtualizovat zařízení na nižší úrovni - to znamená, že zařízení i soubory by byly instancemi nějakého konceptu nižší úrovně . Virtualizace systému na úrovni souborů umožňovala uživatelům manipulovat s celým systémem pomocí jejich stávajících nástrojů a konceptů pro správu souborů , což dramaticky zjednodušilo provoz. Unix jako rozšíření stejného paradigmatu umožňuje programátorům manipulovat se soubory pomocí řady malých programů pomocí konceptu potrubí , což uživatelům umožňovalo provádět operace po etapách a vkládat soubor do řetězce jednoúčelových nástrojů. Ačkoli konečný výsledek byl stejný, použití menších programů tímto způsobem dramaticky zvýšilo flexibilitu a také snadnost vývoje a použití, což uživateli umožnilo upravit svůj pracovní postup přidáním nebo odebráním programu z řetězce.

V modelu Unix se operační systém skládá ze dvou částí: za prvé, obrovská sbírka obslužných programů, které řídí většinu operací; za druhé, jádro, které spouští programy. V Unixu je z hlediska programování rozdíl mezi nimi poměrně tenký; jádro je program běžící v režimu supervizora, který funguje jako zavaděč programů a supervizor pro malé obslužné programy tvořící zbytek systému a poskytuje pro tyto programy uzamykací a I/O služby; kromě toho jádro v uživatelském prostoru vůbec nezasahovalo .

V průběhu let se výpočetní model změnil a Unixovo zpracování všeho jako souboru nebo bajtového proudu již nebylo tak univerzálně použitelné jako dříve. Přestože terminál lze považovat za soubor nebo bajtový proud, který se tiskne nebo se z něj čte, nezdá se, že by to platilo pro grafické uživatelské rozhraní . Sítě představují další problém. I když lze síťovou komunikaci srovnávat s přístupem k souborům, nízkoúrovňová architektura orientovaná na pakety se zabývala diskrétními bloky dat a nikoli celými soubory. Jak rostla schopnost počítačů, Unix byl stále více přeplněn kódem. Je to také proto, že modularita jádra Unixu je široce škálovatelná. Zatímco jádra mohla mít v sedmdesátých a osmdesátých letech 100 000 řádků kódu , jádra jako Linux , novodobí nástupci Unixu jako GNU , měli více než 13 milionů řádků.

Moderní unixové deriváty jsou obecně založeny na monolitických jádrech načítajících moduly. Příkladem toho jsou jádro Linuxu v mnoha distribucí z GNU , IBM AIX , stejně jako rozdělení Berkeley Software varianta jádrech, jako je FreeBSD , DragonFly BSD , OpenBSD , NetBSD a MacOS . Kromě těchto alternativ udržují amatérští vývojáři aktivní komunitu pro vývoj operačních systémů , naplněnou vlastními jádry hobby, která většinou sdílejí mnoho funkcí s jádry Linux, FreeBSD, DragonflyBSD, OpenBSD nebo NetBSD a/nebo jsou s nimi kompatibilní.

Operační Systém Mac

Společnost Apple poprvé uvedla svůj klasický Mac OS v roce 1984 společně s osobním počítačem Macintosh . Apple přešel na nanokernel design v Mac OS 8.6. Proti tomu moderní macOS (původně pojmenovaný Mac OS X) vychází z Darwinu , který využívá hybridní jádro s názvem XNU , které vzniklo spojením jádra 4.3BSD a jádra Mach .

Microsoft Windows

Microsoft Windows byl poprvé vydán v roce 1985 jako doplněk k systému MS-DOS . Kvůli své závislosti na jiném operačním systému byly počáteční verze systému Windows před Windows 95 považovány za operační prostředí (nezaměňovat s operačním systémem ). Tato produktová řada se nadále vyvíjela v 80. a 90. letech 20. století, přičemž řada Windows 9x přidala 32bitové adresování a preventivní multitasking; ale skončil vydáním Windows Me v roce 2000.

Microsoft také vyvinul Windows NT , operační systém s velmi podobným rozhraním, ale určený pro špičkové a podnikové uživatele. Tato řada začala vydáním Windows NT 3.1 v roce 1993 a byla představena obecným uživatelům vydáním Windows XP v říjnu 2001 - nahrazení Windows 9x zcela odlišným, mnohem propracovanějším operačním systémem. Toto je řada, která pokračuje v systému Windows 11 .

Architektura Windows NT jádra je považován za hybrid kernel, protože jádro samo o sobě obsahuje úkoly, jako je Window Manager a IPC správcům, s klient / server vrstvené subsystému modelu. Byl navržen jako upravený mikrojádro , protože jádro Windows NT bylo ovlivněno mikrojádrem Mach, ale nesplňuje všechna kritéria čistého mikrojádra.

IBM Supervisor

Dozorový program nebo supervizor je počítačový program , obvykle součást operačního systému , který řídí provádění jiných rutin a reguluje plánování práce , operace vstupu/výstupu , chybové akce a podobné funkce a reguluje tok práce v systému zpracování dat .

Historicky byl tento termín v zásadě spojen s řadou mainframových operačních systémů IBM počínaje OS/360 . V jiných operačních systémech se supervizor obecně nazývá jádro.

V sedmdesátých letech IBM dále abstrahovala stav supervizora z hardwaru, což vedlo k hypervisoru, který umožňoval plnou virtualizaci , tj. Schopnost provozovat více operačních systémů na stejném počítači zcela nezávisle na sobě. Proto se první takový systém nazýval Virtual Machine nebo VM .

Vývoj mikrojáder

Ačkoli Mach , vyvinutý Richardem Rashidem na univerzitě Carnegie Mellon , je nejznámějším mikrojádrem pro všeobecné účely, byla vyvinuta jiná mikrojádra s konkrétnějšími cíli. Microkernel rodina L4 (hlavně L3 a L4 jádro) byl vytvořen s cílem prokázat, že microkernels nejsou nutně pomalé. Novější implementace jako Fiasco a Pistachio jsou schopné provozovat Linux vedle jiných procesů L4 v oddělených adresních prostorech.

Navíc, QNX je microkernel, který se většinou používá ve vestavěných systémech , a open-source software MINIX , zatímco původně vytvořen pro vzdělávací účely, se nyní zaměřil na bytí vysoce spolehlivé a samo se zacelující microkernel OS.

Viz také

Poznámky

Reference

Další čtení

externí odkazy