Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР СПО(231000)(ПР инж) 12.docx
Скачиваний:
4
Добавлен:
01.04.2025
Размер:
156 Кб
Скачать
☆

2. Краткие теоретические сведения

Прерывания и особые ситуации, возникающие при работе процессора Pentium, из­меняют нормальное выполнение задачи, в результате чего выполняется обработка внешних событий, ошибок или особых случаев. Различие между прерываниями и особыми ситуациями состоит в том, что прерывания обрабатывают внешние собы­тия, а особые ситуации являются реакцией на ошибки, возникающие при выполне­нии команд. Хотя прерывание n может вызываться в программе командой INT n, процессор рассматривает такое программное прерывание как особую ситуацию.

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

промахи — обнаруживаются перед выполнением команды при отсутствии нужной страницы или сегмента в памяти. Для обработки этой особой ситуации ОС должна выбрать страницу или сегмент с диска, после чего процессор повторяет вы­полнение прерванной команды;

ловушки — немедленно выполняются после выполнения команды;

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

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

Процессор Pentium способен обрабатывать до 256 различных прерываний. Адреса подпрограмм обработки этих прерываний находятся в таблице векторов прерываний. В реальном режиме векторы хранятся в таком же виде, как и векторы прерываний процессора 8086. В защищенном режиме вектор имеет размер 8 байт и находится в специальной таблице дескрипторов прерываний.

Из 256 возможных прерываний 32 зарезервированы для использования фирмой Intel, остальные предназначены для программ.

Обработка прерываний в общем виде происходит подобно обработке прерываний процессором 8086, хотя механизм вызова подпрограммы обработки прерывания в защищенном режиме имеет свои особенности.

Номер вектора прерывания может поступать в процессор при аппаратном преры­вании из команды INT или генерироваться подсистемой обработки особых ситуаций.

Маскируемые прерывания — наиболее общий способ, используемый процессором Pentium для ответа на внешние события, поступающие от аппаратных средств. Аппа­ратное прерывание происходит, когда бит IF флага прерываний разблокирован (ус­тановлен в 1). Процессор реагирует на маскируемые прерывания только между вы­полнением команд. Строковые команды имеют «окна прерываний» между обращения­ми к памяти, что делает возможным прерывание во время обработки длинной стро­ки. Когда происходит прерывание, процессор считывает восьмибитовый вектор, при­сылаемый аппаратурой (один из 224 определяемых пользователем прерываний). Бит IF в регистре EFIags сбрасывается при переходе к обработке прерывания, чтобы предотвратить обработку других прерываний. Однако IF может быть установлен обработчиком прерываний, чтобы позволить вложение прерываний. Команда IRET вос­станавливает начальное состояние IF, выталкивая из стека флаговый регистр.

Немаскируемые прерывания обеспечивают обслуживание прерываний очень вы­сокого приоритета. Одним из примеров немаскируемых прерываний (NMI) может служить прерывание по сбою питания. При обработке NMI процессор Pentium не об­рабатывает ни возникающие NMI, ни команды INT до тех пор, пока не выполнена команда возврата из прерывания (IRET) или пока не выполнен общий сброс про­цессора. Если во время обработки одного немаскируемого прерывания произойдет еще одно NMI, то После выполнения команды IRET процессор переходит к его обра­ботке. Бит IF в начале обработки NMI всегда сбрасывается в 0.

Третьим типом прерываний для Pentium являются программные прерывания. Как и в процессоре 8086, вызов программных прерываний осуществляется при выполне­нии команды INT n, после которой процессор переходит к выполнению программы обработки прерывания, на которую указывает вектор n в таблице векторов прерываний.

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

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

Перезапуск коман­ды гарантируется всегда, за исключением двух случаев:

команда вызывает переключение задачи в TSS, который расположен в отсутствующей странице;

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

Двойными ошибками называются случаи возникновения особой ситуации во время выполнения процессором обработки особой ситуации, возникшей ранее. Такие ситуации соответствуют прерыванию уровня 8. Большинство прерываний, кроме де­ления на 0 (прерывание 0) и сегментные ошибки (прерывания 10, 11, 12, 13), может приводить к двойным ошибкам.

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

Для обработки прерываний в реальном режиме процессор использует таблицу векторов прерываний. Эта таблица располагается в самом начале оперативной памяти, т.е. её физический адрес - 00000. Таблица векторов прерываний реального режима состоит из 256 элементов по 4 байта, таким образом её размер составляет 1 килобайт. Элементы таблицы - дальние указатели на процедуры обработки прерываний. Указатели состоят из 16-битового сегментного адреса процедуры обработки прерывания и 16-битового смещения. Причём смещение хранится по младшему адресу, а сегментный адрес - по старшему.

Когда происходит программное или аппаратное прерывание, текущее содержимое регистров CS, IP а также регистра флагов FLAGS записывается в стек программы (который, в свою очередь, адресуется регистровой парой SS:SP). Далее из таблицы векторов прерываний выбираются новые значения для CS и IP, при этом управление передаётся на процедуру обработки прерывания.

Перед входом в процедуру обработки прерывания принудительно сбрасываются флажки трассировки TF и разрешения прерываний IF. Поэтому если ваша процедура прерывания сама должна быть прерываемой, вам необходимо разрешить прерывания командой STI. В противном случае, до завершения процедуры обработки прерывания все прерывания будут запрещены.

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

Что же касается аппаратных маскируемых прерываний, то в компьютере IBM AT и совместимых с ним существует всего шестнадцать таких прерываний, обозначаемых IRQ0-IRQ15. В реальном режиме для обработки прерываний IRQ0-IRQ7 используются вектора прерываний от 08h до 0Fh, а для IRQ8-IRQ15 - от 70h до 77h.

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

Обычное прерывание инициируется командой INT (программное прерывание) или внешним событием (аппаратное прерывание). Перед передачей управления процедуре обработки обычного прерывания флаг разрешения прерываний IF сбрасывается и прерывания запрещаются.

Исключение происходит в результате ошибки, возникающей при выполнении какой-либо команды, например, если команда пытается выполнить запись данных за пределами сегмента данных или использует для адресации селектор, который не определён в таблице дескрипторов. По своим функциям исключения соответствуют зарезервированным для процессора внутренним прерываниям реального режима. Когда процедура обработки исключения получает управление, флаг IF не изменяется. Поэтому в мультизадачной среде особые случаи, возникающие в отдельных задачах, не оказывают влияния на выполнение остальных задач.

В защищённом режиме прерывания могут приводить к переключению задач. Задачи и мультизадачность будут рассмотрены позже.

3. Оборудование

4. Задание на работу

Изменить программу, приведенную в приложении, в соответствии с заданием, выданным преподавателем.

5. Содержание отчета

6. Контрольные вопросы

  1. Что такое ловушки?

  2. Что такое ошибки?

  3. Что такое промахи?

  4. Что может вызвать общую ошибку защиты?

  5. Какая таблица отражает правильное распределение приоритетов прерываний или особых ситуаций?

  6. Какой формат имеет вентиль исключения?

  7. Какая последовательность из приведенных позволит программе корректно организовать обработку прерываний в защищенном режиме?

  8. Для какого из приведенных исключений нельзя проанализировать код ошибки?

  9. Какое из приведенных ниже исключений обладает свойством повторной запускаемости?

  10. Какие особые ситуации не используются в реальном режиме?