Как Linux обрабатывает вызов schedule () из IRQ? - PullRequest
2 голосов
/ 05 ноября 2011

Как ядро ​​справляется с вызовом функции schedule () из IRQ?Скажем, task1 вызывает расписание из IRQ0 (таймер), а task2 возобновляет с INT 80h (я забыл имя системного вызова, который вызывает переключение задач).Сигнал IRQ «ACK» никогда не будет отправлен, а IRQ перестанет отправляться.

Я имею в виду только ПК с архитектурой x86.Я исследую систему планировщика / процесса Linux для своего собственного небольшого ядра, которое я (пытаюсь) написать, и я не могу понять, чего мне не хватает.Я знаю, что чего-то не хватает, поскольку тот факт, что на моем компьютере работает Slackware, свидетельствует о том, что планировщик работает: P

Ответы [ 2 ]

4 голосов
/ 05 ноября 2011

Краткий ответ: нет. В обычных системах Linux контекст ISR считается атомарным контекстом, означающим, что вы не должны передавать управление планировщику ни в какой момент. В случае, если какой-то код вызывает функцию schedule () из контекста прерывания, вы, скорее всего, получите печать «BUG: планирование в то время как атомарное».

Однако возможно перепланировать процесс после end обработки прерываний, и именно это время от времени делает прерывание, чтобы разделить ресурс ЦП между процессами. Кроме того, некоторые исправленные ядра Linux делегировали работу ISR потокам ядра, и в этом случае эти специальные ISR могут спать.

0 голосов
/ 06 ноября 2011

обычно планирование происходит после обслуживания вызова sys (после обработки программного прерывания) и прерываний системного таймера (специальное аппаратное прерывание).Обычно аппаратные прерывания не вызывают планирование.

...