Portál AbcLinuxu, 4. května 2025 17:39

Jaderné noviny - 4. 4. 2007

26. 4. 2007 | Robert Krátký
Články - Jaderné noviny - 4. 4. 2007  

Aktuální verze jádra: 2.6.21-rc5. Citát týdne: Andrew Morton. Shrnutí změn v 2.6.21 API. Bezpečnější sysfs.

Obsah

Aktuální verze jádra: 2.6.21-rc5

link

Aktuální předverze řady 2.6 je (ke 4. 4. 2007) 2.6.21-rc5, vydaná 25. března. Obsahuje dost oprav, včetně sady patchů týkajících se regresí způsobených změnami časovače. Linus to komentoval: Ty změny časovače byly nakonec daleko nepříjemnější, než bychom si bývali přáli. Velký dík patří Thomasu Gleixnerovi, který se zasloužil o to, že se seznam regresí neustále zmenšuje. Vizte dlouhý changelog, kde najdete všechny podrobnosti.

Aktuální verze -mm stromu je 2.6.21-rc5-mm3, vydaná 30 března (vizte níže).

Aktuální stabilní jádro je 2.6.20.4, vydané 23. března.

Starší jádra: 2.6.16.46 bylo vydáno 31. března s několika opravami, z nichž některé se týkaly USB..

2.4.34.2 bylo vydáno 24. března; obsahuje jen dvě opravy. Na druhou stranu 2.4.35-pre2 obsahuje oprav poměrně dost.

Citát týdne: Andrew Morton

link

Mám za to, že klíčem k porozumění jadernému kódu je porozumění datovým strukturám a vztahům mezi nimi. Jakmile chápete tohle, kód už je jednoduchý. Proto je z hlediska správy výhodné věnovat čas dokumentaci struktur, jejich polí, vztahu s dalšími strukturami a všem požadavkům na zamykání.

<přemýšlí, k čemu je kruci "ticks">

-- Andrew Morton

Shrnutí změn v 2.6.21 API

link

Jádro 2.6.21 se blíží, takže je vhodná chvíle k rekapitulaci změn v interním API, které byly během tohoto vývojového cyklu provedeny.

Bezpečnější sysfs

link

Příběh sysfs (a ovladačového modelu obecně) je dlouhý a komplikovaný. Vytvoření jediné datové struktury, která by představovala hardwarovou a softwarovou konfiguraci systému, bylo potřeba už dávno; mnoho věcí (například správa napájení) bez toho nelze dělat. Sysfs přidává možnost prezentace této struktury v uživatelském prostředí. V mnoha ohledech je to velmi užitečná struktura, ale přinesla i svůj díl problémů. Zpřístupnění jaderných datových struktur uživatelskému prostředí znamená, že je pak obtížné je měnit, aniž by se poškodilo uživatelské API; také to každou z nich vystavuje problémům s životními cykly, které mají svůj původ v uživatelském prostředí.

Interně je základním stavebním kamenem modelu zařízení kobject. Objekty reprezentované v sysfs - například zařízení - obsahují kobject, který je - mimo jiné - hlavním bodem pro sysfs přístup. Kobject také obsahuje počet referencí na nadřazený objekt, který se používá pro správu životního cyklu. Daný kobject a jeho nadřazená datová struktura mohou být vymazány, klesne-li počet referencí na nulu - ne dříve. Tohle počítání referencí sice funguje, ale může to vést k překvapivým následkům.

Jako příklad vezměme USB zařízení - třeba myš. Když je toto zařízení připojeno k systému, vytvoří se odpovídající datová struktura (obsahující kobject), která je pak zaregistrována v jádře. Při odpojení myši je tato struktura uvolněna. Ale představte si, co se stane, pokud uživatelský proces otevře sysfs soubor přiřazený k zařízení myši, zatímco je připojená, a ponechá tento soubor otevřený ještě dlouho po fyzickém odstranění zařízení. Jádro musí být schopné zpracovávat operace s otevřeným sysfs souborem, i když si ovladač myslí, že zařízení, které reprezentuje, už je dávno pryč. Počítání referencí v kobjectu zařídí, že to funguje - většinou. Pravděpodobnost zmatků je však vysoká, zvláště u ovladačů, při jejichž psaní nebyl tento způsob správy životního cyklu brán v potaz.

Koncem března poslal Tejun Heo email, ve kterém rozebíral otázky životního cyklu v ovladačovém modelu - mluví se tam o tomto a dalších problémech. Argumentuje tím, že nutnost správy objektů s různými životními cykly ztěžuje programování s tímto modelem zařízení - to už vývojáři vědí dost dlouho. I správci modelu zařízení přiznávají, že je snadné v tom udělat chybu.

