Организация прерываний в эвм

Организация прерываний в ЭВМ

Основные стадии выполнения команды. Рабочий цикл процессора

Функционирование процессоров в основном состоит из повторяющихся рабочих циклов, каждый из которых соответствует выполнению одной команды программы. Завершив рабочий цикл для текущей команды, процессор переходит к выполнению рабочего цикла для следующей команды программы.

В общем виде команды, выполняемые процессором, имеют следующий формат:

Код операции Адресный код

В зависимости от того, сколько полей содержит адресный код различают команды: безадресные, одноадресные, двухадресные и т.д. Например, в языке ассемблера команда inc si является одноадресной (увеличивает содержимое регистра si на единицу). Inc – это код операции, si – адресный код). Безадресная команда – команда AAA. Команда AAA предназначена для корректировки результата сложения неупакованных BCD-чисел и предпринимает действия над регистром AX и регистром флагов.

Выделяют четыре группы команд: основные (арифметические, логические и пересылочные операции); передачи управления; ввода-вывода; системные (устанавливающих состояние процессора).

Рабочий цикл начинается с распознавания состояния процессора – «счет» или «ожидание».

В состоянии «ожидание» никакие программы не выполняются – процессор ждет поступления прерывания, после чего управление передается прерывающей программе, переводящей процессор в состояние «счет».

В состоянии «счет» при наличии прерываний происходит выход из нормального рабочего цикла и переход к процедуре обработки запросов прерывания.

При отсутствии прерываний в состоянии «счет» последовательно выполняются этапы рабочего цикла: выборка очередной команды и определение по коду операции ее группы. На этапе выборки очередной команды образуется (согласно естественному порядку) адрес следующей за ней команды (продвинутый адрес), при этом счетчик команд инкрементируется (увеличивается на единицу).

Для основных команд формируются исполнительные адреса операндов, выборка операндов из памяти, обработка операндов в АЛУ. В процессе выполнения команды формируются признаки результата операции (в регистре флагов) и запоминание результата. Например, при выполнении команды ADD может быть установлен в 1 и сброшен в 0 флаг переноса CF в регистре флагов, а также результат вычисления суммы будет помещен в место, определяемое операндом-приемником.

При выполнении команд передачиуправления проверяется заданное условие. Если условие не выполняется, то следующую команду указывает продвинутый адрес, установленный ранее в СчК (счётчике команд = регистр IP). Если условие выполняется, то в СчК передается адрес, заданный командой передачи управления. В регистре IP лежит адрес следующей команды, которую надо будет выполнить (мы выполняем текущую, а в IP лежит адрес уже следующей команды). Если текущая команда проверяет какое-либо условие и оно не выполняется, то значение IP не меняется. Если условие выполняется, то в IP помещается адрес той команды, который указан в текущей команде в качестве аргумента. + см листок с примером. Например, команда JZ производит анализ фланга ZF и в случае, если ZF= 1, осуществляет переход к выполнению команды, на которую указывает .

Команды ввода-вывода инициируют (активируют, приводят в действие) в канале операцию обмена информацией между ЦП и периферийным устройством.

Системные команды осуществляют переключения состояния процессора (программы) путем загрузки нового слова в регистр состояния процессора. Например, команда STC (эта команда безадресная) устанавливает флаг переноса CF в единицу.

Организация прерываний в эвм
На рис. 1 представлен рабочий цикл процессора.

Рис. 1. Рабочий цикл процессора

Организация прерываний в ЭВМ

Во время выполнения текущей программы, внутри ЭВМ и в связанной с ней внешней среде (например, в технологическом процессе, управляемом ЭВМ) могут возникать события, требующие немедленной реакции на них со стороны ЭВМ.

Реакция состоит в том, что ЭВМ прерывает обработку текущей программы и переходит к выполнению некоторой подпрограммы, специально предназначенной для данного события. По завершении указанной подпрограммы ЭВМ возвращается к выполнению прерванной программы.

Рассматриваемый процесс, называемый прерыванием программ, поясняется на рис.2.

Организация прерываний в эвм

Основными действиями в процессе обработки прерываний являются:

  • запоминание состояния прерываемой программы и осуществление перехода к прерывающей программе
  • восстановление состояния прерванной программы и возобновление её выполнения.

Каждое событие, требующее прерывания, сопровождается сигналом, называемым запросом прерывания. Если аппаратное прерывание, то сигнал – электрический сигнал, если программное прерывание, то сигнал – машинная команда, она выдается из программы в ЦП.

Обобщающий термин прерывание используется для двух случаев: 1) аппаратное прерывание — это сигнал от любого устройства системы для процессора, который по этому сигналу должен обслужить данное устройство, и 2) программное прерывание, которое создается программами для вызова сервисных подпрограмм из BIOS или DOS.

Аппаратное прерывание вырабатывается специальной микросхемой — контроллером прерываний, который посылает сигнал (электрический) процессору на приостановку выполнения текущей программы и переход к выполнению программы прерывания. Например, нажатие любой клавиши заставляет процессор приостановить выполняемую программу, чтобы переключиться на выполнение подпрограммы на уровне BIOS, которая считывает код нажатой клавиши из порта клавиатуры. Затем процессор возобновляет выполнение прерванной программы.

Принципиально важным является то, что моменты возникновения событий, требующих прерывания программ, заранее неизвестны и поэтому не могут быть учтены при программировании.

Программные прерывания включают необходимые сервисные программы для проведения операций ввода-вывода. Такого рода прерывания назвали программными из-за того, что они во многом повторяют действия аппаратных прерываний.

Начальный адрес прерывающей программы называется вектором прерывания. В общем случае, каждому запросу прерывания соответствует свой вектор прерывания, способный инициировать выполнение соответствующей прерывающей программы. Векторы прерывания обычно находятся в специально выделенных фиксированных ячейках памяти – таблице векторов прерывания. Таблица векторов прерываний располагается в ОП по нулевому адресу. Номер прерывания передается контроллером прерывания в ЦП в виде 8-разрядного числа.

В таблице векторов прерываний для каждого прерывания всегда указывается адрес начала сегмента кода (этот адрес представляет собой 16-тиразрядное число), который будет записан в регистре CS процессора, и смещение первой команды программы-обработчика прерывания относительно начала сегмента кода этой программы-обработчика. Это смещение тоже представляет собой 16-тиразрядное число и будет записано в регистре IP процессора. Таким образом, таблица векторов прерываний состоит из 4-байтных элементов, соответствующих каждому типу прерывания. Соответственно, в ОП эта таблица будет занимать 28 4 байта = 1024 байта.

Когда контроллер прерываний посылает в ЦП сигнал (электрический) через вывод INTR (этот вывод представляет собой электрический контакт ЦП, на который в случае прерывания подается высокой напряжение), он должно также поместить тип прерывания в виде 8-разрядного числа на системную магистраль для передачи в ЦП. Процессор, умножив это число на 4, определяет адрес используемого вектора прерывания и перейдет на обслуживание прерывания.

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

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

Различают абсолютный и относительный приоритеты. Запрос, имеющий абсолютный приоритет, прерывает выполняемую программу и инициирует выполнение соответствующей прерывающей программы. Запрос с относительным приоритетом является первым кандидатом на обслуживание после завершения выполнения текущей программы.

Прерывания от 0 до 31 (самые нижние уровни) используются как прерывания внутренней аппаратуры (прерывания BIOS). Прерывания от 32 до 63 используются как прерывания MS-DOS. Все остальные прерывания применяются внешней аппаратурой, системными драйверами и прикладными программами.

Возможность прерывания программ — важное архитектурное свойство ЭВМ, позволяющее эффективно использовать производительность процессора при наличии нескольких протекающих параллельно во времени процессов, требующих в произвольные моменты времени управления и обслуживания со стороны процессора.

Пример. Клавиатура подсоединена к материнской плате через разъём порта, например, РS/2 (пи эс слеш два). Порт – это разъём плюс микросхема, соединенная с этим разъёмом и с магистралью ЭВМ. Эта микросхема обрабатывает сигнал нажатия клавиши (по кабелю от клавиатуры через разъем к микросхеме идет электрический сигнал). Далее, эта микросхема дает сигнал (электрический) контроллеру прерываний (это др. микросхема), который в свою очередь дает сигнал на ЦП черезспециальный контакт (вывод INTR), то есть что надо прервать, и передает в ЦП номер прерывания в виде 8-разрядного числа. ЦП приостанавливает работу текущей программы, записывает в сегмент стека оперативной памяти содержимое регистров CS, IP и регистра флагов. В это же время ЦП умножает на 4 поступившее 8-разрядное число, тем самым определяет адрес первоначальной ячейки вектора прерываний, то есть первой ячейки в четырех-байтной группе. Эта группа содержит новые значения для регистров CS и IP (по 2 байта для каждого регистра). ЦП заменяет содержимое регистров CS и IP новым значениями из вектора. В результате такой замены процессором будет выполнена следующая команда, физический адрес которой определяется новыми значениями CS:IP. Тем самым запускается программа-обработчик прерывания. Уже эта программа считывает из микросхемы порта код нажатой клавиши и передает его в ЦП. Как только в этой программе-обработчике встретится команда завершения обработки прерывания, ЦП восстановит из сегмента стека сохраненные ранее значения регистров CS, IP и регистра флагов. Вследствие чего возобновляется выполнение прерванной программы.

#6. Что такое регистры и прерывания / 2. Введение в ассемблер / Программирование с нуля


Похожие статьи.

Понравилась статья? Поделиться с друзьями: