[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