Portál AbcLinuxu, 28. dubna 2024 22:16

Jaderné noviny – 29. 8. 2013: Více telefonů na jednom telefonu

16. 9. 2013 | Luboš Doležel
Články - Jaderné noviny – 29. 8. 2013: Více telefonů na jednom telefonu  

Aktuální verze jádra: 3.11-rc7. Citáty týdne: Andy Lutomirski, Christoph Hellwig. Vyloučení flink(). Jmenné prostory zařízení.

Obsah

Aktuální verze jádra: 3.11-rc7

link

Aktuální vývojová verze jádra je 3.11-rc7 vydaná 25. srpna s neobvyklým oznámením: Dělám na (svobodném) operačním systému (jen jako koníček, i když je velký a profesionální) pro klony 486+ AT a snad i všechno ostatní, co na světě existuje. Dělám na tom už od dubna 1991 a ještě to není hotové. Budu vděčný za jakoukoliv zpětnou vazbu ohledně toho, co se lidem na Linuxu 3.11-rc7 nelíbí. Samozřejmě jde o oslavu 22. výročí od původního mailu, kde Linus představoval Linux.

Stabilní aktualizace: za uplynulý týden žádné nevyšly. V době psaní tohoto textu se aktualizace 3.10.10, 3.4.60 a 3.0.94 revidují; jejich vydání lze očekávat 29. srpna nebo později.

Citáty týdne: Andy Lutomirski, Christoph Hellwig

link

Někdy je těžké si uvědomit, že „tento kus kódu je naprostá *pííp*“ ve skutečnosti znamená "řekl bych, že obecný návrh ujde, ale musíš se zamyslet nad tímto kouskem kódu, a pak to snad bude dobré."

Na druhou stranu by na tohle měl člověk po vysoké škole být zvyklý.

-- Andy Lutomirski

Historie ukázala, že ignorování managementu výrobců hardwaru vždy vedlo k lepším ovladačům. Neříkám, že někteří výrobci nemají kompetentní inženýry (mnoho ano, mnoho ne), ale jakmile je do rozhodování okolo ovladačů zapojen management, všechna naděje je ztracena.

-- Christoph Hellwig

link

Před několika týdny jsme psali o začlenění patche přidávajícího systémové volání flink(), které by programu umožnilo přidat odkaz na soubor na základě otevřeného popisovače. Přidání této funkce bylo dlouho blokováno kvůli obavám z bezpečnostních problémů; tentokrát to prošlo díky argumentu, že jádro už tuto funkčnost nabízí přes volání linkat(). Zdálo se, že tuto funkci v Linuxu 3.11 uvidíme.

Ne všichni ale byli spokojení; Brad Spengler upozornil na problém, kdy procesy mohou vytvářet odkazy na popisovače předané z více privilegované domény. Proto Andy Lutomirski, autor původního patche, zaslal úpravu omezující funkčnost na soubory vytvořené s vobou O_TMPFILE. Jediný problém byl v tom, že se patch nikomu moc nelíbil; Linus to dal jednoznačně najevo.

Následovala dlouhá diskuze (plná patchů) o tom, jak problém lépe vyřešit. Jediná věc byla jasná, a to, že není jasné, jaké řešení je to nejlepší. Proto 28. srpna Linus patch revertoval se slovy Je jasné, že diskuze ještě neskončila a patche, co se tu objevují, nejsou pro 3.11 vhodné. Proto bude funkčnost flink() muset počkat minimálně do 3.12.

Jmenné prostory zařízení

link

Lehkotonážní virtualizace za použití kontejnerů je nástroj, který se konečně dostal na Linux, i když jsou tu ještě určité drobnosti, které scházejí. Kontejnery jsou vytvářeny pomocí dvou oddělených jaderných funkcí: řídících skupin (cgroups) a jmenných prostorů. Cgroups se aktuálně předělávají a možná ještě bude nutné přidat další jmenné prostory k těm, co jsou nyní k dispozici. Například není žádný způsob, jak oddělit většinu zařízení do vlastního jmenného prostoru. To je mezera, kterou by Oren Laadan rád zaplnil, takže nedávno rozeslal RFC ke jmenným prostorům zařízení.

Jmenné prostory rozdělují globální systémové prostředky tak, že různé skupiny procesů mají různý náhled na tyto prostředky. Například jmenné prostory mountů rozdělují připojené systémy souborů na různé pohledy s tím důsledkem, že procesy v jednom jmenném prostoru nemohou vidět nebo zacházet se systémy souborů připojenými v jiném. Obdobně jmenné prostory PID dávají každému jmennému prostoru vlastní rozsah čísel procesů (PID). Některá zařízení mají vlastní jmenný prostor nebo podobnou funkčnost: jmenné prostory pro síťová zařízení a pseudo systém soubprů devpts pro pseudoterminály (neboli pty). Ale není žádný způsob, jak rozčlenit všechna zařízení v systému, což mají za úkol právě jmenné prostory zařízení.

Cílem této funkčnosti je mít vícero virtuálních telefonů na jednom fyzickém telefonu. Člověk by například mohl mít dva kompletní androidí systémy na telefonu, jeden pro práci a druhý pro soukromé použití. Každý ze systémů by běžel ve vlastním kontejneru a vzájemně by byly izolované. Izolace by umožnila řídit aplikace a bezpečnost ve „firemní polovině“ telefonu, zatímco uživatel by si mohl udržovat osobní data bokem. Přehled, jak by to vypadalo, můžete vidět na videu. Většinu tohoto rozdělení je možné udělat už dnes, ale něco ještě chybí: virtualizace zařízení (např. framebufferu, dotykové obrazovky nebo tlačítek).

Návrh přidává koncept „aktivního“ jmenného prostoru zařízení, kterým by byl ten, se kterým uživatel právě pracuje. Výhodou je, že uživatel by mohl mezi identitami na telefonu přepínat stejně jednoduše jako mezi aplikacemi. Každá identita by měla přístup ke všem schopnostem telefonu v době, kdy jde o aktivní jmenný prostor, jakmile je ale neaktivní (nebo na pozadí), tak by přístup neměla.

Jmenný prostor se dělá obvyklým způsobem, a to pomocí clone(), setns() nebo unshare(). Jedním překvapením je to, že pro jmenné prostory zařízení nepřibyl nový příznak CLONE_* a příznak CLONE_NEWPID je přetěžován. Tento komentář v kódu vysvětluje důvod:

/*
* Couple device namespace semantics with pid-namespace.
* It's convenient, and we ran out of clone flags anyway.
*/

Ačkoliv spojení jmenných prostorů pro PID a zařízení může fungovat, vypadá to, že by se nějaké řešení pro příznaky clone hodilo. Jakmile je proces umístěn do jmenného prostoru zařízení, jakýkoliv open() zařízení, které podporuje jmenné prostory, povede k omezení tohoto zařízení na daný jmenný prostor.

Na určité úrovni je přidávání jmenných prostorů zařízení jen otázkou virtualizování major/minor čísel zařízení, aby každý jmenný prostor měl vlastní čísla. Čísla major/minor v jmenném prostoru odpovídají ovladači načtenému pro daný jmenný prostor. Ovladače, které mohou být dostupné vícero jmenným prostorům, budou muset být upraveny tak, aby jmenné prostory přímo podporovaly. U některých ovladačů, například těch, co nemají žádný skutečný stav (např. u Androidu subsystém LED nebo subsystém podsvětlení/LCD), by změny byly minimální – vlastně jen takový test. Pokud je jmenný prostor obsahující zařízení aktivní, tak pokračuj, jinak požadované změny ignoruj.

Zařízení jsou ale někdy stavová. Není jen tak možné přepnout v půlce posílání dat framebufferu (nebo proudy smíchat) a očekávat, že obsah obrazovky bude v pořádku. Proto ovladače a subsystémy budou muset podporovat přepínání. Například framebuffer by měl na obrazovce ukazovat jen změny od aktivního jmenného prostoru, ale ukládat si změny od jmenného prostoru na pozadí, aby po přepnutí tyto změny byly zobrazeny.

Laadan a jeho kolegové z Cellroxu vytvořili sadu patchů pro jádro na emulátoru Androidu (goldfish). Je tam také dosti podrobný popis patchů a změn udělaných u stavových i bezstavových zařízení. Vytvořili také demo pro Android, kde se přepíná mezi běžícím telefonem a aplikací, která ukazuje měnící se barvy.

Moc komentářů se na toto téma zatím nevyrojilo. Na jednu stranu dává smysl moci virtualizovat všechna zařízení v systému, na druhou stranu to znamená, že se hodně ovladačů bude muset upravit. Mohou se vyskytnout i určité „směrovací“ problémy – když zazvoní telefon, který jmenný prostor se o to postará? Existující API pro přepínání jmenných prostorů v podobě proof-of-concept bude také ještě potřebovat trochu pozornosti.

I když může jít o užitečnou funkčnost, může to také způsobit velkou vlnu změn v ovladačích. Jak snadno se jmenné prostory zařízení dostanou do hlavní řady jádra, bude dost možná záviset na tom, jaká další využití se pro toto najdou. Hlavní změny pro podporu funkčnosti ale nejsou veliké, takže přepínání identit na telefonu bude možná nakonec přece jen stačit.

Odkazy a zdroje

Kernel coverage at LWN.net: August 28, 2013

Další články z této rubriky

Jaderné noviny – přehled za březen 2024
Jaderné noviny – přehled za únor 2024
Jaderné noviny – přehled za leden 2024
Jaderné noviny – přehled za prosinec 2023
Jaderné noviny – přehled za listopad 2023

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.