Cтраница 4
При описании задачи пользователь должен указать для нее один из четырех уровней программного ( или пользовательского) приоритета Эти уровни являются логическими и соответствующие им значения приоритетов - ниже системных, устанавливаемых при возникновении прерываний по I / O или вызванных выполнением соответствующих команд. Три уровня программных приоритетов соответствуют реальным, их установка приводит к изменениям содержимого слова состояния процессора. Так, при возникновении прерывания, индицирующего время запуска новой задачи с приоритетом, превышающим приоритет выполняемой, выполнение текущей задачи приостанавливается и активизируется новая. [46]
Событие, состоящее в изменении содержимого памяти, индицируется только в том случае, когда данные были записаны в область памяти, выделенную для наблюдения, причем при выполнении той части операции, которая начала выполняться после последнего прерывания и закончилась переносом последнего байта до возникновения нового прерывания. Преждевременные прерывания специальной индикации не вызывают, так как при повторном выполнении операции событие распознается снова. Такое событие, как совпадение адресов во время записи в память одиночного байта по команде пересылка длинная, может распознаваться только один раз. [47]
С другой стороны, для ядра характерно запрещение прерываний для некоторых команд при работе с переменными или списками. Возникновение прерывания в момент, когда, например, список готовых процессов находится в неопределенном состоянии, могло бы привести к состоянию состязания. Итак, запрет прерываний бывает полезным в самой операционной системе, но это решение неприемлемо в качестве механизма взаимного исключения для пользовательских процессов. [48]
Однако напомним, что проблема состоит в том, что процедура withdraw возобновляется точно с той точки, где была прервана. До возникновения прерывания она создает локальную копию переменной cnt и уменьшает ее значение. Эта копия сохраняется, пока работает процедура обработки прерывания, а после окончания обработки прерывания процедура withdraw помещает уже некорректное значение в переменную cnt. Увеличение cnt, выполненное процедурой обработки прерывания, игнорировано. [49]
По прерываниям, вызванным схемами контроля машины, Супервизор переводит процессор в состояние ожидания, все прерывания запрещаются, начинается диагностическая процедура, определяющая, чем вызвана ошибка: машинным сбоем, сбоем управления каналами, сбоем интерфейса между каналом и процессором. После возникновения прерываний от схем контроля машины продолжение работы системы невозможно. Для восстановления операционной системы выполняется процедура начальной загрузки. [50]
Каждое прерывание имеет свой уникальный номер. При возникновении прерывания с данным номером, из таблицы выбирается соответствующий вектор прерывания и управление передается пб адресу, который в нем содержится. [51]
Прерывания ввода-вывода представляют собой единственный способ, с помощью которого канал или УВВ могут обратить на себя внимание центрального процессора. При возникновении прерывания ввода-вывода текущее PSW запоминается по адресу 38ie, причем код прерывания содержит в младших одиннадцати битах адрес канала или УВВ, а в старших пяти битах - нули. Кроме PSW при прерывании ввода-вывода по адресу 40ie запоминается CSW, состоящее из четырех полей: CAW, байтов состояния устройства и канала ( U и S) и счетчика. [52]