Protoze vyvoj dnes jednoznacne smeruje k operacnim systemum s gigakernelem, ktery obsahuje nejen ovladace zarizeni, ale i spravce oken a webovy prohlizec. Samotny uzivatelsky prostor se odehrava pouze ve webovem prohlizeci, odkud uzivatel muze delat vsechno.
Ale vazne. Trochu mi v tom rozhovoru chybi, cim se ten HelenOS nejak odlisuje, tedy krome toho, ze je to mikrokernel. Je to malo technicke.
Jakej je rozdil mezi modulama a mikrokernelem?
Moduly beží v kernelovém režimu CPU a ve společném adresovém prostoru se zbytkem kernelu. V mikrokernelu beží v kernelovém režimu mnohem méně kódu, "moduly" jsou od sebe vzájemně odděleny v samostatných adresových prostorech, komunikují pouze pomocí dobře definovaných rozhraní a běží v uživatelském režimu.
Výhod a nevýhod obou přístupů je mnoho — jako v mnoha jiných případech se ani tady nedá univerzálně rozhodnout, co je obecně lepší a co je obecně horší přístup. Pokud se s tím někdo dosud nesetkal třeba na nějaké přednášce o principech operačních systémů, lze určitě začít třeba články na Wikipedii.
Co si vzpomínám, když jsem se hrabal ve zdrojácích, tak mě překvapilo, že spusta služeb jádra (v monolitickém smyslu) je v HelenOS implementovaných pomocí asychnronního předávání zpráv. Když uživatelský proces chce otevřít soubor, tak pouze požádá mikrojádro o přesměrování požadavku, jádro prakticky okamžitě vrátí komunikační deskriptor a uživatelský proces může dělat cokoliv jiného, dokud ovladač patřičného souborového systému se neozve. Pak si spolu vyjednají parametry „služby" otevření souboru (například otevření jen pro čtení), obě strany mohou kdykoliv relaci přerušit (třeba když neporozumí požadavku) a nakonec z toho vypadne identifákor otevřeného souboru, ze kterého proces opět obdobným způsobem čte. Oproti monolitickému jádru to má výhodu, že uživatelský proces není blokován po dobu vyřizování služby (ať už tím, že selhává čtení z blokového zařízení, nebo protože je prostě chyba v ovladači souborového systému). Je to jako kdyby se do Linuxu integroval D-bus nebo ORBIT a aplikace si povídaly s jednotlivými moduly přímo bez účasti jádra jádra (to by řešilo jen identifikaci a autorizaci komunikujících stran, něco jako dnes funguje NETLINK nebo sysfs). Na druhou stranu to má svoji režii a psát událostní smyčky na každé volání služby je otrava. Mám dojem, že se to chtělo řešit nějakou standardní knihovnou, která by programátorovi aplikace ušetřila prsty.
Na druhou stranu to má svoji režii a psát událostní smyčky na každé volání služby je otrava. Mám dojem, že se to chtělo řešit nějakou standardní knihovnou, která by programátorovi aplikace ušetřila prsty.
Základní smyčku událostí (rozskok podle čísla metody) je stále nutné v HelenOSu psát ručně, i když již delší dobu uvažujeme o tom, jak tenhle boilerplate kód generovat automaticky. Stay tuned .. :)
Na druhou stranu, pro složitější komunikaci (kdy se komunikační protokol mezi klientem a serverem sestává z více atomických zpráv) není nutné vracet se do té top-level smyčky událostí, ale lze psát kód, který díky našemu IPC frameworku vypadá v podstatě standardně sekvenčně, ale přesto funguje asynchronně.