Можно ли изменить код обработчика прерываний во время выполнения? - PullRequest
0 голосов
/ 21 октября 2019

Возможно, это глупый вопрос, когда ответ «нет», но возможно ли это теоретически? Интересно, почему нет?

И я не знаю, зачем ...

1 Ответ

2 голосов
/ 21 октября 2019

Существует несколько различных типов «обработчиков прерываний».

Первый, аппаратные обработчики IRQ, модифицируются, когда ОС загружает драйверы и тому подобное.

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

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

Третий тип, безАппаратная поддержка - это «обработчики сигналов» (в UNIX), которые в основном находятся на уровне ОС и относятся к событиям ОС.

Общим для них является то, что ответы программируются. Идея состоит в том, что вы знаете, как ваше программное обеспечение / ОС реагирует на них, поэтому вы добавляете код, необходимый для их обслуживания. В этом смысле они «модифицируемы во время выполнения».

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

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

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

Но UNIX позволяет пользовательскому программному обеспечению изменять обработчики сигналов своего процесса. Обычно это делается для того, чтобы (например) SIGHUP разрешить Apache перезагрузить свои файлы конфигурации.

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

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