L4 je mikrojader druhé generace navržený Jochenem Liedtkem (en) . Vzhledem k tomu, že mikrojader na počátku 90. let byla ve srovnání s jejich monolitickými konkurenty extrémně pomalá , rozhodl se Liedtke vyvinout vlastní mikrojader. Rozvíjí tedy mikrojader L3 a poté L4. Četná vylepšení provedená u těchto a jejich nástupců od té doby umožnila podstatně zvýšit rychlost těchto starých jader a poté dosáhnout současných mikrojader.
Obecnou myšlenku L4 tak shrnuje sám Liedtke: „koncept je v mikronukleu tolerován pouze tehdy, pokud by jeho posunutí mimo jádro, tj. Umožnění alternativních implementací, zabránilo implementaci. Implementace funkčnosti vyžadované systém. "
Mikrokernely minimalizují funkčnost, kterou poskytuje jádro: jádro poskytuje sadu obecných mechanismů, zatímco servery v uživatelském režimu implementují služby operačního systému. Operační systémy s monolitickým jádrem a operační systémy s mikrokernelem mají odlišný typ operace, což z nich činí dva různé operační systémy . OS založený na monolitickém jádru kladl větší důraz na vysoký výkon, zatímco mikrokernely kladou větší důraz na bezpečnost a stabilitu. Rané operační systémy založené na mikrojader však byly pomalé, takže jejich účinnost nebyla tak vysoká.
Právě s cílem zlepšit výkon operačních systémů založených na minimalistických jádrech začal Jochen Liedtke vyvíjet jádra L3 a poté L4 . Základní princip těchto jader je jednoduše: „koncept je v jádře povolen pouze tehdy, když jej nelze implementovat v uživatelském prostoru“ . Tento typ jádra tedy poskytuje výhradně základní funkce, jako je komunikace, mapování atd. Rovněž ukládá politiky. Microkernel neprovádí žádnou skutečnou práci (microkernel slouží pouze k ovládání a správě úkolů, které deleguje na procesy v uživatelském prostoru).
Před dvaceti lety Jochen Liedtke se svým jádrem L4 demonstroval, že meziprocesová komunikace mikrojader může být 10 až 20krát rychlejší, než by se v té době očekávalo. L4 byl navržen z dřívější verze s názvem L3 a byl vyvinut Johnem Liedtkem na začátku 80. let na platformách i386. Komerčně byl nasazen na několik tisíc instalací (zejména ve školách). Jako všechna mikrojádra té doby, i L3 trpěla náklady na meziprocesovou komunikaci řádově 100 mikrosekund.
Liedtke zpočátku používal L3 k experimentování s novými nápady. Ten poprvé používal název „L4“, přičemž ABI v2 je v komunitě již od roku 1995 . Následně bude kompletně přepsán v sestavě pro počítače i486 a byl rychle portován pro Pentium.
Tato počáteční práce spustila 20letý vývoj, po němž následovaly četné revize ABI a nové implementace. To začalo s reimplementaci na ABI Drážďanech a UNSW na 64 bitů pro Alpha a MIPS procesorů , druhý s integrovanými pomalejší operací v jazyku C . Tato dvě jádra tak byla schopna dosáhnout meziprocesové komunikace za méně než jednu mikrosekundu, k čemuž přispěla skutečnost, že se jednalo o jádra s otevřeným zdrojovým kódem . Jádro UNSW Alpha bylo prvním víceprocesorovým jádrem L4.
Liedtke, který opustil GMD pro IBM Watson , přinesl své zkušenosti při implementaci BIT, která bude výsledkem známá jako X verze . Společnosti GMD a IBM zavedly velmi omezující politiku duševního vlastnictví vůči dalším výzkumným pracovníkům, což přimělo projekt „ Drážďany “ začít od nuly implementací nové verze s názvem „Fiasco“, odkazující na jejich špatné zkušenosti a snahu lépe se vypořádat s problémy duševního vlastnictví.
„Fiasco“ je první verze jádra L4, která byla kompletně napsána v jazyce vysoké úrovně ( C ++ ) a nejstarší verze základního kódu jader L4 je stále aktivně udržována. Jednalo se o první jádro L4 prodávané významným způsobem (odhad: více než 100 000 prodejů).
Když Liedtke přijel do německého Karlsruhe , on a jeho student Upraveno v nové verzi napsané v jazyce C zvané „ Hazelnut “, což bylo první jádro L4 přenesené do jiných architektur (od Pentia I po ARM ).
Zkušenosti společnosti Karlsruhe s ABI verze X a L4Ka :: Hazelnut vedly k zásadní revizi ABI V4 za účelem zlepšení přenositelnosti jádra. Po Liedtkeově smrti v roce 2001 implementovali jeho studenti nové volné jádro : L4Ka :: Pistachio s L4Ka . Byl napsán v C ++ a přenesen nejprve na x86 a PowerPC , poté na UNSW / NICTA a brzy poté na MIPS , Alpha , 64bitové PowerPC a ARM .
V NICTA (in) okamžitě přeorientovali svou instalaci na použití v prostředcích s omezeným přístupem k vestavěným systémům . Ve výsledku se zrodila nová verze jádra z kopie kódu „Pistachio“, která se jmenovala NICTA :: Pistachio-embedded („L4-embedded“). To bylo masivně prodáváno, když se společnost Qualcomm rozhodla použít jako operační systém ve firmwaru svých bezdrátových modemů. Dceřinou společností NICTA Open Kernel Labs (en) se stala podpora a vývoj jádra, které přejmenovalo na „ OKL4 “. Byla nasazena další verze, PikeOS , klon prodávaný společností SYSGO (v) a certifikovaný pro použití v kritických systémech pro letectví a kosmonautiku a také v letadlech a vlacích.
Hlavní myšlenkou L4 bylo zlepšit rychlost mikrojader, konkrétněji meziprocesní komunikace při zachování konceptů mikrojader, bylo nutné některé koncepty upravit a zavést další. Níže představíme koncepty, které umožnily Liedtke splnit jeho výzvu.
Mikrojader L4 poskytuje jednoduché API, minimální a abstrakci, které podporují tvorbu, realizaci a komunikace mezi procesy (IPC) mezi závity Kromě toho, že izolace a řízení různých úkolů .
Hlavní konstruktéři Liedtke se zaměřili na minimalismus a výkon meziprocesové komunikace s pevnou vírou ve zlepšování slabých stránek L3. Formuloval princip minima mikrojader následovně: „Koncept je v mikrojader přijat, pouze pokud by pohyb mimo jádro zabránil implementaci funkčnosti vyžadované systémem. "
Tento princip byl základem pro návrh jader L4. Podle Kevina Elphinstona a Gernota Heisera však žádný konstruktér mikrojader nemůže tvrdit, že vytvořil čistý mikrojader v přísném souladu se zásadou minimality. Jako důkaz mají všichni v jádře plánovač, který implementuje konkrétní plánovací politiku. V té době věřili, že nikdo nemůže navrhnout mikrokernel, ve kterém je veškerá plánovací politika delegována do uživatelského prostoru, aniž by to znamenalo obrovské náklady.
Na hardwarové úrovni je adresním prostorem mapování, které spojuje každou virtuální stránku s fyzickou stránkou , jinak ji označuje jako „nepřístupnou“. Mapování je realizován TLB a tabulky stránek.
Je to jednotka správy paměti, která poskytuje prostorovou izolaci. Obsahuje všechna data přímo přístupná vláknem . Adresní prostor v L4 lze konstruovat rekurzivně. Nit může mapovat společné části svého adresového prostoru na území jiného závitu a tak sdílet data z těch částí své paměti.
Koncept úkolu je ekvivalentní konceptu adresního prostoru. V L4 je úkol sada vláken, která sdílejí adresní prostor.
Meziprocesové zasílání zpráv je jedním z paradigmat, která mikronukley a další aplikace typu klient-server nejčastěji používají . Pomáhá zlepšit modularitu, flexibilitu, zabezpečení i škálovatelnost .
Při komunikaci mezi vlákny s různými adresovými prostory spočívá klasická metoda v přenosu zpráv mezi vlákny prostřednictvím jádra. IPC vždy zahrnuje určitou dohodu mezi oběma stranami: odesílatel se rozhodne zaslat informace a určí jejich obsah, zatímco příjemce určí, zda je ochoten přijímat informace a zda může volně interpretovat obsah zprávy.
Podle Liedtkeho „je důležitější výkon meziprocesní komunikace“ . Existují dva typy nezávislých distributorů : synchronní a asynchronní nezávislí prodejci. První generace mikrojader používala asynchronní IPC (např. Mach ). Jádro uchovává zprávu ve vyrovnávací paměti, dokud příjemce není připraven zprávu přijmout; výsledkem je dvojitá kopie zprávy a to způsobilo, že Mach ztratil hodně výkonu. Mikrojader druhé generace (například L4) přijaly pro komunikaci mezi vlákny synchronní IPC . V těchto komunikacích čeká první komunikátor, dokud není připraven druhý: zprávu lze poté přímo kopírovat mezi těmito vlákny , čímž se zabrání zbytečné dočasné kopii v jádře. Synchronní IPC tak uspokojí efektivní a nezbytnou implementaci.
Přirozenou abstrakcí přerušení je komunikace mezi procesy . Hardware je považován za sadu vláken, která mají speciální ID a odesílají zprávy obsahující pouze ID odesílatele do softwarových vláken s nimi spojených. Na přijímací závit kontroluje identifikátor odesílatele zprávy a v případě, že zpráva je hardwarové přerušení, pak je okamžitě přerušen. Transformaci přerušení na zprávu provádí jádro, ale jádro se na zpracování přerušení nepodílí. Ve skutečnosti jádro zcela ignoruje sémantiku zpracování přerušení.
Ovladač zařízení je proces, který má přímý přístup k I / O portům mapovaným přímo do jeho adresního prostoru a přijímá zprávy (přerušení) z hardwaru prostřednictvím standardních mechanismů IPC. Ve filozofii mikrojader L4 by nikdy neměli být integrováni do mikrojader. Příchozí přerušení se transformují na zprávy do přidružených vláken . To je základ pro implementaci ovladačů zařízení jako serverů uživatelského prostoru.
Vzhledem k vývoji Liedtke ze L4 několik implementací sledoval včetně Fiasco , L4Ka :: pistáciemi , P4 , L4 pro PowerPC , L4Ka :: lískového oříšku , L4 / MIPS , L4 / Alpha , L4 / x86 , atd
Fiasco bylo vyvinuto týmem Fiasco na Technické univerzitě v Drážďanech v roce 1999 a je původcem systému DROPS ( Dresden Real-Time Operating System Project ). Často říkáme „L4 / Fiasco“, abychom mluvili o Fiasco , což zdůrazňuje jeho vztah s L4 .
Mikrokernel poskytuje mechanismy, které jsou nepostradatelné, ale nevynucuje zásady, které jsou většinou implementovány v uživatelském prostoru . V systému L4 / Fiasco existuje prostředí L4 ( L4Env ), což je programovací prostředí pro aplikace, které budou muset běžet nad jádrem [ Otázné L4 / Fiasco.
Programovací model „L4 / Fiasco“ je založen na architektuře klient-server . Plánovač je preventivní s nízkou prioritou a plánování typu rotace mezi úkoly se stejným vlastníkem.
Pistachio je vyvíjeno týmem System Architecture Group na Karlsruhe Institute of Technology (Německo) ve spolupráci se skupinou DiSy na University of New South Wales (Austrálie). Je distribuován pod licencí BSD .
Byl portován na následujících architekturách: Alpha (21164 a 21264), AMD64 ( Opteron 242 , Simics ), ARM (SA1100, XScale, ARM925T), IA32 (Pentium a kompatibilní), IA-64 (Itanium1, Itanium2, Ski) 64-bitové MIPS ( R4000 , R5000 (en) ), 32-bit PowerPC ( IBM 750 ) a 64-bitový ( POWER3 , POWER4 ). Podporuje víceprocesorové systémy.
Nejnovější verze, X.2, byla vydána v Květen 2009.
SeL4 mikronukleus je členem mikrojader L4 rodiny navržen tak, aby poskytnout silné bezpečnostní mechanismy při zachování vysokého výkonu, který je obvyklý v rodině L4 a považovány za nezbytné ke skutečnému užití. Jedná se o mikrojader třetí generace, který je zcela založen na jádru typu L4 . Stejně jako druhý využívá abstrakce pro virtuální adresní prostory, vlákna , meziprocesovou komunikaci….
Prostory virtuálních adres jsou tvořeny explicitní manipulací s hlavními objekty: cesta stránky, tabulka stránek atd. Nemají definovanou základní strukturu (kromě těch, které jsou vyhrazeny pro samotné jádro seL4).
Tyto nitě jsou aktivními subjekty SEL4 . Přidružením uzlu Otázné a virtuálního adresního prostoru k vláknu vytvoří zásady spravované uživateli abstrakci na vysoké úrovni, jako jsou procesy nebo virtuální stroje .
Tyto komunikace mezi procesy jsou podporovány dvěma způsoby: pomocí synchronních zpráv předáním parametrů (portu, takže cílovou bez použití vyrovnávací paměti v jádře) a asynchronní oznámení přes asynchronní parametrů (objekty schůzek jste se skládají pouze z jednoho slova v jádře ).
Ovladače zařízení se spouštějí jako aplikace v uživatelském režimu, které mají přístup k registrům zařízení a paměti, a to buď mapováním zařízení do virtuálního adresního prostoru procesu, nebo řízením přístupu k zařízení (tj. Zejména u architektur x86) ). " Sel4 " poskytuje mechanismy pro správu příjmu oznámení o přerušení (prostřednictvím asynchronních IPC) a pro potvrzení.
Nuclei SEL4 fungují na procesorech ARM a x86 , ale certifikované verze SEL4, které aktuálně existují, jsou pro ARMv6 (in) a ARMv7 . Portování na x 86 platformách není v současné době oficiálně Podporované, ale tam je ještě experimentální multicore verze z seL4 pro x86.
: dokument použitý jako zdroj pro tento článek.