Реферат Курсовая Конспект
Прерывания и цикл команды - раздел Компьютеры, Обзор компьютерных систем Благодаря Прерываниям Во Время Выполнения Операций Ввода-Вывода Процессор Мо...
|
Благодаря прерываниям во время выполнения операций ввода-вывода процессор может быть занят обработкой других команд. Рассмотрим ход процесса, показанный на рис. 1.5,б. Как и в предыдущем случае (без использования прерываний), вызвав процедуру WR1TK., программа обращается к системе. При этом активизируется программа ввода-вывода, которая состоит из подготовительного кода и собственно команд ввода-вывода. После исполнения этих команд управление передается программе пользователя. Тем временем внешнее устройство занято приемом данных из памяти компьютера и их обработкой (например, если этим устройством является принтер, то под обработкой подразумевается распечатка). Ввод-вывод происходит одновременно с выполнением команд программы пользователя.
В тот момент, когда внешнее устройство освобождается и готово для дальнейшей работы, т.е. оно готово принять от процессора новую порцию данных, контроллер ввода-вывода этого устройства посылает процессору сигнал запроса прерывания, В ответ процессор приостанавливает выполнение текущей программы, переключаясь на работу с программой, обслуживающей данное устройство ввода-вывода (эту программу называют обработчиком прерываний). Обслужив внешнее устройство, процессор снова возобновляет прерванную работу. На рис. 1.5,б места программы, в которых происходит прерывание, обозначены крестиком.
С точки зрения программы пользователя, прерывания — это не что иное, как нарушение обычной последовательности исполнения. После завершения обработки прерывания работа возобновляется (рис. 1.6). Таким образом, программа пользователя не должна включать в себя какой-нибудь специальный код, чтобы приспосабливаться к прерываниям. За приостановку программы пользователя и возобновление ее работы с того самого места, в котором она была прервана, отвечают процессор и операционная система.
Чтобы согласовать прерывание с программой, в цикл команды добавляется цикл прерывания (см. рис. 1.7, сравните с рис. 1.2). В цикле прерывания процессор проверяет наличие сигналов прерываний, свидетельствующих о происшедших прерываниях. При поступлении прерывания процессор приостанавливает работу с текущей программой и выполняет обработчик прерываний. Обработчики прерываний обычно входят в состав операционной системы. Как правило, эти программы определяют природу прерывания и выполняют необходимые действия. Например, в используемом примере обработчик должен определить, какой из контроллеров ввода-вывода сгенерировал прерывание; кроме того, он может передавать управление программе, которая должна вывести данные на устройство ввода-вывода. Когда обработчик прерываний завершает свою работу, процессор возобновляет выполнение программы пользователя с того места, где она была прервана.
Ясно, что этот процесс включает в себя некоторые непроизводительные затраты. Для определения природы прерывания и принятия решения о последующих действиях обработчик прерываний должен выполнить дополнительные команды. Тем не менее, ввиду того что для ожидания завершения операций ввода-вывода потребовался бы сравнительно большой отрезок времени, с помощью прерываний процессор можно использовать намного эффективнее.
Чтобы оценить выигрыш в эффективности, рассмотрим временную диаграмму (рис. 1.8), иллюстрирующую ход процессов, показанных на рис. 1.5,а и б. В ситуации, показанной на рис. 1.5,б и 1.8, предполагается, что для выполнения операций ввода-вывода требуется сравнительно короткое время, т.е. меньшее, чем время обработки команд, которые расположены в программе пользователя между операциями записи. Более типичным, особенно для таких медленных устройств, как принтер, является случай, когда операции ввода-вывода занимают намного больше времени, чем требуется для выполнения последовательности команд пользователя. Такая ситуация показана на рис. 1.5,в. В этом случае программа пользователя дойдет до следующего вызова WRITE еще до завершения операции ввода-вывода, порожденной предыдущим вызовом. В результате в этом месте программа пользователя будет приостановлена. После завершения обработки предыдущей операции ввода-вывода придет очередь обработать новое обращение к процедуре WRITE, и будут запущены новые операции ввода-вывода. На рис. 1.9 представлена диаграмма выполнения программы в среде без прерываний и с прерываниями для описанного случая. Как видно, в такой ситуации выигрыш в эффективности все равно существует, так как часть времени, в течение которого выполняются операции ввода-вывода, перекрывается выполнением команд пользователя.
Обработка прерываний
Прерывание вызывает ряд событий, которые происходят как в аппаратном, так и в программном обеспечении. На рис. 1.10 показана типичная последовательность этих событий. После завершения работы устройства ввода-вывода происходит следующее.
1. Устройство посылает процессору сигнал прерывания.
2. Перед тем как ответить на прерывание, процессор должен завершить исполнение текущей команды (см. рис. 1.7). '
3. Процессор производит проверку наличия прерывания, обнаруживает его и посылает устройству, приславшему это прерывание, уведомляющий сигнал об успешном приеме. Этот сигнал позволяет устройству снять свой сигнал прерывания.
4. Теперь процессору нужно подготовиться к передаче управления обработчику прерываний. Сначала необходимо сохранить всю важную информацию, чтобы в дальнейшем можно было вернуться к тому месту текущей программы, где она была приостановлена. Минимальная требуемая информация — это слово состояния программы и адрес очередной выполняемой команды, который находится в программном счетчике. Эти данные заносятся в системный управляющий стек.
5. Далее в программный счетчик процессора загружается адрес входа программы обработки прерываний, которая отвечает за обработку данного прерывания. В зависимости от архитектуры компьютера и устройства операционной системы может существовать как одна программа для обработки всех прерываний, так может быть и своя программа обработки для каждого устройства и каждого типа прерываний. Если для обработки прерываний имеется несколько программ, то процессор должен определить, к какой из них следует обратиться. Эта информация может содержаться в первоначальном сигнале прерывания; в противном случае для получения необходимой информации процессор должен по очереди опросить все устройства, чтобы определить, какое из них отправило прерывание.
Как только в программный счетчик загружается новое значение, процессор переходит к следующему циклу команды, приступая к ее извлечению из памяти. Так как команда извлекается из ячейки, номер которой задается содержимым программного счетчика, управление переходит к программе обработки прерываний. Исполнение этой программы влечет за собой следующие операции.
6. Содержимое программного счетчика и слово состояния прерываемой программы уже хранятся в системном стеке. Однако это еще не вся информация, имеющая отношение к состоянию исполняемой программы. Например, нужно сохранить содержимое регистров процессора, так как эти регистры могут понадобиться обработчику прерываний- Поэтому необходимо сохранить всю информацию о состоянии программы. Обычно обработчик прерываний начинает свою работу с записи в стек содержимого всех регистров. Другая информация, которая должна быть сохранена, обсуждается в главе 3, "Описание процессов и управление ими". На рис. 1-11, а показан простой пример, в котором программа пользователя прерывается после выполнения команды из ячейки N. Содержимое всех регистров, а также адрес следующей команды (7V+1), в сумме составляющие М слов, заносятся в стек. Указатель стека при этом обновляется, указывая на новую вершину стека. Обновляется и программный счетчик, указывая на начало программы обработки прерывания.
7. Теперь обработчик прерываний может начать свою работу. В процесс обработки прерывания входит проверка информации состояния, имеющая отношение к операциям ввода-вывода или другим событиям, вызвавшим прерывание. Сюда может также входить пересылка устройствам ввода-вывода дополнительных инструкций или уведомляющих сообщений.
8. После завершения обработки прерываний из стека извлекаются сохраненные ранее значения, которые вновь заносятся в регистры, возобновляя таким образом то состояние, в котором они пребывали до прерывания (см., например, рис. 1.11,6). ^ -
9. Последний этап — восстановление из стека слова состояния программы и содержимого программного счетчика. В результате следующей будет выполняться команда прерванной программы.
Из-за того что прерывание не является подпрограммой, вызываемой из программы, для полного восстановления важно сохранить всю информацию состояния прерываемой программы. Однако прерывание может произойти в любой момент и в любом месте программы пользователя. Это событие непредсказуемо.
– Конец работы –
Эта тема принадлежит разделу:
Таблица Классы прерываний Программнное прерывание Прерывание по таймеру Прерывание... Прерывания в основном предназначены для повышения эффективности ра боты Например большинство устройств ввода вывода...
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Прерывания и цикл команды
Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов