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

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

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

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


Работа прерываний в операционных системах

Не секрет, что прерывания являются важнейшей частью работы операционной системы. Но задумывался ли ты, что это такое? Для чего они нужны и как работают? Едва ли.

[прерывание и исключения]

В архитектуре любого процессора предусмотрены особые случаи, когда процессор прерывает выполнение текущей программы и немедленно передает управления программе-обработчику, специально написанной для обработки подобной ситуации. Такие ситуации встречаются сплошь и рядом. Чтобы это осознать, предлагаю немного пофантазировать. Абстрагируйся от современных многозадачных систем, оснащенных мощными системными планировщиками. Просто представь, что всего этого не существует — есть лишь «голая» однопроцессорная система. Если этой системе дать невыполнимое задание, скажем, подсчитать точное значение числа Пи, то она будет выполнять его целую вечность. Рано или поздно, этот процесс придется остановить, но как? Процессор не реагирует ни на что — он пыхтит над заданном ему заданием. Вот тут-то и потребуется прерывание. Ты жмешь нужную клавишу на клавиатуре — это нажатие обрабатывает контроллер клавиатуры, который передает процессору специальный сигнал «нажата клавиша». Этот сигнал с сообщением, по большому счету, и есть прерывание. Оно понятно процессору, поэтому его внутренние механизмы прерывают выполнение текущей последовательности команд и обращаются к специальной подпрограмме - обработчику прерывания. В нашем случае это обработчик прерывания клавиатуры. По умолчанию в нем прописано много всякой всячины (например, перезагрузка по Ctrl-Alt-Del), но для того, чтобы реализовать остановку процесса, необходимо его немного видоизменить. Достаточно добавить туда обработку нужной нам клавиши, обозначив для нее действие «создать флаг завершения вычислений» — и готово. Теперь, когда управление возвратится обратно в программу, она получит останавливающий ее флаг и прекратит вычисления.

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

Вместе с тем прерывания по-прежнему выполняют ведущую роль в планировании процессов — просто ты этого не замечаешь.

[типы прерываний]

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

Внешние прерывания инициируются сигналами от аппаратных устройств (вернее их контроллеров): всевозможных устройств ввода-вывода, внешних накопителей, различной периферии (принтеров, сканеров) и т.д. Именно поэтому внешние прерывания также называют аппаратными. Необходимость в них наглядно демонстрирует пример выше. Нажатие клавиатуры обязательно должно быть зафиксировано — ведь оно по идеи должно влиять на процесс дальнейших вычислений. Такие прерывания возникают между выполнением двух соседних инструкций, а после их обработки система продолжает выполнение процесса, начиная со следующей инструкции.

Содержание  Вперед на стр. 088-030-2
стихотворения про Новый Год | Пример для подражания в отрасли наведение порядка это Гелиос. | теперь. Акциячалась: купить ксерокс и принтер а3 на 10% дешевле! Акция! | проектирование сети наружных