[OSy] Dotaz k ukončování vláken a konzistenci

PanacekCZ at seznam.cz PanacekCZ at seznam.cz
Thu Jan 30 15:50:57 CET 2014


Dobrý den,

v našem týmu proběhla diskuze ohledně ukončování vláken a procesů a konzistence sdíleného stavu.

Je nám jasné, že libovolné ukončování uživatelských vláken pomocí kill nebo thread_cancel nesmí způsobit nekonzistenci nebo úniky paměti v kernelu.

Je ale nutné zajistit konzistenci např. uživatelské haldy? Pokud uživatelské vlákno mění uživatelskou haldu, je halda samozřejmě chráněna mutexem, ale pokud je vlákno zabito uvnitř kritické sekce, pak halda může zůstat pro zbytek procesu nekonzistentní.
Možné řešení by bylo omezit místa, kde může být uživatelské vlákno zabito (cancellation points), ovšem potom nelze zaručit, že se vlákno povede zrušit (pokud běží ve smyčce bez cancellation points).

Podobný problém je s kernelovými vlákny a funkcí thread_kill. V našem kernelu ji používáme pouze na zabíjení uživatelských vláken, takže takový problém nastat nemůže, ale pokud bychom chtěli zajistit korektní chování thread_kill i na kernelová vlákna (přestože takové užití v kernelu není), museli bychom zacházet se sdílenými daty opatrněji, a např. ochrana sdílených dat mutexem by nikdy nebyla dostatečná.

Chtěli bychom mít jasno v tom, jaká míra robustnosti je nutná, a kde se již dá nechat odpovědnost za konzistenci na tom, kdo kill atd. používá.

Dále bychom se chtěli zeptat, zda je přípustné, právě kvůli hrozbě asynchronního ukončení vlákna, nebo konkurentního zrušení objektu, se kterým má syscall pracovat, po dobu syscallu zamknout mutex nebo zakázat přerušení.

Vlastimil Dort




More information about the NSWI004 mailing list