Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #88, АПРЕЛЬ 2006 г.

Прервись на минутку

Weird aka Беренштейн Евгений

Хакер, номер #088, стр. 088-030-3


Далее автоматически сохраняется определенная часть контекста прерванного потока, которая позволит ядру возобновить процесс после обработки возникшего прерывания. Сохраняются значения счетчика команд, слова состояния машины, хранящего признаки основных режимов работы процессора (пример такого слова - регистр EFLAGS в Intel Pentium) и т.д.

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

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

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

[это нужно знать!]

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

[программные прерывания]

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

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

Назад на стр. 088-030-2  Содержание  Вперед на стр. 088-030-4