Реализация функций на аппаратном и программном уровнях

Прием и хранение запросов прерываний от многих источников.

Эта функция реализуется на аппаратном уровне путем установки соответствующих битов регистра запросов при их появлении этих запросов. Например, в микросхеме PIC (Intel 8259A) имеется специальный регистр IRR (Interrupt Request Register – регистр запросов прерываний), который является восьмибитным (по числу обслуживаемых запросов). Каждый бит этого регистра соответствует определенному источнику прерываний (например, запрос от таймера или клавиатуры), и установка этого бита свидетельствует о наличии запроса от источника. При количестве источников запросов больше восьми применяется так называемая схема каскадного подключения микросхем PIC. В типовой комплект ПК входят две микросхемы PIC, одна из них является ведущей, а другая – ведомой.

Выделение наиболее приоритетного запроса из множества поступивших.

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

Реализация функций на аппаратном и программном уровнях - student2.ru Реализация функций на аппаратном и программном уровнях - student2.ru Реализация функций на аппаратном и программном уровнях - student2.ru Реализация функций на аппаратном и программном уровнях - student2.ru

Рис.1. Схема аппаратного полинга

На вход схемы поступают сигналы запросов прерываний ЗП0, ЗП1, …, ЗПn-1 от n источников. Периодически производится опрос источников путем подачи одноименного сигнала на вход схемы. При наличии хотя бы одного запроса прерывания единичный сигнал с выхода соответствующего элемента и поступает на вход шифратора (кодера – CD). Дальнейшее распространение сигнала опроса по цепочке прекращается за счет поступления единичного сигнала на инверсный вход последующего элемента и в цепочке. С помощью шифратора осуществляется преобразование унитарного двоичного кода (код с единственной единицей) в двоичный позиционный код номера на выходе. Код запроса сохраняется в регистре РгN. Разрядность этого регистра составляет log2 n. При этом, естественно, предполагается, что количество запросов прерываний, обслуживаемых схемой, представляет собой степень двойки.

При отсутствии запросов прерываний сигнал опроса источников беспрепятственно проходит по всей цепочке и после инвертирования на элементе НЕ запрещает подачу записи (W-Write) на вход разрешения обращений (E-Enable) выходного регистра РгN.

При наличии нескольких запросов прерываний в РгN будет зафиксирован наименьший код (номер). Таким образом, предусмотрено приоритетное выделение запросов прерываний на обслуживание.

Программный полингреализуется специальной программой, которая последовательно опрашивает разряды регистра запросов с целью выделения крайней левой или крайней правой единицы (в зависимости от упорядочивания запросов по приоритетам). Для ускорения работы программы полинга могут быть использованы специальные команды сканирования битов с мнемоникой BSF – Bit Scan Forward (прямое сканирование) или BSR – Bit Scan Reverse (обратное сканирование), с помощью которых можно выделить крайний левый (BSF) или крайний правый (BSR) бит, установленный в операнде-источнике. Эти команды введены в систему команд процессоров Intel, начиная с Intel 80386, и возвращают в качестве результата номер позиции установленного бита.

В стандартной микросхеме PIC встроен механизм аппаратного полинга на основе дейзи-цепочки, но имеется возможность реализации и программного полинга.

Проверка возможности обработки выделенного запроса центральным процессором

Отношение ЦП к поступающим запросам прерываний, как правило, выражается с помощью двух основных механизмов:

• механизм масок;

• механизм порога.

Механизм масок используется в ПК на базе процессоров Intel, а также в мэйнфреймах фирмы IBM. Механизм порога используется в мини-компьютерах с архитектурой DEC – Digital Equipment Corporation (PDP-8, VAX-11), а также в ПК на базе процессоров Motorola.

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

В микросхеме PIC имеется соответствующий регистр масок прерываний IMR (Interrupt Mask Register), в котором маскирование запросов осуществляется единичным значением бита маски.

Дальнейшим развитием механизма масок является использование иерархического подхода к маскированию запросов прерываний. Примерами использования иерархии масок в процессорах фирмы Intel могут служить:

• Маскирование внешних запросов.

Локальные маски для каждого из запросов сосредоточены в регистре IMR микросхемы PIC. Глобальная маска представляет собой флаг разрешения прерываний (IF – Interrupt Flag). Этот флаг относится к флагам управления и занимает соответствующий бит в регистре флагов (FR или FLAG).При установленном флаге разрешается обработка внешних прерываний, при сброшенном – запрещается. С помощью флага IF маскируются только те запросы, которые поступают на вход INTR (INTerrupt Request) процессора. По входу INTR осуществляется связь ЦП с PIC. В свою очередь запросы, поступающие на внешний вход NMI (Non-Maskable Interrupt) – немаскируемое прерывание, принимаются к обслуживанию независимо от состояния флага IF.

• Маскирование особых случаев в МСП.

Во многих литературных источниках сопроцессор, выполняющий операции над числами с плавающей точкой, носит название ”арифметический сопроцессор”, однако, учитывая тот факт, что кроме выполнения арифметических операций над числами с плавающей точкой, он производит также вычисление многих элементарных функций (для этого используются так называемые трансцендентные команды), все-таки правильнее этот сопроцессор называть не арифметическим, а математическим. Математический сопроцессор (МСП) был реализован в виде отдельной микросхемы Intel 80X87 для младших моделей ЦП вплоть до процессора Intel 80386. Начиная с модели Intel 80486 (i 486), МСП был интегрирован в один кристалл с ЦП, в связи с чем приобрел новое название FPU (Floating Point Unit – устройство обработки с плавающей точкой).

В управляющем регистре CR (Control Register) МСП крайние правые 6 бит являются масками особых случаев, к которым относятся:

- недействительная операция;

- денормализованный операнд;

- деление на ноль;

- переполнение порядка;

- исчезновение порядка (антипереполнение);

- потеря точности.

Маскирование особых случаев МСП было реализовано только в самой младшей модели Intel 8087. Для этой цели в регистре CR использовался специальный бит IEM. Начиная с модели Intel 8028, бит IEM как глобальная маска особых случаев МСП/FPU исключен из регистра CR.

Следует также отметить, что маскирование особых случаев МСП/FPU осуществляется единичными значениями битов масок, а при нулевом значении битов прерывания разрешены

Порог прерываний представляет собой собственный приоритет процессора, точнее говоря, уровень приоритета выполняемой им программы. Порог отражается с помощью специального трехбитного поля, находящегося в слове состояний процессора PS (Processor Status).

В интерфейсе Unibus (общая шина), используемом в компьютерах с архитектурой DEC, выделяются специальные линии запросов прерываний от ВУ и линии разрешения прерываний, которые являются однонаправленными. Упрощенная схема подключения ВУ к этим линиям приведена на рис. 2.

Реализация функций на аппаратном и программном уровнях - student2.ru

Рис.2. Схема подключения ВУ к линиям запросов прерываний и разрешения прерываний.

Все ВУ в зависимости от их степени важности (приоритета) подключаются к соответствующей линии запроса прерываний ЗП1, …, ЗПn. Предполагается, что приоритет линии и соответственно ВУ увеличивается с увеличением номера.

В свою очередь, линии разрешения прерываний проходят последовательно через ВУ каждого уровня, что соответствует так называемому цепочному интерфейсу. В CPU имеется специальный блок, называемый арбитром, который выделяет линию с наиболее приоритетным запросом. Если приоритет этой линии выше порога прерываний, то арбитр посылает сигнал разрешения прерывания по соответствующей линии этого уровня. Сигнал разрешения последовательно проходит через ВУ этого уровня и блокируется первым же ВУ, пославшим запрос на линию ЗП. В соответствии с этим, в подобной схеме подключения ВУ реализуется двумерная система приоритетов. Это означает, что приоритет ВУ во-первых зависит от уровня линий ЗП и РП, к которым оно подключается, во-вторых – от степени его электрической близости по линии РП к арбитру.

Функция проверки возможности обработки выделенного запроса центральным процессором реализуется чисто на аппаратном уровне.

Сохранение состояния (контекста) прерываемой программы

Эта функция обычно реализуется с использованием как аппаратного, так и программного уровней. На аппаратном уровне сохраняется лишь минимальная часть контекста, в частности: обязательный адрес возврата и не очень обязательный регистр состояний (флагов). Содержимое остальных регистров процессора, которые могут быть востребованы программой-обработчиком прерываний, сохраняются на программном уровне. Действия, связанные с сохранением этих регистров, составляют начальную фазу программы-обработчика прерываний.

Применительно к процессорам фирмы Intel, исключительно удобной для этих целей (сохранение контекста) является команда PUSHA, по которой сохраняются в стеке все РОНы (8 штук). В процессорах фирмы Intel на аппаратном уровне происходит сохранение в стеке содержимого регистра флагов FR, сегмента кода CS и указателя команды IP. Последняя пара и представляет собой полный адрес возврата.

В тех случаях, когда выход на обработку прерываний сопровождается переключением задач, сохранение всего контекста прерываемой программы (задачи) реализуется на аппаратном уровне с использованием специального системного сегмента TSS – Task State (Status) Segment.

Вызов соответствующего обработчика прерываний

Эта функция реализуется чисто на аппаратном уровне и предполагает загрузку начального адреса обработчика, обычно называемого вектором прерываний, в соответствующие регистры процессора (для процессоров Intel это регистры CS и IP).

Обработка прерывания (выполнение программы-обработчика)

Эта функция реализуется на программном уровне и состоит в выполнении программы – обработка прерывания.

Восстановление состояния (контекста) прерванной программы и возобновление ее выполнения

Эта функция является обратной функции сохранения состояния (контекста) прерываемой программы и выполняется частично на аппаратном и частично на программном уровнях. Аппаратная часть контекста в процессорах фирмы Intel восстанавливается по команде IRET (Interrupt RETurn – возврат из прерывания), которая завершает программу – обработчик прерывания. Действия этой команды состоят в последовательном извлечении из стека IP, CS и FR. Для извлечения РОНов целесообразно использовать команду PDPA.

16. Отличия организации прерываний в реальном и защищенном режимах процессоров семейства Intel 80x86, Pentium.

В реальном режиме процессор старшей модели выполняет программы, составленные для базовой модели Intel 8086 или для реального режима процессоров младших моделей. С точки зрения программиста процессор старшей модели в R-режиме представляет собой более быстрый процессор Intel 8086 с расширением набора команд и регистров до уровня процессора старшей модели.

Основная особенность R-режима состоит в формировании физического адреса на основе простейшей модели сегментированной памяти (как в базовой модели Intel 8086). Физический адрес формируется как сумма двух 16-разрядных компонент, первая из которых представляет собой содержимое одного из сегментных регистров и трактуется как старшая часть базового адреса сегмента, вторая компонента представляет собой внутрисегментное смещение (offset).

Особенности организации прерываний в реальном режиме:

Основными отличиями обработки прерываний в R-режиме по сравнению с базовой моделью Intel 8086 являются:

1. Увеличение числа зарезервированных типов прерываний. К новым типам прерываний в R-режиме относятся:

тип 5 – нарушение границы массива (источником прерывания является специальная команда BOUND – проверка границы);

тип 6 – некорректный код операции;

тип 7 – недоступный сопроцессор;

тип 8 – выход за пределы таблицы векторов прерываний;

тип 13 – выход адреса операнда или команды за пределы сегмента или превышение длины машинной команды максимального предела 15 байт (такое возможно только при некорректном использовании префиксов);

тип 16 – ошибка сопроцессора.

Имеет место при генерации одного из незамаскированных особых случаев математического сопроцессора или блока.

2. Возможность обеспечения рестарта «виновной» команды после обработки прерываний. Это означает, что в качестве адреса возврата в стеке сохраняется именно адрес недовыполненной команды, а не следующей команды программы как в процессоре Intel 8086.

3. Использование для входа в таблицу векторов прерываний регистра IDTR. В реальном режиме базовый адрес этой таблицы инициализируется на начало памяти, т.е. равен нулю. Задаваемый в этом же регистре IDTR предел (limit) используется для проверки возможного выхода обращения за пределы таблицы (прерывание с типом 8).

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

1) трансформация таблицы векторов прерываний в дескрипторную таблицу прерываний (IDT);

2) более сложный процесс перехода к обработчику особого случая или прерывания с привлечением системных объектов в виде шлюзов;

3) передача обработчику прерывания или особого случая дополнительной информации о причине возникновения в виде так называемого кода ошибки (Error Code);

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

В защищенном режиме термином «прерывание» принято обозначать только аппаратные прерывания, в то время как для программных прерываний принято использовать термин «особые случаи» или «исключения» (exception).

В зависимости от способа возникновения особых случаев и возможности перезапуска (рестарта) CPU после их обработки с вызвавшей их команды принято различать три вида особых случаев:

Нарушение (fault) – это особые случаи, которые выявляются и обслуживаются либо перед выполнением, либо во время выполнения «виновной» команды. При обнаружении нарушения, сохраняемые в стек значения CS и EIP указывают на команду, вызвавшую это нарушение, для возможности осуществить рестарт программы после устранения нарушения, связанного с «виновной» командой. Типичными примерами нарушений (отказов) могут служить не присутствие сегмента или страницы.

Ловушка (trap) – это особый случай, который возникает непосредственно после команды, вызвавшей этот особый случай. Значения регистров CS и EIP, сохраняемые в стеке при обрабатывании ловушки, указывают на команду, следующую по отношению к команде, вызвавшей это срабатывание. Типичными примерами ловушек могут служить: ловушка пошагового исполнения программы (ее генератором является установленный флаг ТF), команды-генераторы прерываний (с мнемоникой INT).

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

Дескрипторная таблица прерываний

В отличии от таблицы векторов прерываний, местоположение которой в памяти является строго регламентированным (она находится в младших адресах), IDT, в принципе, может размещаться в любом месте линейного адресного пространства, однако, как правило, для сохранения преемственности ее также располагают в младших адресах. Локализация IDT в линейном адресном пространстве и ее допустимый размер задаются содержимым системного регистра IDTR (этот регистр, так же как и GDTR является 48-разрядным: 32 бита – Base, 16 бит – Limit). Максимальный размер IDT должен быть рассчитан на 256 типов прерываний и составляет 2 Ki байта. В свою очередь минимальный размер IDT должен быть рассчитан по крайней мере на 32 зарезервированных типов прерываний. Элементами IDT являются 8-байтные дескрипторы, представляющие собой системные объекты в виде шлюзов.


Мнемоническое обозначение Наименование Причины Вид особого случая / прерывания Формирование кода ошибки Класс особого случая/ прерывания
#DE (Divide Error) Ошибка деления Команды DIV/IDIV Нарушение Нет В
#DB (Debug) Отладка Пошаговый режим(TF=1); контрольные точки останова Нарушение/ ловушка Нет А
- Немаскируемое прерывание Внешний сигнал NMI Прерывание Нет А
#BP (Break Point) Точка останова Команда INT 3 Ловушка Нет А
#OF (Overflow) Переполнение Команда INTO при OF=1 Ловушка Нет А
#BR (BOUND Range Exceeded) Выход за границы (нарушение контроля диапазона) Команда BOUND Нарушение Нет А
#UD (Undfined Opcode) Недопустимый код операции Неверный код операции или адрес Нарушение Нет А
#NM (No Math Coprocessor) Сопроцессор недоступен Команда сопроцессора (FPU) при EM=1 или TS=1 Нарушение Нет А
#DF (Double Fault) Двойное нарушение (двойная ошибка) При обработке одного нарушения появляется другое Авария Да (0) -
Не используется
#TS (Invalid TSS) Ошибочный TSS Переключение задачи с некорректным TSS Нарушение Да В
#NP (segment Not Present) Отсутствие сегмента Обращение к дескриптору сегмента, в котором Р=0 (кроме сегмента стека) Нарушение Да В
#SS (Stack Segment Fault) Нарушение стека Некорректность при обращении к сегменту стека: отсутствие сегмента, выход за пределы сегмента и т.п. Нарушение Да В
#GP (General Protection) Нарушение общей защиты (основное нарушение защиты) Все случаи нарушения защиты, не входящие в #TS, #NP, #SS, #PF Нарушение Да В
# PF (Page Fault) Страничное нарушение Попытка обращения к неприсутствующему каталогу или странице, а также нарушение правил защиты на страничном уровне Нарушение   Да С
Не используется
#MF (Math Fault) Ошибка сопроцессора (FPU) Различные виды ошибок при работе FPU (6 типов) Нарушение Нет А
#AC (Alignment Check) Нарушение контроля выравнивания Нарушение правил выравнивания операндов на целочисленную границу (проверка реализуется при АС=1 (EFLAGS) и АМ=1 (CRO)) Нарушение Да (0) А
#MC (Machine Check) Нарушение машинного контроля Возникновение аппаратных ошибок, контролируемых средствами машинного контроля: ошибки обращения к системной шине; при обращении к памяти; контроля четности при передаче адреса или данных; кэш-памяти, в том числе TLB Авария Нет А
#XF (XMM Fault) Нарушение в блоке XMM (SSE – Streaming SIMD Extension) Ошибки при обработке операндов с плавающей точкой, такие же как в блоке FPU (6 видов) Нарушение Нет А

Виды особых случаев и прерываний Р-режима

17. Программируемый контроллер прерываний (PIC), его назначение, функции, взаимодействие с ЦП.

В современных компьютерах на базе процессоров Intel используются две микросхемы PIC, объединенные с помощью так называемого каскадного включения, что позволяет, в принципе, обслужить до 15 источников прерываний. В реальном подключении их меньше. Одна из микросхем PIC является ведущей, а другая – ведомой. Ведущий PIC непосредственно связан с CPU, а ведомый PIC – только с ведущим.

Основные функции PIC:

1) Фиксация запросов прерываний, поступающих в PIC от ВУ в специальном регистре запросов, IRR/

2) Осуществление внутреннего маскирования запросов с помощью специального регистра маски IMR (нулевое значение бита маски является разрешением запроса, а единичное – запретом).

3) Выделение наиболее приоритетного запроса из всех поступивших и не замаскированных.

4) Выдача в CPU сигнала о наличии хотя бы одного незамаскированного запроса прерывания.

5) Выдача в CPU номера (кода) запроса в цикле подтверждения прерывания. Этот номер модифицируется CPU в начальный адрес обработчика прерываний для выделенного ВУ.

6) Возможность изменения приоритетов запросов прерываний.

Структура PIC:

Структура PIC приведена на рис. 3 и включает в себя следующие байтные регистры:

• IRR – регистр запросов прерываний - связан с внешними входами запросов (IRQ0 – IRQ7);

• IMR – регистр маски запросов;

• ISR– Interrupt Service Register – регистр обслуживаемых запросов;

• ICW1 - ICW3 – Initialization Control Word – слова управления инициализацией (приказы инициализации);

• OCW1- OCW3 - Operation Control Word – слова управления операциями (рабочие приказы).

Слово управления операциями OCW1 фактически представляет собой регистр маски запросов IMR.

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

Сигналы CAS0-CAS2 используются для реализации каскадирования микросхем PIC. Для выделения адресов, относящихся к PIC, используется декодер (дешифратор) адреса – DCA. Сигнал CS (Chip Select – выбор кристалла) генерируется на его выходе в том случае, если на внешней шине адреса (АВ) зафиксированы адреса, относящиеся к контроллеру прерываний.

Реализация функций на аппаратном и программном уровнях - student2.ru

Рис. 3. Упрощенная структурная схема PIC

В целях разделения действий PIC для четных и нечетных адресов в блок управления с шины адреса поступает младший бит адреса А0.

Программирование контроллера прерываний осуществляется по стандартным адресам портов ввода / вывода.

Взаимодействие PIC с CPU осуществляется по двум линиям:

• линия запроса прерывания направлена от PIC к CPU;

• линия подтверждения прерывания направлена от CPU к PIC.

Порядок взаимодействия между CPU и PIC:

1. При наличии хотя бы одного незамаскированного запроса прерываний PIC выставляет активный уровень выходного сигнала INT, который поступает на вход INTR CPU.

2. CPU завершает текущую команду программы и проверяет состояние внешних входов, в том числе и INTR.

3. Если флаг IF установлен (внешние прерывания от PIC разрешены), процессор генерирует активный уровень выходного сигнала INTA (INTerrupt Answer – подтверждение прерывания). При сброшенном флаге IF обработка внешнего запроса прерывания временно откладывается, в частности, до выполнения процессором специальной команды STI – SeT Interrupt – разрешение прерывания, действие которой сводится к установке флага IF.

4. При получении сигнала INTA PIC выполняет следующие действия:

а) сбрасывает бит запроса, принятого к обслуживанию, в IRR;

б) устанавливает бит обрабатываемого запроса в регистре ISR;

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

5. CPU принимает номер запроса от PIC по шине данных и модифицирует этот номер в адрес соответствующего вектора прерываний (модификация номера в адрес осуществляется путем умножения номера на 4).

6. Текущее значение регистра флагов, сегмента кода (CS) и указателя команды (IP) помещаются в стек, и тем самым сохраняется минимальный контекст прерываемой программы.

7. Два последовательных слова из таблицы векторов прерываний загружаются в регистр IP (слово по меньшему адресу) и CS (слово по большему адресу), тем самым настраивая CPU на выполнение первой команды программы-обработчика прерывания.

8. На аппаратном уровне производится сброс флага IF в целях временного запрещения поступления других запросов от PIC.

9. Процессор переходит к выполнению программы-обработчика соответствующего прерывания.

Описанная выше последовательность действий является типичной для базовой модели процессора Intel 8086, либо для старших моделей, функционирующих в R-режиме (реальном режиме). Процессор определяет, в каком режиме он функционирует, с помощью специального бита PE.

18. Система ввода-вывода: назначение, функции, программные и аппаратные составляющие. Аппаратные интерфейсы: их классификация, стандартные интерфейсы современных компьютеров.

Наши рекомендации