Отслеживание жизни пользовательского потока в пространстве ядра

Я пытаюсь отследить продолжительность жизни пользовательского потока в модуле ядра. Я хочу определить, когда пользовательский поток больше не выполняется (был вызван exit()). Как мне это сделать? Пока я пишу это, я копаюсь в исходном коде ядра, но мне нужно многое понять!

Я нашел task_struct.vfork_done, и похоже, что я могу зацепиться за него. Я на правильном пути?


person Jörgen Sigvardsson    schedule 13.01.2014    source источник


Ответы (1)


Прежде всего, позвольте мне подтвердить, что под «больше не выполняться» вы подразумеваете, что процесс получил сигнал умереть и скоро истечет. На вашем месте я бы зарегистрировал цепочку уведомлений в простом модуле драйвера misc.

Затем я бы активировал уведомление из кода обработки сигналов ядра, когда рассматриваемый процесс был сигнализирован фатальным сигналом. Я бы специально поработал с функцией get_signal_to_deliver (kernel/signal.c). Недавно я ответил на аналогичный запрос здесь

person HighOnMeat    schedule 15.01.2014
comment
Под прекращением выполнения я подразумеваю поток, который больше не будет выполняться в пользовательском коде (т. е. main нет в его стеке вызовов, равно как и никаких обработчиков сигналов или обратных вызовов atexit). Похоже, ваш ответ охватывает это. Я отмечу его как принятый, потому что он звучит правдоподобно и, по крайней мере, дает мне некоторый исследовательский материал. Спасибо! - person Jörgen Sigvardsson; 15.01.2014
comment
@Jorgen Йорген Я рад, что вы нашли мой ответ полезным Йорген. Могут быть и другие способы сделать это, но я думаю, что это может быть самым простым или самым простым. Ваш запрос весьма интересен. Кстати, для чего это (если можно поинтересоваться)? Дайте мне знать, как вы, наконец, справились с этим? Вы ведете блог где-нибудь? - person HighOnMeat; 16.01.2014
comment
Я работаю над инструментом профилирования для клиента, который запускает код во встроенной системе реального времени. Идея состоит в том, чтобы смоделировать, что происходит, когда кэш L1 становится холодным, и посмотреть, как это повлияет на общее выполнение. Тестируемый код имеет решающее значение, поэтому им действительно нужно знать с точностью до микросекунды, какое влияние оказывает холодный кеш. Существуют сценарии, когда профилируемый/тестируемый поток не может очистить связанные ресурсы ядра (мои вещи), поэтому мне нужен отказоустойчивый. - person Jörgen Sigvardsson; 16.01.2014
comment
На самом деле я не веду блог, потому что я ужасный писатель. :) - person Jörgen Sigvardsson; 16.01.2014