Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SysSoft.doc
Скачиваний:
520
Добавлен:
16.03.2016
Размер:
4.36 Mб
Скачать

Система прерываний 32-разрядных микропроцессоровi80x86

В микропроцессорах семейства i80x86 система прерываний построена таким образом, чтобы, с одной стороны, обеспечить возможность создавать эффектив­ные и надёжные мультипрограммные операционные системы, которые должны функционировать в защищённом режиме, а с другой стороны – обеспечить воз­можность выполнять программы, разработанные для реального режима. Рас­смотрим коротко оба режима.

Работа системы прерываний в реальном режиме работы процессора

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

Итак, каждый вектор прерываний состоит из 4 байтов или 2 слов; первые два содержат новое значение для регистра IP, а следующие два – новое значение регистраCS.Таблица векторов прерыванийзанимает 1024 байта. Таким образом, в ней может быть задано 256 векторов прерываний. В процессореi8086 эта таб­лица располагается на адресах 00000-003FFH. Расположение этой таблицы в про­цессорах i80286 и старше определяется значением регистраIDTR–InterruptDescriptorTableRegister. При включении или сбросе процессораi80x86 этот ре­гистр обнуляется. Однако при необходимости можно в регистре IDTR указать смещение и, таким образом, перейти на новую таблицу векторов прерываний.

Таблица векторов прерываний заполняется (инициализируется) при запуске сис­темы, но в принципе может быть изменена или перемещена.

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

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

В IBMPC, как и в других вычислительных системах, прерывания бывают двух видов: внутренние и внешние.

Внутренние прерывания,как мы уже знаем, возникают в результате работы про­цессора. Они возникают в ситуациях, которые нуждаются в специальном обслу­живании, или при выполнении специальных инструкций – INT илиINT0. Это следующие прерывания:

 прерывание при делении на ноль; номер прерывания – 0;

 прерывание по флагу TF(trapflag1). В этом случае прерывание обычно ис­пользуется специальными программами отладки типаDEBUG. Номер прерыва­ния – 1;

 инструкции INT(interrupt– выполнить прерывание с соответствующим но­мером) иINT0 (interruptifoverflow– прерывание по переполнению). Эти пре­рывания называются программными.

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

Внешние прерываниявозникают по сигналу какого-нибудь внешнего устройства. Существуют два специальных внешних сигнала среди входных сигналов процес­сора, при помощи которых можно прервать выполнение текущей программы и тем самым переключить работу центрального процессора. Это сигналыNMI(nomaskinterrupt, немаскируемое прерывание) иINTR(interruptrequest, запрос на прерывание). Соответственно, внешние прерывания подразделяются на немаскируемые и маскируемые.

Маскируемые прерываниягенерируются контроллером прерываний по заявке определенных периферийных устройств2. Контроллер прерываний (его обозна­чение – i8259A)поддерживает восемь уровней (линий) приоритета; к каждому уровню «привязано» одно периферийное устройство1. Маскируемые прерывания часто называют ещё аппаратными прерываниями. В ПК, начиная сIBMPCAT, построенных на базе микропроцессора i80286, используются два контроллера прерываний i8259A; они соединяются каскадным образом. Схема последователь­ного соединения этих контроллеров изображена на рис. 3.12.

Таким образом, на IBMPCATпредусмотрено 15 линийIRQ2, часть которых ис­пользуется внутренними контроллерами системной платы, а остальные заняты стандартными адаптерами либо не используются. Ниже перечислены линии запроса на прерывание, которые мы приводим потому, что каждый специалист по вычислительной технике должен знать основные стандарты ПК. Итак, линииIRQ:

0 – системный таймер;

1 – контроллер клавиатуры;

2 – сигнал возврата по кадру (EGA/VGA), наATсоединен сIRQ9;

3 – обычно СОМ2/СОМ4;

4 – обычно СОМ1/СОМ3;

5 – контроллер HDD(на первых компьютерахIBMPCXT), обычно свободен наIBMPCATи используется звуковой картой;

6 – контроллер FDD;

7 – LPT1, многими LPT-контроллерами не используется;

8 – часы реального времени с автономным питанием (RTC–realtimeclock);

9 – параллельна IRQ2;

10 – не используется, то есть свободно;

11 – свободно;

12 – обычно контроллер мыши типа PS/2;

13 – математический сопроцессор;

14 – обычно контроллерIDE0 (первый канал);

Рис. 3.12.Каскадирование контроллеров прерывания

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

1 В стек помещается регистр флагов PSW.

2 Флаг включения/выключения прерываний IFи флаг трассировкиTF, находящиеся в регистре PSW, обнуляются для блокировки других маскируемых прерываний и исключения пошагового режима исполнения команд.

3 Значения регистров CSиIPсохраняются в стеке вслед за PSW.

4 Вычисляется адрес вектора прерывания, и из вектора, соответствующего номеру прерывания, загружаются новые значения IPи CS.

Когда системная подпрограмма принимает управление, она может снова разрешить маскируемые прерывания командой STI(setinterruptflag, установить флаг прерываний), которая переводит флагIFв состояние 1, что разрешает микропроцессору вновь реагировать на прерывания, инициируемые внешними устрой­ствами, поскольку стековая организация позволяет вложение прерываний друг в друга.

Закончив работу, подпрограмма обработки прерывания должна выполнить инст­рукцию IRET (interrupt return),которая извлекает из стека три 16-битовых значения и загружает их в указатель команд IP,регистр сегмента команд CSи регистрPSWсоответственно. Таким образом, процессор сможет продолжить работу с того места, где он был прерван.

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

1 Контроллер прерываний получает заявку от определенного периферийного устройства и, соблюдая схему приоритетов, генерирует сигнал INTR(inter­ruptrequest), который является входным для микропроцессора.

2 Микропроцессор проверяет флаг IFв регистре PSW. Если он установлен в 1, то переходим к шагу 3. В противном случае работа процессора не прерывает­ся. Часто говорят, что прерывания замаскированы, хотя правильнее говорить, что они отключены. Маскируются (запрещаются) отдельные линии запроса на прерывания посредством программирования контроллера прерываний.

3 Микропроцессор генерирует сигнал INTA(подтверждение прерывания). В от­вет на этот сигнал контроллер прерывания посылает по шине данных номер прерывания. После этого выполняется описанная нами ранее процедура пере­дачи управления соответствующей программе обработки прерывания.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]