- •Общие требования к выполнению лабораторных работ Содержание отчета
- •3. Оборудование
- •4. Задание на работу
- •3. Оборудование
- •4. Задание на работу
- •3. Оборудование
- •4. Задание на работу
- •3. Оборудование
- •4. Задание на работу
- •Страничная организация памяти
- •1. Цель работы
- •2. Краткие теоретические сведения
- •3. Оборудование
- •4. Задание на работу
- •5 Контрольные вопросы
- •Защищенный режим процессора. Обработка исключений
- •1. Цель работы
- •2. Краткие теоретические сведения
- •Защищенный режим процессора. Многозадачность
- •1. Цель работы
- •2. Краткие теоретические сведения
- •Процессы и потоки в Windows
- •1. Цель работы
- •Краткие теоретические сведения
- •Структура сервиса
- •Дополнительная
- •Периодические издания
- •Программное обеспечение и Интернет-ресурсы
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. Контрольные вопросы
Что такое ловушки?
Что такое ошибки?
Что такое промахи?
Что может вызвать общую ошибку защиты?
Какая таблица отражает правильное распределение приоритетов прерываний или особых ситуаций?
Какой формат имеет вентиль исключения?
Какая последовательность из приведенных позволит программе корректно организовать обработку прерываний в защищенном режиме?
Для какого из приведенных исключений нельзя проанализировать код ошибки?
Какое из приведенных ниже исключений обладает свойством повторной запускаемости?
Какие особые ситуации не используются в реальном режиме?
