2011-04-21 2 views
2

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

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

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

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

+0

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

+0

Процессоры, обычно используемые во встроенных системах, будут включать сторожевой таймер. x86 также поддерживает сторожевой таймер, подключенный к NMI. Однако вредоносная программа может просто отключить сторожевой таймер и отключить прерывания. – doug65536

ответ

3

Собственно, ответ на ваш вопрос зависит от архитектуры. Предположим, что речь идет о i386 или x86_64, поскольку в наши дни это самые популярные архитектуры процессоров.

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

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

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

+0

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

+0

Да, это имеет смысл. –

+0

Программы пользовательского режима в Linux i386 работают под CPL = 3, а не 2. С другой стороны, пользовательская программа CAN отключает прерывания, если работает от root. Корневые процессы могут использовать системный вызов iopl(), чтобы снизить уровень IOPL до 3, поэтому процесс с CPL = 3 может использовать инструкции CLI и STI, которые чувствительны к IOPL, а не чувствительны к CPL. –

Смежные вопросы