Отключает ли прерывание автоматически отключение планирования процессора? - PullRequest
2 голосов
/ 21 апреля 2011

Эй, ребята, правда ли, что планирование всех процессов / потоков будет отключено, если прерывание отключено? Я знаю, что прерывание включает в себя прерывание часов и другие прерывания. Планирование ЦП (например, Round-Robin) основано на прерывании тактового сигнала. Если это отключено, планирование также отключено, и текущий поток продолжает выполняться до тех пор, пока не будет запущен процессор. Пожалуйста, поправьте меня, если я ошибаюсь.

Если это чистое планирование на основе приоритетов вместо RR (с учетом систем реального времени), и поток с более низким приоритетом отключает прерывание, то приходит поток с более высоким приоритетом, будет ли приоритетен поток с более низким приоритетом?

Это заставляет меня задуматься о защите в операционной системе. Что если какой-то пользователь намеренно напишет вирус, чтобы отключить прерывания? Возможно, он не может сделать это в режиме пользователя, что если он напишет программу, работающую в режиме Kernal, и сделает что-то плохое? Может ли он это сделать?

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

1 Ответ

3 голосов
/ 22 апреля 2011

На самом деле ответ на ваш вопрос зависит от архитектуры. Давайте предположим, что мы говорим о i386 или x86_64, так как это самые популярные процессорные архитектуры в наши дни.

Программа пользовательского режима не может очистить флаг прерывания, потому что требует CPL (текущий уровень привилегий) 0. Программы пользовательского режима никогда не имеют CPL 0. В Linux, например, программы пользовательского режима работают с CPL 2, и только ядро ​​работает с CPL 0. Поэтому вы не можете написать вирус, который бы отключил прерывания и, таким образом, отключил планирование. В Windows, если я не ошибаюсь, программы запускаются с CPL 1.

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

Надеюсь, это ответит на ваш вопрос.

...