XI.Система прерываний. XI. система прерываний компьютера. Основные понятия
Скачать 210.5 Kb.
|
XI. СИСТЕМА ПРЕРЫВАНИЙ КОМПЬЮТЕРА. Основные понятия. Во время выполнения компьютером текущей программы, внутри компьютера, а также во внешней среде, связанной с ним (клавиатура, дисплей, внешняя память, технологические и научно-исследовательские процессы, управляемые компьютером и т.д.) могут возникать события, требующие немедленной реакции на них с его стороны. Реакция компьютера заключается в том, что он прерывает обработку текущей программы и переходит к выполнению некоторой другой программы (подпрограммы, процедуры), специально предназначенной для выполнения требований, запрашиваемых данным событием. Процесс выполнения такой подпрограммы называется обработкой (обслуживанием) данного прерывания, а сама подпрограмма обслуживания прерывания часто называется обработчиком прерывания. Итак: Прерыванием называется процесс, обуславливающий реакцию компьютера на некоторое событие, требующее немедленного его вмешательства. Запрос прерывания – есть сигнал процессору о появлении события, требующего немедленной реакции процессора путем перехода на подпрограмму обслуживания этого события. Системой прерывания называется комплекс аппаратных и программных средств, обеспечивающих выявление запросов прерывания и эффективное их обслуживание. Процесс прерывания схематически иллюстрирован на рис XI.1. Основными функциями системы прерывания являются следующие. 1. Запоминание состояния процессора, которое определяется состоянием его основных регистров на момент прерывания текущей программы. 2. Осуществление передачи управления на процедуру обслуживания прерывания. 3. Восстановление состояния процессора после окончания выполнения процедуры обслуживания прерывания. 4. Передача управления на продолжение выполнения текущей программы. Таким образом, после появления запроса прерывания и возможности осуществления самого процесса прерывания, процессор прерывает выполнение текущей программы, автоматически запоминая в стеке адрес возврата (CS и IP), а также содержимое регистра флагов Flags. В стек может, также, передаваться и сохраняться содержимое тех регистров, которые могут понадобиться при исполнении процедуры обслуживания прерывания и, следовательно, могут быть искажены. Рис.XI.1 Схема процесса прерывания программ. Однако, если содержимое CS, IP (адрес возврата), и Flags записываются в стек автоматически, то для записи в стек содержимого, требующихся при исполнении процедуры обслуживания прерывания регистров, об этом должен позаботиться сам пользователь (процессор ведь не знает, что может потребоваться). Поэтому пользователь должен включить в начале процедуры обслуживания прерывания, команды сохранения в стеке этих регистров, а в конце процедуры – команды восстановления содержимого их, путем считывания из стека. 2. Классификация типов прерывания. Запросы на прерывание могут возникать как внутри самого процессора, так и со стороны внешней среды (периферийных устройств). Поэтому можно выделить сразу же два класса типов прерываний. 1. Внешние прерывания. 2. Внутренние прерывания. Схематически, источники прерываний программ, применительно к процессорам семейства Х86 иллюстрированы на рис.XI.2. Рис.XI.2 Источники прерываний микропроцессоров семейства Х86. Здесь: INTi (Interrupt i) – i-ый источник (тип) запроса прерывания от внешних устройств; NMI (Nonmaskable Interrupt) – немаскируемое прерывание, т.е. прерывание, которое нельзя замаскировать; INTR (Interrupt) – общий запрос на прерывание процессора; INTA (Interrupt Acknowledge) – подтверждение процессором получения запроса прерывания, и готовность принятия кода типа прерывания. Внешние прерывания Внешние прерывания относят к так называемым аппаратным прерываниям, поскольку они вызываются аппаратурой, находящейся вне пределов самого компьютера. Внешние прерывания подразделяются на: а) маскируемые прерывания, б) немаскируемые прерывания. Маскируемые прерывания. Маскируемыми – называются такие прерывания, запросы которых могут быть выключены из зоны внимания процессора, путем наложения маски на возможные запросы прерываний. Запросы маскируемых прерываний, в отличие от остальных, поступают на систему прерываний процессора через специальное устройство, называемое контроллером прерываний, который в современных процессорах входит в состав микросхемы «южного моста» Chipset, размещаемой на системной плате компьютера. Основные функции контроллера прерываний заключаются в том, что с его помощью можно: - вследствие различной важности устройств, которые могут запрашивать прерывания у компьютера, устанавливать запросам прерывания определенный уровень приоритета, при котором очередность их обработки осуществляется строго в порядке присвоенной им приоритетности. Это дает возможность запросу с большим уровнем приоритета прерывать исполнение процедур обслуживания прерывания от устройств с меньшим уровнем приоритета; - устанавливать определенный порядок обслуживания запросов прерываний одного уровня привилегий, при одновременном их появлении; - дать возможность пользователю, при необходимости, запрещать компьютеру, реагировать на запросы прерывания внешних устройств, как всех одновременно, так и по отдельности для каждого устройства (т.е. выполнять так называемое маскирование запросов прерывания). Запрещение или разрешение индивидуальных запросов прерываний реализуется при помощи использования в контроллерах прерываний кода маски. Маска представляет собой двоичный код, каждый разряд которого соответствует некоторому запросу прерывания. Обычно устройство маскирования делают таким образом, чтобы логическая единица, записанная в разряд маски, запрещала прохождение соответствующего запроса прерывания к процессору, а логический ноль – разрешала. Иллюстрация процесса маскирования запросов прерывания приведена на рис.XI.3. Рис.X.3 Иллюстрация принципа маскирования запросов прерывания. Заметим при этом, что маскируемые прерывания, все вместе одновременно, могут быть запрещены или разрешены, путем установки или сброса флага IF в регистре флагов процессора, подачей соответствующих команд STI или CLI. Немаскируемые прерывания. Запросы немаскируемых прерываний подаются на специально выделенный вход NMI. Они запрещены быть не могут. Источниками запросов таких прерываний являются, например, устройства контроля пропадания напряжения питания или контроля повреждения каких-либо особо важных систем обработки. Все внешние прерывания асинхронны по отношению к работе процессора, так как они могут появиться в любой момент времени. И, поскольку начало передачи управления на подпрограмму обработки прерывания происходит только после окончания исполнения команды, то время реакции, т.е. запаздывания начала обслуживания по отношению к появлению запроса прерывания, может быть, при выполнении, например, команд умножения или деления, достаточно велико. Внутренние прерывания. Внутренние прерывания образуются внутри компьютера по запросам его отдельных функциональных узлов, или как следствие выполнения некоторых специальных команд INT N. Внутренние прерывания замаскированы быть не могут. Код типа прерываний такого рода формируется автоматически при поступлении соответствующего запроса внутреннего прерывания. Внутренние прерывания бывают двух типов: а) особые случаи или исключения; б) программные прерывания. Особые случаи или исключения. Особые случаи или исключения – это прерывания, которые возникают при аномальной ситуации, сложившейся при выполнении конкретной команды и препятствующей нормальному продолжению программы. К прерываниям – особым случаям (исключениям), относятся, например, такие ситуации: - ошибка деления (частный случай – деление на 0); - переполнение разрядной сетки после выполнения очередной команды; - неразрешенный код команды; - пошаговое прерывание, которое включается при установке в состояние 1 флага TF в регистре флагов Flags. При этом после выполнения каждой команды программы, в стеке автоматически запоминается состояние CS, IP, Flags и выводится на экран дисплея состояние всех регистров процессора и части ячеек ОЗУ. После этого процесс выполнения текущей программы останавливается и ожидается следующий запуск программы для выполнения очередного шага; и т.п. Программные прерывания. Под программными прерываниями понимаются прерывания, инициируемые самой выполняемой программой, а именно, командами типа INT N, где N – номер прерывания в некотором заданном диапазоне. Действие этих прерываний весьма похожи на вызов подпрограмм (процедур), за исключением того, что передача управления осуществляется не по адресу, указываемому в команде CALL, а по номеру (типу) прерывания, по которому в таблице векторов прерывания находится адрес передачи управления. Кроме того, при программном прерывании обязательно автоматически запоминается в стеке состояние регистра флагов Flags. Программные прерывания отличаются от других тем, что они задаются заранее и определены в программе, а не являются случайными по отношению к работе компьютера. Они широко используются при вызове системных функций DOS и BIOS. Основные характеристики систем прерывания. К основным характеристикам систем прерывания относятся. а) Общее количество типов запросов прерывания (входов в систему прерывания). б) Время реакции – интервал времени между появлением запроса прерывания и началом выполнения действий по обслуживанию прерывания. в) Издержки прерывания – затраты времени на переключение программ (см. рис.XI.4). Рис.XI.4 Временная диаграмма процесса прерывания программ. Здесь: tр – время реакции, интервал времени, требующийся для окончания текущей команды или такта. Оно зависит как от момента появления запроса прерывания, так и от времени выполнения текущей команды. Сюда же входит время обнаружения запроса прерывания. tз – время запоминания, интервал времени, требующийся для запоминания состояния прерванной программы, т.е. запоминания состояния регистров CS, IP, Flags. Если требуется запомнить в стеке состояние других регистров процессора, это необходимо предусмотреть самим пользователем в начале самой процедуры обработки прерывания. tпроц – время выполнения собственно процедуры обслуживания прерывания. tв – время восстановления состояния прерванной программы, интервал требующийся для выборки из стека и восстановления в исходное состояние регистров CS, IP и Flags. Интервал времени tз + tв = tизд , т.е. время, затрачиваемое на переключение программ, обычно называют издержками прерывания. tобсл – время обслуживания, интервал времени, требующийся для полного обслуживания данного запроса прерывания. г) Глубина прерывания – максимальное число программ, которые могут прерывать друг друга (см. рис.ХI.5). Если после перехода к процедуре обслуживания прерывания и вплоть до ее окончания прием других запросов запрещается, то говорят, что система прерываний имеет глубину прерывания равную 1. Глубина прерывания равна n, если допускается последовательное прерывание до n программ. Последовательность прерывания программ определяется заданными уровнями их приоритетов. Глубина системы прерывания обычно совпадает с числом уровней приоритета в системе прерываний. Рис ХI.5 Иллюстрация работы систем прерывания с различной глубиной прерывания, (во втором случае наивысший приоритет – у запроса прерывания 3, низший – у запроса прерывания 1). д) Насыщение системы прерываний – насыщением системы прерывания называется ситуация, когда запрос прерывания окажется необслуженным к моменту прихода нового запроса от того же источника (этот случай обозначен пунктиром). В этом случае, предыдущий запрос прерывания от того же источника будет утрачен, что недопустимо. Поэтому быстродействие компьютера, характеристики системы прерывания, число источников прерывания и частота возникновения запросов должны быть согласованы таким образом, чтобы насыщение было невозможным. 4. Классификация систем прерывания. Идентификация запросов прерывания (определение источников запросов) в системах прерывания может осуществляться двумя основными способами: способом опроса (Polling) и векторным способом. В связи с этим и системы прерывания могут быть реализованы двух типов: 1. Системы прерывания с опросом источников прерывания (Polling). 2. Векторные системы прерывания. Следует, однако, заметить, что в современных компьютерах системы прерывания строятся как комбинированные системы, поскольку они могут работать как в режиме опроса, так и в режиме векторного запроса, причем режим опроса используется сейчас довольно редко. Для упрощения понимания рассмотрим эти режимы по отдельности. Системы прерывания с опросом – поллинг (polling). Системы прерывания с опросом характерны тем, что опрос процессором состояний входов запросов прерывания осуществляется в удобное для него время (например, в промежутках между выполнением программ). Отсюда следует, что главным отличием систем прерывания с опросом является то, что инициатива идентификации и обслуживания запросов прерываний от периферийных устройств, принадлежит процессору. Различают две разновидности режима опроса: а) программный поллинг; б) аппаратный поллинг. а) Программный поллинг. При программном поллинге запросы прерывания опрашиваются программно, так же программно определяется порядок их опроса и их обслуживания. Схема алгоритма реализации программного поллинга приведена на рис ХI.6. Появление самих запросов прерывания фиксируется в специальном регистре, так называемом регистре обслуживаемых запросов прерываний, разряды которого часто именуются «флагами», аналогично разрядам регистра Flags процессора. Регистр обслуживаемых запросов прерываний находится в контроллере прерываний, который, в свою очередь, как уже упоминалось выше, в современных процессорах входит в состав «южного» моста Chipset. Приход запроса прерывания устанавливает соответствующий ему бит этого регистра в состояние 1 (устанавливает «флаг» появления запроса). Рис ХI.6 Блок-схема алгоритма реализации программного поллинга. б) Аппаратный поллинг. При аппаратном поллинге, определение порядка обслуживания запросов прерывания осуществляется аппаратным образом. Например, используя схему соединения запрашивающих прерывание устройств в виде гирляндной цепи (рис XI.7). Рис XI.7. Схема реализации аппаратного поллинга. При этом линия сигнала запроса прерывания INTR# является общей для всех устройств, а линия сигнала подтверждения прерывания INTA соединяет устройства таким образом, что сигнал проходит через каждое из них по очереди. Таким образом, когда появляется сигнал запроса прерывания INTR# от одного или нескольких устройств, то генерируемый процессором сигнал подтверждения получения сигнала запроса прерывания и согласия на его обработку INTA, проходит последовательно через все устройства. Первым этот сигнал получает устройство 1. Если обслуживание ему не требуется, он пересылает сигнал устройству 2. Если же устройство 1 запрашивало прерывание и ждет ответа, оно блокирует сигнал INTA и сообщает свой идентификационный код на линии данных. Таким образом, в данной схеме соединения устройств, наивысший приоритет имеет устройство, которое ближе всего расположено к процессору с точки зрения схемы подключения. Векторные системы прерывания. В случае векторных систем прерывания (основных у современных процессоров) инициатива принадлежит устройству, запрашивающему прерывание. Аналогично аппаратному поллингу, при поступлении в систему хотя бы одного запроса, процессору выставляется сигнал общего прерывания – INTR. Однако, процессор, принудительно проверяет состояние этого сигнала в конце каждого машинного цикла исполнения очередной команды. Если INTR=1, и процессору разрешено прерывание (флаг IF=1), он заканчивает выполнение текущей команды и подтверждает прием запрашиваемого прерывания путем подачи на контроллер прерывания сигнал INTA (Interrupt Acknowledge). Получив сигнал INTA, контроллер выдает процессору код типа прерывания (номер прерывания), по которому процессор определяет логический адрес начала процедуры обслуживания прерывания и, который, обычно, называется вектором прерывания (см. рис ХI.8). Поскольку полный логический адрес для процессоров i8086/88, а также для всех последующих моделей процессоров семейств Х86, Pentium и Intel Core в реальном режиме работы состоит из четырех байт (два байта – указатель базового адреса сегмента и два байта – смещение в данном сегменте), то вектора прерываний являются 4-х байтовым двоичным словом. Вектора прерываний в защищенном режиме работы всех современных компьютеров семейств Х86, Pentium, Intel Core 2, 3, 5, 7 имеют размер 8 байт, поскольку они определяют специальные 8-ми байтовые структуры – дескрипторы, из которых находятся начальные физические адреса, соответствующих процедур обслуживания прерываний. И в том и в другом случае всего определено 256 типов прерываний и, следовательно, любое возможное прерывание определяется 8-ми разрядным двоичным кодом типа прерывания. Рис.ХI.8 Принцип организации векторной системы прерываний процессоров i8086. Для процессоров i8086/88 и старших моделей семейства Х86, в реальном режиме работы, все возможные вектора прерываний располагаются в первом килобайте адресного пространства компьютеров. Эта таблица векторов прерываний для процессоров i8086/88 приведена на рис ХI.8. Последовательность действий при поступлении запроса прерывания заключается в следующем. 1. Код типа внутреннего прерывания или код типа внешнего маскируемого аппаратного прерывания, суммируемый с константой 8, сдвигаются на 2 разряда влево и определяют адрес вектора прерывания в ОЗУ. Суммирование с константой 8 производится потому, что для всех внешних аппаратных прерываний предусмотрено использование векторов, начиная с восьмого. Вектора, начиная с нулевого до седьмого включительно, зарезервированы под внутренние прерывания. А умножение кода типа прерывания на 4 (его сдвиг на 2 разряда влево) производится потому, что каждый вектор занимает 4 байта адресного пространства и, следовательно, чтобы сформировать адрес n – го вектора прерывания необходимо код n –го типа прерывания умножить на 4. 2. Для того чтобы можно было возвратиться, после выполнения процедуры обслуживания прерывания, к продолжению прерванной программы, в стеке запоминаются: содержимое кодового сегментного регистра CS, указателя инструкций IP, а также содержимое регистра флагов F. 3. Сбрасывается флаг IF в регистре флагов, запрещая этим новое прерывание до конца обслуживания текущего, а в кодовый регистр CS и регистр указателя команд IP передаются значения соответствующего вектора прерывания из таблицы векторов прерываний (в регистр CS – два старших байта, а в регистр IP – два младших байта вектора). 4. По новому значению CS и IP передается управление на процедуру обслуживания прерывания, соответствующую полученному запросу прерывания. 5. После окончания обслуживания прерывания, выбирается из стека запомненная информация, и восстанавливаются прежние состояния кодового сегментного регистра CS, указателя инструкций IP и регистра флагов F. 6. Передается управление по адресу, находящемуся в регистре IP. |