Обработка прерываний

Операционную систему можно рассматривать как программу, управляемую прерываниями (interrupt-driven program).Прерывание центрального процессора передает управление подпрограмме обработки данного вида прерываний, являющейся частью ОС. В большинстве компьютеров этот механизм реализован через вектор прерываний (interrupt vector)– резидентный массив в оперативной памяти, в котором хранятся доступные по номерам прерываний адреса подпрограмм-обработчиков прерываний (модулей ОС). При обработке прерывания аппаратура и ОС сохраняют адрес прерваннойкоманды.При возобновлении вычислений будет вновь повторено выполнение прерванной команды.

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

Кроме прерываний, генерируемых аппаратурой неявно при вычислениях (например, отсутствие страницы в оперативной памяти), возможно также программируемое прерывание (trap; дословно –ловушка) с помощью специальной команды процессора, - например, при обнаруженной ошибке в программе. В случае такого прерывания также работает общий механизм запуска обработчика прерывания – части ОС. Таким образом, с упрощенной точки зрения, ОС можно рассматривать как набор обработчиков прерываний.

При прерывании ОС сохраняет состояние процессора –значения регистров и значение счетчика команд (program counter – PC)– адреса прерванной команды.Обработчик прерывания в ОС определяет по содержимому сегмента объектного кода, какого вида прерывание возникло и какие действия по его обработке следует предпринять. Среди возможных видов прерываний, кроме фиксации различных ошибок, имеются также прерывания по таймеру– периодические прерывания через определенный квант времени, предназначенные для опроса устройств (polling)– действий операционной системы по периодической проверке состояния всех портов и внешних устройств, которое может меняться с течением времени: например, к USB-порту была подключена флэшка; принтер закончил печать и освободился, и т.д. ОС выполняет реконфигурацию системы и корректирует системные таблицы, хранящие информацию об устройствах.

Архитектура ввода-вывода

На рис. 4.2 изображена временная диаграмма прерываний процессора, выполняющего ввод-вывод.

 


увеличить изображение
Рис. 4.2. Временная диаграмма прерываний процессора при вводе-выводе.

На диаграмме видны моменты смены состояний процессора и устройства ввода-вывода: прерывание по запросу на ввод-вывод, обработка этого прерывания и пересылка информации из памяти в буфер устройства, вызов драйвера и контроллера, окончание обмена и прерывание контроллера, продолжение вычислений.

Имеются две разновидности режима ввода-вывода – синхронныйи асинхронный .

Синхронныйввод-вывод – это ввод-вывод, выполнение которого приводит к переходу программы в состояние ожидания, до тех пор, пока операция ввода-вывода не будет полностью завершена. На аппаратном уровне – команда ввода-вывода переводит процессор в состояние ожидания (idle) до следующего прерывания. При данном режиме в каждый момент выполняется не более одного запроса на ввод-вывод; одновременный ввод-вывод отсутствует. Синхронный вывод выполняют всем программистам привычные операторы вида println(x).При их использовании в программах мы не задумываемся над тем, что используем достаточно неэффективный вариант синхронного ввода-вывода. Однако до сих пор мышление большинства программистов – последовательное, в том смысле, что о своей программе они мыслят как о чисто последовательно выполняемой, и вообще не думают о возможности какого-либо распараллеливания. При отладке программы, либо если размер выводимой информации невелик, это обычно вполне допустимо.

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

Таблица состояния устройств

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

Архитектура синхронного (a) и асинхронного (b) ввода-вывода иллюстрируется на рис. 4.3.

 


увеличить изображение
Рис. 4.3. Архитектура синхронного и асинхронного ввода-вывода

На схеме видно, что отличительной чертой синхронного обмена является переход процессора в состояние ожидания до окончания операции ввода-вывода.

На рис. 4.4 показан пример состояния таблицы устройств ввода-вывода, хранимой операционной системой. Для каждого устройства хранится информация о его имени, состоянии, а для занятых устройств – адрес начала и длина порции информации, подлежащей обмену. Если для некоторого устройства (в примере – диск3) имеется несколько запросов на ввод-вывод, все они организуются в очередь и обслуживаются по очереди, по мере освобождения устройства.

 


увеличить изображение
Рис. 4.4. Пример состояния таблицы внешних устройств ОС

 

 

Прямой доступ к памяти (Direct Memory Access – DMA) – более эффективный метод работы контроллеров устройств ввода-вывода, используемый для работы высокоскоростных устройств, способных передавать информацию со скоростью, близкой к скорости работы памяти

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