Později pak Tejun představil sadu patchů, která se snaží situaci zjednodušit. Ty patche provádějí velký úklid a jednu malou změnu API - hlavní změna je však následující: umožňují čisté oddělení životního cyklu sysfs objektů a datových struktur, které reprezentují. Díky tomu už se kód mimo sysfs nemusí starat o to, že datové struktury mohou žít kratší dobu než sysfs objekty, které tyto struktury reprezentují.

Sysfs adresář (který reprezentuje kobject) je v rámci jádra reprezentován prostřednictvím struct sysfs_dirent. V současných jádrech je to tak, že pokud existuje struktura sysfs_dirent, očekává se, že exituje i její kobject. Není možné, aby kobject zmizel, dokud struktura sysfs_dirent existuje; to znamená, že struktura obsahující kobject musí existovat, dokud jsou na sysfs soubory nějaké reference. Tejunův patch tento požadavek odstraňuje.

V upraveném sysfs obsahuje každá sysfs_dirent nový čítač nazvaný s_active. Ten sleduje počet aktivních referencí na objekt; jde o reference, které se v daný moment týkají příslušného kobject. Uživatelský proces, který drží otevřený sysfs soubor, hodnotu s_active nezvýší, dokud se souborem neprovede nějakou operaci - a reference zůstane pouze do dokončení operace. A protože je většina sysfs operací docela rychlá, nebudou aktivní reference drženy moc dlouho.

Aktivní počet je udržován pomocí rwsem - reader/writer semaphore [semafor čtení/zapisování]. Aktivní reference jsou sledovány jako readery, takže jich může být libovolné množství. Kód pro získání aktivní reference volá down_read_trylock(), což znamená, že vezme "zámek" (referenci), pokud je k dispozici, ale nezablokuje se, pokud operace selže. Všechny relevantní sysfs operace byly změněny, aby získávaly aktivní reference předtím, než vytvoří referenci na kobject - a ujistily se, že byla reference přidělena. Pokud pokus o získání aktivní reference selže, sysfs ukončí nadřazenou operaci s kódem -ENODEV.

Jediné možné selhání down_read_trylock() nastane, pokud nějaké jiné vlákno drží writer zámek na semafor - nebo právě čeká, až vypadnou readery, aby ten zámek mohlo získat. Pokud se stane něco, kvůli čemu zmizí kobject, tak úklidový kód zavolá down_write() na s_active rwsem v položce sysfs_dirent, čímž zapne writer zámek. Veškeré budoucí pokusy o získání aktivní reference tím pádem selžou; zároveň bude nastaven blok až do uvolnění všech aktuálních aktivních referencí.

Výsledkem toho všeho je, že jakmile se pro daný kobject dokončí poslední volání kobject_put(), nebudou už ze strany sysfs žádné další pokusy o přístup k tomuto kobject. Kobject (a jeho nadřazená datová struktura) tak může být bezpečně vymazán a ovladač se o něj nemusí starat.

Bonusový důsledek je to, že už není nutné zvyšovat počet referencí na modul při přístupu k sysfs atributům. Odstraňovaný ovladač všechna svá zařízení uvolní, takže sysfs už tak jako tak nebude provádět žádná volání modulu ovladače; počet referencí na modul je proto zbytečný. Tejunův patch také ze struktur atributů odstraňuje pole owner - změna, která se projeví v dost velkém množství ovladačů.

Komentáře se zaměřovaly na způsob implementace, nikoliv na výsledný cíl; změny mohly být začleněny už v 2.6.22. Vypadá to, že Tejun má v rukávu ještě více vylepšení, ale i bez jakýchkoliv dalších změn je díky těmto patchům práce se sysfs snazší a bezpečnější.

Související články

Jaderné noviny - 28. 3. 2007
Jaderné noviny - 21. 3. 2007
Jaderné noviny - 14. 3. 2007
Jaderné noviny - 7. 3. 2007
Sysfs - brána do jadra

Odkazy a zdroje

Kernel coverage at LWN.net: April 4, 2007
LWN: Toward a safer sysfs

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

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

Diskuse k tomuto článku

26.4.2007 01:00 J.
Rozbalit Rozbalit vše Re: Jaderné noviny - 4. 4. 2007
Odpovědět | Sbalit | Link | Blokovat | Admin
Pokud má někdo zájem:

The latest stable version of the Linux kernel is: 2.6.20.8 (z 25.4.2007 21:21 UTC)

(Pozn.: Ano, vím, že v článku je to uváděno schválně k tomu datu a já tady píšu čerstvou verzi k aktuálnímu datu)
26.4.2007 01:44 David Jaša | skóre: 44 | blog: Dejvův blog
Rozbalit Rozbalit vše Re: Jaderné noviny - 4. 4. 2007
A já zopakuji otázku, kterou už někdo kladl minule: jaký to má účel, když se celý článek váže k verzím uváděným na začátku? Podle mě to je jenom zbytečný balast v diskusi ve stylu "první". :-P
26.4.2007 09:53 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Jaderné noviny - 4. 4. 2007
A já zopakuji odpověď: žádný. :-)
Marek Bernát avatar 26.4.2007 17:29 Marek Bernát | skóre: 17 | blog: Arcadia
Rozbalit Rozbalit vše Re: Jaderné noviny - 4. 4. 2007
Najhorší nie je ten primarný balast, ale tých ďalších 20 komentárov reagujúcich naňho. Taký je život :-)
physics.stackexchange.com -- Q&A stránky o fyzike v štýle StackOverflow.
26.4.2007 03:03 D-Evil | skóre: 25 | Praha
Rozbalit Rozbalit vše Re: Jaderné noviny - 4. 4. 2007
Nechcete se aspoň zaregistrovat, aby šel ten váš nesmysl blokovat?
26.4.2007 07:13 Leoš Literák | skóre: 74 | blog: LL | Praha
Rozbalit Rozbalit vše Re: Jaderné noviny - 4. 4. 2007
Pokud ma nekdo zajem byt informovan o aktualnich verzich jadra, nebude cist vase komentare, ale zapne si specialni RSS feed v rozcestniku.
Zakladatel tohoto portálu. Twitter, LinkedIn, blog, StackOverflow
m$ lipo $m avatar 26.4.2007 11:41 m$ lipo $m | skóre: 19 | blog: čaj o páté | Redmond
Rozbalit Rozbalit vše Re: Jaderné noviny - 4. 4. 2007
pokud ma nekdo zajem tak si to zjisti sam je to fakt ponekud mimo
Albuquerque, New Mexico (April 4, 1975)
26.4.2007 18:50 trekker.dk | skóre: 72
Rozbalit Rozbalit vše Re: Jaderné noviny - 4. 4. 2007
Kdepak... The latest stable version of the Linux kernel is: 2.6.21

Na to jsem čekal... jdu konfigurovat a kompilovat
Quando omni flunkus moritati
26.4.2007 08:23 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Jaderné noviny - 4. 4. 2007 a 28. 3. 2007
Odpovědět | Sbalit | Link | Blokovat | Admin
Teda jestli první odstavec těchto a minulých JN překládali Robert a Luboš opravdu nezávisle na sobě, pak klobou dolů, jak dodržují jednotný styl :-)

(Tato poznámka nemá být nijak rýpavá. Vyjadřuje pouze radost ze zjištění, že nejsem ještě úplný blázen, když jsem u prvního odstavce měl silný pocit, že už jsem to někde četl.) Jinak tedy díky oběma za zajímavé a pravidelné čtení.
26.4.2007 08:47 Robert Krátký | skóre: 94 | blog: Robertův bloček
Rozbalit Rozbalit vše Re: Jaderné noviny - 4. 4. 2007 a 28. 3. 2007
Robert a Luboš opravdu nezávisle na sobě
Ale ne... :-) To jen já jsem takový ňouma, že jsem zadal špatného autora.
nejsem ještě úplný blázen, když jsem u prvního odstavce měl silný pocit, že už jsem to někde četl.
Původně jsem to začal překládat znovu, ale pak mi také došlo, že už jsem to někde viděl, takže jsem tam dal verzi z minulého týdne. Uvažoval jsem o tom, jestli není pitomost to opakovat, ale pak jsem si řekl, že pokud to bude někdo číst s odstupem času, bude lepší, když tam najde to, co bylo v době vzniku originálu aktuální.
Prcek avatar 26.4.2007 13:55 Prcek | skóre: 43 | Jindřichův Hradec / Brno
Rozbalit Rozbalit vše Re: Jaderné noviny - 4. 4. 2007
Odpovědět | Sbalit | Link | Blokovat | Admin
Jedna chybicka se vloudila:
velmi usnadňují psaní vladačů
Člověk je takový, jak vypadá... A já vypadám jako pravá, nefalšovaná děvka!!!

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