Почему код / ​​поток ядра, выполняющийся в контексте прерывания, не может спать? - PullRequest
48 голосов
/ 28 июня 2009

Я читаю следующую статью Роберта Лава

http://www.linuxjournal.com/article/6916

что говорит

"... Давайте обсудим тот факт, что рабочие очереди выполняются в контексте процесса. Это отличается от других механизмов нижней половины, которые все работают в контексте прерывания. Код, выполняющийся в контексте прерывания, не может спать или блокировать Так как контекст прерывания не имеет процесса поддержки для повторного планирования. Поэтому, поскольку обработчики прерываний не связаны с процессом, планировщику нечего перевести в спящий режим и, что более важно, планировщик ничего не разбудит. .. "

Я не понимаю. AFAIK, планировщик в ядре O (1), который реализуется через растровое изображение. Так что же мешает Scehduler перевести контекст прерывания в режим сна и запустить следующий запланированный процесс и передать ему управление?

Ответы [ 11 ]

0 голосов
/ 30 июля 2009

Обработчики прерываний высокого уровня маскируют операции всех прерываний с более низким приоритетом, включая прерывания системного таймера. Следовательно, обработчик прерываний должен избегать участия в деятельности, которая может привести к его сну. Если обработчик спит, то система может зависнуть, потому что таймер замаскирован и неспособен планировать спящий поток. Имеет ли это смысл?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...