Многократные прерывания
В предыдущем разделе прерывания описывались в предположении, что они происходят изолированно; на самом деле, они могут происходить одновременно или, по крайней мере, одновременно фиксироваться аппаратной частью ЭВМ. Прерывания могут также возникать во время обработки других прерываний. Каким образом система может обрабатывать такие многократные прерывания?
На основе приоритетов, приписанных каждому типу прерывания, для обработки из нескольких одновременно возникших прерываний должно быть выбрано одно. Учет приоритета может быть “встроен” в технические средства, как в IBM, либо он может определяться операционной системой, как в ЭВМ фирмы DEC. Так, например, команде вызова супервизора может быть приписан более высокий приоритет, чем прерыванию от системы ввода/вывода. Прерывания, класс которых имеет более низкий приоритет, могут быть разрешены, либо замаскированы. Если прерывание разрешено, то оно может прервать процессор, что обычно и происходит сразу же после того, как аппаратура зафиксирует прерывание. В этом случае более низкому приоритету прерывания соответствует более высокий приоритет его обработки; так в предыдущем примере прерыванию от системы ввода/вывода можно было бы присвоить более высокий приоритет обработки по сравнению с вызовом супервизора. При использовании стека прерываний относительные приоритеты не нужны. Следовательно, рассматривая прерывания, важно знать, какой тип приоритета имеется в виду. Замаскированное прерывание не может прервать процессор. Оно может быть утерянным, либо ждать обработки, что означает, что оно все еще известно аппаратуре. Если замаскированное прерывание ждет обработки, то последующее размаскирование или разрешение прерываний, инициирует его обработку.
Если новое прерывание происходит во время обработки старого, то оно будет либо разрешено, либо замаскировано программой обработки прерывания, в зависимости от типов этих двух прерываний. Если новое прерывание разрешено, то оно начинает обрабатываться, а программа обработки старого является в этом случае прерванным процессом. Если новое прерывание замаскировано, то оно может быть либо утеряно, либо ожидать обработки. Если прерывание ожидает обработки, то оно может находиться в этом состоянии до тех пор, пока управляющая программа не будет готова к его обработке. Для этого должно быть разрешено прерывание от таймера, которое может заставить программу обработки прерывания в определенные моменты времени проверять, нет ли прерываний, ожидающих обработки, которые должны быть обслужены до истечения некоторого интервала времени.
Решение о маскировании или открытии прерывания на время обработки других прерываний может приниматься техническими средствами или может быть оставлено на усмотрение программы обработки прерывания. Дальнейшее появление прерываний того же самого типа должно маскироваться либо техническими средствами, либо программой обработки прерывания. Это необходимо для того, чтобы сохранить характеристики прерывания и состояние процесса для первого прерывания и избежать записи в фиксированные ячейки соответствующей информации при втором прерывании. Если аппаратура не выполняет маскирование соответствующего типа прерывания, то это должна делать программа обработки прерывания первого уровня, а демаскирование перед возобновлением нормальной работы может выполнять и программа обработки прерывания второго уровня.
Обработка многократных прерываний при наличии разных приоритетов облегчается присутствием аппаратных средств, позволяющих выделение разным приоритетам различных фиксированных ячеек для характеристик прерывания и для запоминания состояния процесса. В рамках одного приоритета управляющая программа должна хранить информацию о нескольких прерываниях, чтобы не заставлять каждое ждать, пока его предшественник будет обработан Например, довольно часто прерывание ввода/вывода можно обрабатывать в две стадии, причем на второй выполняются сравнительно медленные команды ввода/вывода, например подвод головки. Как только операционная система выдала такую команду устройству ввода/вывода, она может разрешить другие прерывания и, таким образом, обрабатывал накопившиеся прерывания. Такие прерывания, ожидающие обработки, обычно хранятся в очередях.