L4 | |
---|---|
Typ | mikrokernel |
Autor | Jochen Liedtke |
Vývojář | Jochen Liedtke |
Zapsáno v | jazyk symbolických instrukcí |
webová stránka | l4hq.org |
L4 je mikrojádro druhé generace vyvinuté Jochenem Liedtkem v roce 1993 [1] .
Architektura mikrokernelu L4 se osvědčila. Bylo vytvořeno mnoho implementací L4 microkernel ABI a API . Všechny implementace se staly známými jako rodina mikrojádrů L4. Liedtkeho implementace byla neformálně pojmenována „L4/x86“ [2] .
V roce 1977 obhájil Jochen Liedtke svůj diplomový projekt z matematiky na univerzitě v Bielefeldu (Německo). V rámci projektu Liedtke napsal kompilátor pro jazyk ELAN ( angl. ). Jazyk ELAN vznikl v roce 1974 na základě jazyka Algol 68 pro výuku programování [3] . Liedtke nazval své dílo „L1“: písmeno „L“ je prvním písmenem autorova příjmení ( L iedtke ); číslo "1" je pořadové číslo díla.
V roce 1977 Liedtke promoval jako matematik, zůstal na univerzitě v Bielefeldu a pustil se do vytváření běhového prostředí pro jazyk ELAN.
8bitové mikrokontroléry se staly široce dostupnými. Byl vyžadován operační systém, který by mohl běžet na malých pracovních stanicích na středních a vysokých školách. CP/M se nevešlo. Německé národní výzkumné centrum pro informatiku a technologii GMD a Univerzita v Bielefeldu se rozhodly vyvinout nový operační systém od nuly [4] .
V roce 1979 začal Jochen Liedtke vyvíjet nový operační systém a pojmenoval jej „ Eumel “ ( anglicky ) z angličtiny. rozšiřitelný víceuživatelský mikroprocesorový systém EL AN . _ _ Operační systém "Eumel" byl také nazýván "L2", což znamená " L iedtkeho 2. dílo ". Nový operační systém podporoval 8bitové procesory Zilog Z80 , byl víceuživatelský a multitaskingový byl postaven na mikrojádru podporoval ortogonální persistenci Podpora ortogonální persistence byla následující: OS periodicky ukládal svůj stav na disk (obsah paměti , registry procesoru atd.); po výpadcích napájení byl OS obnoven z uloženého stavu; programy pokračovaly v práci, jako by k selhání nedošlo; byly ztraceny pouze změny provedené od posledního uložení. Eumel OS byl inspirován Multics OS a sdílel mnoho podobností s jádry Accent a Mach 4
Operační systém Eumel byl později portován na procesory Zilog Z8000 , Motorola 68000 a Intel 8086 . Tyto procesory byly 8bitové a 16bitové, neobsahovaly MMU a nepodporovaly mechanismus ochrany paměti . Eumel OS emuloval virtuální stroj s 32bitovým adresováním a MMU [4] . I přes použití emulace bylo možné k jedné pracovní stanici se systémem Eumel OS připojit až pět terminálů [4] .
Nejprve bylo možné psát programy pro Eumel OS pouze v jazyce ELAN. Kompilátory pro CDLPascal Basic a DYNAMO byly přidány později ale nebyly široce používány 4
Od roku 1980 se začalo používat Eumel OS, nejprve pro výuku programování a zpracování textu a poté pro komerční účely. Takže v polovině 80. let již Eumel OS běžel na více než 2000 počítačích v advokátních a dalších firmách [4] .
S příchodem procesorů podporujících virtuální paměť (kvůli MMU) a mechanismů pro její ochranu zmizela nutnost emulovat virtuální stroj.
V roce 1984 [5] začal Jochen Liedtke pracovat ve výzkumném centru GMD, aby vytvořil operační systém podobný Eumelovu, ale bez emulace. GMD je v současnosti součástí Fraunhoferovy společnosti .
Od roku 1987 [4] Jochen Liedtke a jeho tým v SET Institute , součást GMD, začali vyvíjet nové mikrokernel nazvané "L3" ("L3" z " L iedtkeho 3. práce ").
Jochen Liedtke chtěl zjistit, zda je možné dosáhnout vysokého výkonu komponenty IPC výběrem správné architektury pro jádro a využitím vlastností hardwarové platformy při implementaci . Implementace mechanismu IPC se ukázala jako úspěšná (ve srovnání s komplexní implementací IPC v mikrokernelu Mach). Později byl implementován mechanismus pro izolaci oblastí paměti pro procesy běžící v uživatelském prostoru .
V roce 1988 byl vývoj dokončen a vydán stejnojmenný operační systém. Mikrojádro L3 bylo napsáno v jazyce symbolických instrukcí , využívalo vlastnosti procesorů architektury Intel x86 , nepodporovalo jiné platformy a výkonem překonalo Mach mikrokernel. L3 OS byl kompatibilní s Eumel OS: programy vytvořené pro Eumel OS běžely pod L3 OS, ale ne naopak [4] .
Komponenty mikrojádra L3:
Od roku 1989 [4] se OS používá:
Při práci na mikrojádru L3 objevil Jochen Liedtke nedostatky v mikrojádru Mach. Ve snaze zlepšit výkon začal Liedtke kódovat nové mikrojádro v jazyce symbolických instrukcí pomocí funkcí architektury procesoru Intel i386 . Nové mikrojádro bylo nazváno „L4“ (z „ L iedtkeho 4. práce “).
V roce 1993 byla dokončena implementace mikrokernelu L4. Složka IPC se ukázala být 20krát rychlejší než IPC z mikrokernelu Mach [1] .
OS postavené na mikrojádrech první generace (zejména na mikrojádru Mach) se vyznačovaly nízkým výkonem. Kvůli tomu začali v polovině 90. let vývojáři přehodnocovat koncept mikrojaderné architektury. Zejména špatný výkon mikrojádra Mach byl vysvětlen přesunem komponenty zodpovědné za IPC do uživatelského prostoru.
Některé součásti Machova mikrojádra byly vráceny zpět - uvnitř mikrojádra . To porušilo samotnou myšlenku mikrokernelu (minimální velikost, izolace komponent), ale umožnilo zvýšit výkon operačního systému.
Výzkumníci hledali důvody špatného výkonu mikrojádra Mach a pečlivě analyzovali komponenty, které jsou důležité pro dobrý výkon. Analýza ukázala, že jádro přidělilo procesům příliš velkou pracovní sadu (hodně paměti), v důsledku čehož při přístupu jádra k paměti neustále docházelo k chybám mezipaměti [ 6 ] . Analýza umožnila formulovat nové pravidlo pro vývojáře mikrojádra - mikrokernel by měl být navržen tak, aby komponenty důležité pro zajištění vysokého výkonu byly umístěny v cache procesoru (nejlépe první úrovně ( English level 1 , L1 ) a je žádoucí že v mezipaměti ještě zbývá nějaké místo ).
Kvůli prudkému nárůstu výkonu komponenty IPC nebyly stávající operační systémy schopny zvládnout zvýšený příliv zpráv IPC. Několik univerzit (např. Technical University Dresden , University of New South Wales ), institucí a organizací (např. IBM ) začalo vytvářet implementace L4 a kolem nich budovat nové operační systémy.
V roce 1996 Liedtke obhájil svou doktorandskou práci [7] na Technické univerzitě v Berlíně na téma „tabulky chráněných stránek“ [8] .
Od roku 1996 ve Výzkumném Watsona a jeho kolegové pokračovali ve výzkumu mikrojádra L4, mikrokernelu obecně a operačního systému Sawmill OS konkrétně [9] . Kvůli nedostatku komerčního úspěchu byl operační systém " IBM Workspace OS ", postavený na třetí verzi mikrojádra Mach od CMU a vyvíjený IBM od ledna 1991 do roku 1996 [10] , namísto konceptu " L4 microkernel" používal koncept "Lava Nucleus" nebo zkráceně "LN".
Postupem času byl kód mikrokernelu L4 uvolněn z vazby na platformu, zlepšily se bezpečnostní a izolační mechanismy.
V roce 1999 začal Liedtke pracovat jako profesor operačních systémů na Karlsruhe Institute of Technology (Německo) [7] .
V roce 1999 byl Jochen Liedtke přijat do Systems Architecture Group (SAG), pracující v Karlsruhe Institute of Technology (Německo), a pokračoval ve výzkumu mikrojaderných operačních systémů. Skupina SAG je známá také jako skupina „L4Ka“.
Ve snaze dokázat, že mikrojádro lze implementovat v jazyce na vysoké úrovni , skupina SAG vyvinula mikrokernel „L4Ka::Lískový ořech“. Práce byly provedeny na Technologickém institutu v Karlsruhe za podpory DFG [11] . Implementace byla napsána v C++ a podporovala procesory architektury IA-32 a ARM . Výkon nového mikrojádra se ukázal jako přijatelný a vývoj jader v assembleru byl ukončen.
V roce 1998 začala skupina operačních systémů Technické univerzity v Drážďanech vyvíjet vlastní implementaci mikrojádra L4 s názvem „L4/Fiasco“. Vývoj probíhal v C++ souběžně s vývojem mikrojádra L4Ka::Lískový ořech.
V té době mikrojádro L4Ka::Hazelnut nepodporovalo souběžnost v kernel-space a mikrokernel "L4Ka::Pistachio" podporovalo pouze přerušení kernel-space ve specifických preempčních bodech. Vývojáři mikrokernelu „L4/Fiasco“ implementovali plný preemptivní multitasking (s výjimkou některých atomových operací). Díky tomu byla architektura jádra složitější, ale snížily se latence přerušení, což je důležité pro operační systém pracující v reálném čase.
Mikrokernel "L4/Fiasco" byl použit v OS "DROPS" [12] - OS "tvrdého" reálného času (kdy je extrémně důležité, aby se na událost reagovalo v přísných časových rámcích), také vyvinutém na Technické univerzitě Drážďany.
Kvůli složitosti architektury mikrojádra v pozdějších verzích OS Fiasco se vývojáři vrátili k tradičnímu přístupu – spouštění jádra s vypnutými přerušeními (s výjimkou pár bodů preempce).
Implementace mikrojádra L4, vytvořené před vydáním mikrojádra L4Ka::Pistachio a pozdějších verzí mikrokernelu „Fiasco“, využívaly vlastnosti počítačové architektury (byly „svázány“ s architekturou procesoru). Bylo vyvinuto API nezávislé na architektuře. Navzdory přidání přenositelnosti poskytovalo API vysoký výkon. Myšlenky, které jsou základem architektury mikrokernelu, se nezměnily.
Počátkem roku 2001 bylo publikováno nové L4 API, velmi odlišné od předchozí verze L4 API s číslem verze 4 ("verze 4", také známé jako "verze X.2") a odlišné:
Po vydání nové verze API začal tým SAG vytvářet nové mikrokernel s názvem „L4Ka::Pistachio“ [13] [14] . Kód byl zkompilován od nuly v C++ s využitím zkušeností z projektu L4Ka::Hazelnut. Pozornost byla věnována vysokému výkonu a přenosnosti.
10. června 2001 zemřel Dr. Jochen Liedtke [7] při autonehodě. Poté se tempo vývoje projektu výrazně snížilo.
V roce 2003 [15] bylo dílo dokončeno díky úsilí Liedtkeho studentů: Volkmara Uhliga, Uwe Dannowského a Espena Skoglunda. Zdrojový kód byl vydán pod licencí 2-klauzule BSD .
Souběžně s tím pokračoval vývoj mikrojádra L4/Fiasco. Byla přidána podpora pro více hardwarových platforem ( x86 , AMD64 , ARM ). Je pozoruhodné, že verze Fiasco s názvem „FiascoUX“ by mohla běžet v uživatelském prostoru s operačním systémem Linux .
Vývojáři mikrojádra L4/Fiasco implementovali několik rozšíření L4v2 API.
Mikrokernel „Fiasko“ navíc poskytoval mechanismy správy komunikačních práv. Stejné mechanismy existovaly pro správu zdrojů spotřebovaných jádrem.
Byl vyvinut "L4Env", sada komponent běžících na mikrokernelu "Fiasco" v uživatelském prostoru. "L4Env" byl použit v "L4Linux", implementaci paravirtualizace (virtualizace ABI) pro linuxová jádra verze 2.6.x.
Vývojáři z University of New South Wales vytvořili mikrojádra L4/MIPS a L4/Alpha, implementace L4 pro 64bitové procesory MIPS a DEC Alpha . Původní mikrokernel L4 podporoval pouze procesory architektury x86 a stal se neformálně známým jako „L4/x86“. Implementace byly napsány od nuly v jazyce C a assembleru a nebyly přenosné. Po vydání mikrojádra L4Ka::Pistachio nezávislého na platformě skupina UNSW přestala vyvíjet svá mikrojádra a začala portovat mikrokernel L4Ka::Pistachio. Implementace mechanismu předávání zpráv se ukázala být rychlejší než jiné implementace (36 cyklů na procesorech architektury Itanium ) [16] .
Skupina UNSW ukázala, že ovladač v uživatelském prostoru lze spustit stejným způsobem jako ovladač v prostoru jádra [17] .
Vyvinula komponenty pro paravirtualizaci linuxových jader. Komponenty běžely na vrcholu mikrojádra L4. Výsledek byl nazván " Wombat OS ". Wombat OS mohl běžet na architekturách x86, ARM a MIPS. Na procesorech Intel XScale prováděl Wombat OS přepínání kontextu 30krát pomaleji než monolitické jádro Linuxu [18] .
Skupina UNSW se poté přestěhovala do NICTA, vytvořila vidlici mikrojádra L4Ka::Pistachio a pojmenovala ji „NICTA::L4-embedded“. Nové mikrokernel bylo napsáno pro komerční vestavěné systémy , vyžadovalo málo paměti a implementovalo zjednodušené L4 API. Se zjednodušeným API byla systémová volání prováděna tak „krátká“, že nevyžadovala body preemptivního multitaskingu a umožňovala implementaci OS v reálném čase [19] .
Qualcomm provozoval implementaci mikrokernelu L4 od NICTA na čipové sadě zvané „Mobilní stanice Modem“ (MSM) Toto bylo hlášeno v listopadu 2005 [20] zástupci NICTA a na konci roku 2006 se začaly prodávat čipové sady MSM. Implementace mikrokernelu L4 tedy skončila v mobilních telefonech .
V srpnu 2006 Heiser Open Kernel Labs V té době Heiser sloužil jako vedoucí programu ERTOS organizovaného NICTA [21] a byl profesorem na UNSW. OK Labs byl vytvořen pro
V dubnu 2008 byla vydána verze 2.1 mikrokernelu „OKL4“, první veřejná implementace L4, která má zabezpečení založené na schopnostech . V říjnu 2008 byla vydána verze 3.0 [22] - nejnovější open source verze "OKL4" . Zdrojový kód pro následující verze byl uzavřen. Vrstva mikrojádra, která pohání hypervizor , byla přepsána tak, aby přidala podporu pro nativní hypervizor nazvaný "OKL4 mikrovizor" [23] .
Společnost OK Labs distribuovala paravirtualizovaný operační systém Linux s názvem OK :Linux [24] . OK : Linux byl potomkem Wombat OS . OK Labs také distribuovala paravirtualizované verze operačních systémů Symbian a Android .
OK Labs získala práva na mikrokernel seL4 od NICTA.
Na začátku roku 2012 bylo prodáno více než 1,5 miliardy zařízení vybavených implementací mikrojádra L4 [25] . Většina těchto zařízení obsahovala čipy, které implementují bezdrátové modemy a byly vydány společností Qualcomm .
Implementace L4 byla také použita v automobilových zábavních systémech [26] .
OS, postavený na bázi implementace L4, byl provozován bezpečným enklávovým procesorem, který je součástí elektronického obvodu Apple A7 umístěného na čipu [27] . Stejná implementace L4 byla použita v projektu Darbat společnosti NICTA [28] . Zařízení obsahující Apple A7 dodávaná s iOS . V roce 2015 existovalo přibližně 310 milionů iOS zařízení [29] .
V roce 2006 začal vývoj třetí generace mikrojádra , nazvaného „seL4“ [30] . Vývoj začal od nuly skupinou programátorů z NICTA. Účel: vytvořit základ pro budování bezpečných a spolehlivých systémů, které dokážou splnit moderní bezpečnostní požadavky, jak je psáno např. v dokumentu „Obecná kritéria pro hodnocení bezpečnosti informačních technologií“. Kód mikrokernelu byl od samého počátku psán tak, aby jej bylo možné ověřit (kontrola správnosti). Ověření bylo provedeno pomocí jazyka Haskell : požadavky na mikrokernel (specifikace) byly napsány v jazyce Haskell; objekty mikrojádra byly reprezentovány jako objekty Haskell; práce se zařízením byla emulována [31] . Aby bylo možné získat informace o dostupnosti objektu provedením formálního uvažování, použil seL4 řízení přístupu založené na zabezpečení založeném na schopnostech.
V roce 2009 byl dokončen důkaz správnosti kódu mikrokernelu seL4 [32] . Existence důkazu zajistila shodu mezi implementací a specifikací, potvrdila nepřítomnost některých chyb v implementaci (například absence uváznutí , livelock , přetečení bufferu , aritmetické výjimky a případy použití neinicializovaných proměnných). Mikrojádro seL4 bylo první mikrojádro navržené pro obecný operační systém a ověřené [32] .
Mikrokernel seL4 implementoval nestandardní správu zdrojů jádra [33] :
Něco podobného bylo implementováno v experimentálním OS Barrelfish . Díky tomuto přístupu ke správě zdrojů jádra bylo možné provádět úvahy o izolaci vlastností a později bylo prokázáno, že mikrokernel seL4 zajišťuje integritu a důvěrnost vlastností [34] . Důkaz byl proveden pro původní kód.
Tým výzkumníků z firmy NICTA prokázal správnost překladu textu z jazyka C do strojového kódu. To umožnilo vyloučit kompilátor ze seznamu důvěryhodného softwaru a považovat důkaz provedený pro zdrojový kód mikrojádra za platný i pro spustitelný soubor mikrojádra.
Mikrojádro seL4 se stalo prvním jádrem s chráněným režimem, u kterého byla v plném rozsahu provedena analýza doby provádění v nejhorším případě a výsledky této analýzy byly publikovány. Výsledky analýzy jsou nezbytné pro použití mikrokernelu v hard real-time OS [34] .
29. července 2014 NICTA a General Dynamics C4 Systemsoznámila vydání mikrojádra seL4 (včetně všech důkazů o jejich správnosti) pod otevřenými licencemi [35] . Zdrojový kód mikrojádra a důkazy byly vydány pod licencí GPL v2. Většina knihoven a nástrojů byla distribuována pod licencí 2-klauzule BSD.
Zajímavým tvrzením výzkumníků [36] je, že náklady na provedení softwarové verifikace jsou nižší než náklady na tradiční softwarový výzkum, a to i přes to, že při ověřování lze získat mnohem spolehlivější informace.
V srpnu 2012 NICTA, Rockwell Collins, Galois Inc , Boeing a University of Minnesota v rámci programu vývoje vysoce spolehlivých vojenských kybernetických systémů [37] organizovaného agenturou DARPA zahájily vývoj bezpilotního vzdušného prostředku [38] . Hlavním požadavkem pro vývoj je zajištění vysoké spolehlivosti zařízení. Každá z uvedených firem měla v programu svou roli. NICTA byla zodpovědná za vývoj operačního systému a postavila jej kolem mikrojádra seL4. Odpovědné úlohy byly implementovány jako komponenty mikrojádra, zatímco nezodpovědné úlohy byly provozovány pod paravirtualizovaným OS Linux. Vývoj programu byl plánován pro použití ve vrtulníku NICTA Unmanned Little Bird, který vyvinula společnost Boeing. Vrtulník musel podporovat jak pilotní řízení, tak bezpilotní režim. V listopadu 2015 byla hlášena úspěšná implementace [39] .
Hurd/L4 . V listopadu 2000 byl vytvořen e-mailový seznam „l4-hurd“, aby diskutoval o myšlence portovat jádro „ GNU Hurd “ na mikrokernel L4. Portování bylo provedeno v letech 2002-2004, výsledek byl nazván "Hurd / L4". Implementace "Hurd/L4" nebyla dokončena. V roce 2005 byl projekt zastaven [40] .
Osker je operační systém , který implementuje L4 a byl napsán v Haskell v roce 2005 . Účel projektu: otestovat možnost implementace OS ve funkcionálním jazyce (a ne studovat mikrokernel) [41] .
Codezero je implementace mikrokernelu L4 pro vestavěné systémy, který se stal veřejně dostupným v létě 2009 [42] . Vytvořeno vývojáři britské společnosti "B Labs" od nuly. Kód byl napsán v C. Implementace podporuje procesory architektury ARM , implementuje hypervizor prvního řádu a podporuje virtualizaci OS Linux a Android [43] [44] . Přes prohlášení o dodání kódu pod licencí GPL v3 není možné stáhnout kód z oficiálních stránek.
F9 je implementace mikrokernelu L4, který se stal veřejně dostupným v červenci 2013 [45] . Napsáno od začátku v C. Navrženo pro vestavěné systémy. Podporuje architekturu ARM řady procesorů Cortex-M . Kód je dodáván pod licencí BSD.
Fiasco.OC je mikrokernel třetí generace založený na mikrojádru „L4/Fiasco“. Implementuje bezpečnostní mechanismus založený na schopnostech, podporuje vícejádrové procesory a hardwarovou virtualizaci [46] .
L4 Runtime Environment (zkráceně L4Re) je framework, který běží nad mikrokernelem „Fiasco.OC“ a je navržen tak, aby vytvářel komponenty uživatelského prostoru. L4Re poskytuje funkce pro vytváření aplikací klient/server, implementaci souborových systémů, implementaci populárních knihoven, jako je standardní knihovna C ("libc"), standardní knihovna C++ ("libstdc++") a knihovna pthreads .
Rámec L4Re a mikrokernel „Fiasco.OC“ podporovaly architektury x86 (IA-32 a AMD64), ARM a PowerPC (WiP).
L4Linux je subsystém pro provoz operačního systému Linux nad mikrokernelem "Fiasco.OC" pomocí paravirtualizace [47] . Dříve se místo dvojice "Fiasco.OC" - L4Re používala dvojice "L4 / Fiasco" - L4Env.
NOVA ( N OVA O S virtualization a rchitecture ) je výzkumný projekt vytvořený za účelem vytvoření bezpečného a efektivního virtualizačního prostředí [48] [49] [50] s malým seznamem důvěryhodného softwaru ( trusted computing base ) . NOVA zahrnuje:
Projekt NOVA podporoval vícejádrové x86 procesory. Aby hostující OS běžel pod kontrolou mikro-hypervizoru (hypervizoru postaveného na mikrojádru) NOVA, musí podporovat Intel VT-x nebo AMD-V . Zdrojový kód byl dodán pod licencí GPL v2.
Xameleon je operační systém založený na mikrojádru L4 [52] . Projekt byl založen v roce 2001 jediným vývojářem Alexejem Mandrykinem (narozen 19. ledna 1973 ). OS byl původně postaven na mikrokernelu „ L4/Fiasco “. Později autor migroval OS na mikrokernel " L4Ka::Pistachio ". Zdrojový kód OS je uzavřen.
WrmOS je open source operační systém pracující v reálném čase (RTOS) založený na mikrojádru L4. WrmOS má vlastní implementaci jádra, standardní knihovny a síťový zásobník. Podporované architektury procesorů jsou SPARC, ARM, x86, x86_64. Jádro WrmOS je založeno na dokumentu L4 Kernel Reference Manual verze X.2 . Nad WrmOS běží paravirtualizované linuxové jádro ( w4linux ).