К. Хамахер, З. Вранешич, С. Заки - Организация ЭВМ - 5-е издание (2003) (1114649), страница 58
Текст из файла (страница 58)
Регистры должны быть сохранены потому, что они могут содержать промежуточные результаты вычислений, выполняющихся в момент окончания кванта времеви. Счетчик команд указывает, с какой команды должно быть возобновлено выполнение программы. Слово состояния процессора содержит флаги условий и другую важную информацию, в том числе коды приоритетов. Далее ЯНЕППЕЕК выбирает для выполнения какую-нибудь другую программу, предположим В, приостановленную ранее и находящуюся в режиме готовности.
Планировщик восстанавливает всю информацию, сохраненную после приостановления программы В, включая содержимое регистров РБ и РС, и выполняет команду возврата из прерывания. В результате этого выполнение программы В возобновляется и продолжается в течение т секунд, после чего таймер снова генерирует прерывание и выполняется переключение контекстпа на другой процесс, нзходяшийся в состоянии готовности. 248 Глава 4.
Ввод-вывод Установка векторов прерываний: таймер квантования (ЯСНЕВ()1ЕЕ) программное прерывание (ОББЕЕЪ'1СЕБ) прерывания от клавиатуры (1ООага) ОЯХ1Т Анализ стека для определения запрошенной операции Вызов соответствующей программы Сохранение состояния программы Выбор готового к выполнению процесса Восстановление сохраненного контекста нового процесса Проталкивание в стек новых значений РЗ и РС Возврат из прерывания ОЯЯЕЮ~1СЕЯ ЯСНЕО()1ЕЕ Перевод процесса в состояние блокировки Инициализация указателя на буфер в памяти и счетчика Вызов драйвера устройства для его инициализации и разрешения прерываний Возврат из подпрограммы Опрос устройств для определения инициатора прерывания Вызов соответствующего драйвера Перевод процесса в состояние готовности, если ЕХО-1 Возврат из прерывания 101Х1Т 101)АТА КВ1) (Х)Т Разрешение прерываний Возврат из подпрограммы Проверка состояния устройства Если устройство готово к работе, пересылка символа Если значение символа равно СЕ, то флаг ЕХ() устанавливается в 1, что соответствует запрету на прерывания; в противном случае ЕХЭ устанавливается в О Возврат из подпрогрэммы КВЭЭАТА Рис.
4.10. Некоторые из программ операционной системы: программы инициализации ОС, сервисов и планировщика (а); программы ввода-вывода (О); драйвер клавиатуры (в) Предположим, что программе А требуется прочитать вводимую с клавиатуры строку. Вместо того чтобы выполнять эту операцию самостоятельно, программа запрашивает у операционной системы функцию ввода-вывода, Для передачи 4.2.
Прерывания 249 операционной системе информации о требуемой операции (в том числе об устройстве ввода-вывода и адресе буфера в области данных программы, в который следует поместить прочитанную строку) она использует стек или регистры процессора. Затем программа выполняет команду программного прерывания. Вектор прерывания этой команды указывает на подпрограмму ОББЕЕН1СЕЯ, представленную на рис.
4.10, а. Эта подпрограмма анализирует информацию в стеке и инициирует запрошенную операцию с помощью вызова соответствующей подпрограммы ОС. В нашем примере она вызывает подпрограмму 101Х!Т, отвечающую за инициирование операций ввода-вывода (рис. 4.10, б). Пока выполняется операция ввода-вывода, запросившая ее программа не может продолжать свою работу.
Поэтому подпрограмма 101Х!Т переводит процесс, связанный с программой А, в состояние блокировки, указывающее планировщику, что пока выполнение этой программы не может быть продолжено. Затем данная подпрорамма производит подготовительную работу, необходимую для выполнения операции ввода-вывода (например, инициализацию указателей и счетчика байтов), и вызывает подпрограмму, осуществляющую операцию ввода-вывода. Как правило, операционные системы строятся так, чтобы все программное обеспечение, связанное с конкретным устройством, заключалось в отдельный модуль, называемый драйвером устройства. Такой модуль легко добавить в операционную систему и легко из нее удалить.
Мы предположили, что драйвер клавиатуры состоит из двух подпрограмм, КВР1Х1Т и КВР РАТА (рис. 4.10, в). Подпрограмма 101Х1Т вызывает КВР1Х1Т, выполняющую инициализацию устройства и его интерфейсной схемы. Кроме того, подпрограмма КВР1Х!Т разрешает прерывания от данного устройства, установив соответствующий бит в управляющем регистре его интерфейсной схемы, а затем возвращает управление подпрограмме 101Х!Т, которая, в свою очередь, возвращает управление подпрограмме ОБЯЕКН1СЕЯ. После этого клавиатура готова к операциям пересылки данных. После каждого нажатия клавиши она будет генерировать запрос прерывания. После возврата управления подпрограмме ОБЗЕКН1СЕБ планировщик БНЕЭШЕК выбирает для выполнения другую пользовательскую программу. Он не сможет выбрать программу А, поскольку она пока находится в заблокированном состоянии. Команда возврата из прерывания, после которой начинается выполнение выбранной пользовательской программы, разрешает прерывания в процессоре, загрузив в его регистр состояния новое содержимое.
Таким образом, сгенерированный клавиатурой запрос прерывания будет принят процессором. Вектор этого прерывания указывает на программу ОС, названную 10РАТА. Поскольку к одной линии запроса прерывания может быть подсоединено несколько устройств, программа 10РАТА начинает опрашивать эти устройства, чтобы узнать, кому из них потребовалось обслуживание. Затем она вызывает соответствующий драйвер устройства для обслуживания запроса. В нашем случае будет вызван драйвер КВРРАТА, который перешлет в процессор один символ.
Если это символ возврата каретки, драйвер установит значение флага ЕХР в 1, чтобы проинформировать 1ОРАТА о завершении операции ввода-вывода. После этого программа 10РАТА изменит состояние процесса А — теперь он будет не блокированным, а готовым к выполнению, и когда подойдет его очередь, планировщик сможет выбрать его для выполнения в течение очередного кванта времени. 250 Глава 4.
Ввод-вывод 4.3. Примеры обработки прерываний различными процессорами В предыдущем разделе было рассказано об основных принципах организации и обработки прерываний. Имеющиеся на рынке процессоры обычно поддерживают большую часть рассмотренных нами функций и механизмов, хотя отдельные методы управления прерываниями ими могут и не поддерживаться. В частности, процессор может поддерживать векторные прерывания, ускоряющие вызов программ обработки прерываний от конкретных устройств. А задача идентификации устройства и определения начального адреса соответствующей программы обработки прерываний в качестве альтернативы может быть возложена на программное обеспечение, которое должно будет прибегнуть к опросу всех устройств.
В следующих разделах рассказывается о механизмах обработки прерываний, используемых в трех процессорах, которые описаны в главе 3. 4.3.1. Механизм прерываний процессора АЙМ Механизм прерываний процессора АКМ отличается простотой и мощью. В нем определено пять источников прерываний, из которых только двум соответствуют внешние линии запроса прерывания, ?КЯ и Р1 Я (Разг 1пгеггцрг Бег?цезг — быстрый запрос прерывания). Имеется одна команда программного прерывания, БЖ?, и два типа прерываний, которые могут быть вызваны нестандартными условиями, возникающими в ходе выполнения программ.
Это прерывания, вызываемые внешним сбоем, за которым следует ошибка шины, и прерывания, обусловленные попыткой выполнить несуществующую команду. Исключения обрабатываются в соответствии с иерархией приоритетов: 1. Перезапуск (Кезег) — наивысший приоритет; 2. Ошибка данных (Рага аЬогг); 3. Быстрый запрос прерываний (Р?(4); 4. Запрос прерываний (?КЯ); 5. Сбой выборки команды (Рге1егсЬ аЬогг); 6. Несуществующая команда (?Лп1ейпег? 1пзггцсг1оп) — низший приоритет. Условие Кезег включено в эту иерархию по той простой причине, что оно име.
ет естественный приоритет перед всеми остальными условиями и должно вызывать немедленный перевод процессора в определенное начальное состояние. Условие Рага аЪогг обусловлено возникновением ошибки при чтении или записи данных, а условие Рте?егсй аЬогг — ошибки во время выборки команд из памяти. На рис. 3.1 показана структура регистра состояния процессора АКМ, называемого СРБК (Сцггепг Ргоягаш Згагцз Кея?згег — регистр текущего состояния программы).
Младший байт данного регистра состояния показан на рис. 4.11. Он содержит два разряда маскирования прерываний, по одному для прерываний ?КЯ и Р?Я,. Когда любой из этих разрядов равен 1, соответствующее прерывание запрещено. Кроме того, в регистре имеется пять разрядов режима, М4 з, которые определяют режим работы процессора. Процессор АКМ может работать в шести 4.3. Примеры обработки прерываний различными процессорами 251 режимах: пользовательском и пяти привилегированных, по одному для каждого из пяти типов исключений. 7 6 5 4 3 2 1 О Рио. 4.11. Младший байт регистра состояния процессора АЙМ таблица 4.1. Адреса еекгорое прерывания для процессора Анм Адрес (шестнадцатеричный) Исключение Режим процессора Супервизор Не определен Супервизор Аварийное завершение Аварийное завершение О 6 С 10 14 16 1С Сбое Несуществующая команда Программное прерывание Сбой при выборке команды Ошибка данных Зарезервировано 1КЯ НЯ 1КО 81О.
Когда процессор переключается из одного режима в другой, он переключает и несколько доступных программе регистров. Какие именно регистры доступны в каждом из режимов, показано на рис. 4,12. Регистры от КО до К7, К15 (РС) и СР5 К доступны во всех режимах. В привилегированных режимах, за исключением режима НО доступны также регистры от К8 до К12. А вот регистры К13 н К.14 в режимах 1КЯ, 8прегтпзог, АЬогс и Шк1ейпеб заменяются новыми регистрами.