[OSy] ukonceni user vlakna

..:: Urza ::.. urza at rdx2.cz
Fri Jan 20 18:44:34 CET 2012


Dobrý den.


Narazil jsem na problém v ukončování uživatelských vláken, jsem na tom zaseklý už relativně dlouho.

Ukončování vláken v kernelu jsem naimplementoval tímto způsobem: při vzniku vlákna není spuštěna přímo funkce, která má ve vláknu běžet, nýbrž jiná funkce (budu ji nazývat dále envelope_function, protože ji mám tak pojmenovanou), která jednak spustí tu funkci, která má ve vláknu běžet, ale poté, co tato funkce doběhne, se spustí jakýsi úklid vlákna, tedy buď jeho proměna v zombii, odblokování vlákna, která čeká na join (u attached vláken), nebo jeho uvolnění z paměti (v případě detached vláken).

V případě uživatelských vláken jsem ale narazil na problém, že pokud by tato envelope_function byla umístěna v paměti dostupné pouze v kernel mode, pak nebude možné vykonat úklid vlákna, které poběží v user módu, protože nebude mít možnost vykonávat ten kód.
Když ale umístím tuto funkci do paměti, ke které je možné přistupovat i v user módu, může si pak tu funkci kdokoliv jakkoliv upravit. Sice by pro ten "úklid" vlákna mohl existovat syscall, nicméně stále je tu problém, že ten stále musí být volán z nějaké envelope_function, která ale musí být v paměti přístupné v user mode, takže může být hypoteticky nějak přepsána.

Nebo mohu na problém nahlížet tak, že pokud si někdo v user mode zničí své vlastní vlákno, které se pak bude tvářit tak, že stále běží a něco vykonává, je to jeho problém? Nebo je celý tento přístup pomocí envelope_function špatně?


Děkuji za odpověď,
Martin Urza




More information about the NSWI004 mailing list