Переключение контекста в обработчиках прерываний - PullRequest
7 голосов
/ 19 января 2011

Почему не происходит переключение контекста, когда выполняется обработчик прерываний?В частности, в ядре Linux обработчики прерываний выполняются в контексте процесса, который был прерван.Почему невозможно сделать переключение контекста в обработчике прерываний для планирования другого процесса?

Ответы [ 2 ]

7 голосов
/ 19 января 2011

В многопроцессорном режиме переключение контекста может произойти во время выполнения обработчика прерываний.На самом деле, это было бы трудно предотвратить.

На машине с одним ЦП по определению может быть запущен только один поток управления за раз.Он имеет только один набор регистров, один ALU и т. Д. Поэтому, если работает обработчик прерываний, просто нет ресурсов для выполнения переключения контекста.

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

5 голосов
/ 19 января 2011

Я полагаю, несколько причин, в зависимости от значения вашего вопроса:

  1. Q: Почему переключение контекста во время прерывания будет плохим?

    A: Прерывания обычно предназначены для взаимодействия с оборудованием. Аппаратное обеспечение, как правило, чувствительно ко времени, поэтому ОС не может просто перестать работать с ним в середине чего-либо и вернуться, когда захочет.

  2. Q: Что мешает переключению контекста во время прерывания?

    A: Прерывание происходит в специальном контексте прерывания, а не в обычном контексте процесса. Поскольку он не находится в процессе, он не подлежит переключению контекста, как обычный процесс.

Возможно, есть лучшее, более глубокое объяснение, но это степень моего собственного понимания вопроса.

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