Прерывания работы устройства

Системы прерываний. Назначение, принцип работы и организация системы прерываний ЭВМ.

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

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

─ асинхронные или внешние (аппаратные) — события, которые исходят от внешних источников (например, периферийных устройств) и могут произойти в любой произвольный момент: сигнал от таймера, сетевой карты или дискового накопителя, нажатие клавиш клавиатуры, движение мыши;

─ внутренние — события в самом процессоре как результат нарушения каких-то условий при исполнении машинного кода: деление на ноль или переполнение, обращение к недопустимым адресам или недопустимый код операции;

─ программные (частный случай внутреннего прерывания) — инициируются исполнением специальной инструкции в коде программы. Программные прерывания как правило используются для обращения к функциям встроенного программного обеспечения (firmware), драйверов и операционной системы.

Схему передачи управления при прерывании можно отобразить следующим образом.

1. при поступлении прерывания производится идентификация устройства которое его запросило;

2. запоминается информация о состоянии процессора;

3. выполняется инициализация процессора для выполнения программы обработки прерывания;

4. производится запуск и исполнение программы обработки прерывания;

5. восстанавливается состояние процессора и возобновляется работа прерванной программы.

Процесс сохранения текущего состояния на момент прерывания и его последующее восстановление называется контекстным переключением. Под состоянием процессора понимается содержимое счетчика (указателя) команд и всех его регистров на момент прерывания.

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

Существует большое количество классификаций прерываний.

В зависимости от возможности запрета внешние прерывания делятся на:

─ маскируемые — прерывания, которые процессор либо выполняет немедленно, либо игнорирует. Поведение процессора регулируется флагом IF в регистре флагов 0 – запрещены, 1 – разрешены (В некоторых процессорах, наряду с возможностью общего маскирования обеспечено программное маскирование некоторых типов прерываний, т.е. процессор может в определенные моменты времени запрещать прерывания от второстепенных устройств и работать только с рядом основных);

─ немаскируемые (англ. Non maskable interrupt, NMI) — обрабатываются всегда, независимо от запретов на другие прерывания. Например это сигналы об ошибках.

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

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

Приоритеты могут быть фиксированными и динамически перестраиваемыми.

Простейший способ задания фиксированных приоритетов заключается в выбираемом разработчиком порядке присоединения линий сигналов запросов к входам системы прерывания. Сами запросы фиксируются в регистре запросов прерываний в строго определенных разрядах. В системах с фиксированным приоритетом при выборе запроса для обработки процессор проверяет (программно или аппаратно) состояние регистра прерываний. Поиск источника запроса прерывания прекращается при обнаружении самого старшего единичного разряда регистра прерывания. Приоритет обслуживаемого запроса определяется его местом в последовательной цепочке. Более быстродействующим периферийным устройством обычно назначают более высокий приоритет. В подобных системах приоритет устройства является жестко фиксированным и изменить его можно только новым соединением линий запросов на входах системы прерываний.

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

Непроизводительные потери времени, затрачиваемые на последовательный поиск источника запроса, являются существенным недостатком метода линейного опроса. Указанного недостатка лишены векторные системы прерывания. Векторные системы прерывания наряду с функцией формирования адреса обработчика поступившего запроса обеспечивают выбор наиболее приоритетного прерывания. В большинстве случаев векторная система прерываний реализуется в виде специализированной СБИС —программируемого контроллера прерываний (ПКП), содержащего логику для назначения приоритетов поступающим запросам. В англоязычной литературе ПКП обозначается PIC (Programmable Interrupt Controller). Рассмотрим функциональную схему контроллера прерываний.

В ответ на запрос прерывания от ПУ контроллер прерываний формирует сигнал запрос прерывания INT, поступающий на вход INTR МП. Реагируя на этот сигнал, МП выдает сигнал подтверждения прерывания INTA (INTerrupt Acknowledge), который поступает в ПКП и используется в нем для считывания вектора прерывания поступившего запроса. Приняв сигнал INTA, контроллер прерываний выставляет на системную шину данных вектор или код прерывания, который считывается процессором. С помощью вектора прерывания процессор определяет адрес подпрограммы обслуживания прерывания. Формирование векторов прерывания и выявление запроса с наивысшим приоритетом осуществляется внутренними схемами ПКП.

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

Читайте так же:  Открываем пекарню-кондитерскую с нуля

В качестве примера рассмотрим организацию прерываний в микропроцессорной системе на базе процессора х86. Прерывания в такой системе обрабатываются с помощью ПКП, реализованного фирмой Intel в виде СБИС 8259А.

ПКП обеспечивает развязку между внешними источниками прерываний и процессором. Подобная схема применяется в ВМ различных архитектур. На схеме показаны периферийные устройства, подключенные к линиям запроса прерывания IRQ (interrupt request) системной шины ISA. Сигналы прерываний от периферийных устройств, передаваемые по этим линиям, поступают на входы IR контроллера PIC. В IBM PC- совместимых ПК каждое периферийное устройство подключено к своей индивидуальной линии IRQ, и для входа в прерывание периферийное устройство только выставляет запрос. Недостатком подобной организации является трудность подключения большого числа периферийных устройств, поскольку из-за ограниченного числа линий IRQ для дополнительных периферийных устройств свободных линий может не оказаться, а подключение нескольких периферийных устройств к одной линии IRQ недопустимо. Данный недостаток решается каскадным подключением нескольких контроллеров прерываний.

Вектор прерывания — закреплённый за устройством номер, который идентифицирует соответствующий обработчик прерываний. Векторы прерываний объединяются в таблицу векторов прерываний (англ. Interrupt Descriptor Table (IDT)). Местоположение таблицы зависит от типа и режима работы процессора.

В реальном режиме таблица векторов прерываний расположена в первом килобайте памяти начиная с адреса 0000:0000 и содержит 256 векторов прерываний. В защищённом режиме адрес в физической памяти и размер таблицы прерываний определяется 48-битным регистром IDTR.

Первый этап инициализации выполняется BIOS, перед загрузкой ОС. Второй непосредственно самой операционной системой. Операционной системе доступно изменение некоторых адресов прерываний.

Не нашли то, что искали? Воспользуйтесь поиском:

Источник: http://studopedia.ru/12_82087_sistemi-prerivaniy-naznachenie-printsip-raboti-i-organizatsiya-sistemi-prerivaniy-evm.html

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

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

Идея прерывания была предложена также очень давно — в середине 50-х годов, — и можно без преувеличения сказать, что она внесла наиболее весомый вклад в раз­витие вычислительной техники. Основная цель введения прерываний — реализа­ция асинхронного режима функционирования и распараллеливание работы отдель­ных устройств вычислительного комплекса.

Механизм прерываний реализуется аппаратно-программными средствами. Струк­туры систем прерывания (в зависимости от аппаратной архитектуры) могут быть самыми разными, но все они имеют одну общую особенность — прерывание непре­менно влечет за собой изменение порядка выполнения команд процессором.

Механизм обработки прерываний независимо от архитектуры вычислительной системы подразумевает выполнение некоторой последовательности шагов.

1. Установление факта прерывания (прием сигнала запроса на прерывание) и идентификация прерывания (в операционных системах идентификация пре­рывания иногда осуществляется повторно, на шаге 4),

2. Запоминание состояния прерванного процесса вычислений. Состояние процесса выполнения программы определяется, прежде всего, значением счетчика ко­манд (адресом следующей команды, который, например, в i80x86 определяется регистрами CS и IP— указателем команды [1, 8, 48]), содержимым регистров процессора, и может включать также спецификацию режима (например, режим пользовательский или привилегированный) и другую информацию.

3. Управление аппаратно передается на подпрограмму обработки прерывания. В простейшем случае в счетчик команд заносится начальный адрес подпро­граммы обработки прерываний, а в соответствующие регистры — информация из слова состояния. В более развитых процессорах, например в 32-разрядных микропроцессорах фирмы Intel (начиная с i80386 и включая последние про­цессоры Pentium IV) и им подобных, осуществляются достаточно сложная про­цедура определения начального адреса соответствующей подпрограммы обра­ботки прерывания и не менее сложная процедура инициализации рабочих регистров процессора (подробно эти вопросы рассматриваются в разделе «Си­стема прерываний 32-разрядных микропроцессоров i80x86» главы 4).

4. Сохранение информации о прерванной программе, которую не удалось спасти на шаге 2 с помощью аппаратуры. В некоторых процессорах предусматривает­ся запоминание довольно большого объема информации о состоянии прерван­ных вычислений.

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

6. Восстановление информации, относящейся к прерванному процессу (этап, об­ратный шагу 4).

7. Возврат на прерванную программу. Шаги 1-3 реализуются аппаратно, шаги 4-7 — программно.

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

Итак, главные функции механизма прерываний — это:

— распознавание или классификация прерываний;

— передача управления соответствующему обработчику прерываний;

— корректное возвращение к прерванной программе.

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

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

Внешние прерывания вызываются асинхронными событиями, которые происходят вне прерываемого процесса, например:

— прерывания от таймера;

— прерывания от внешних устройств (прерывания по вводу-выводу); О прерывания по нарушению питания; а прерывания с пульта оператора вычислительной системы; а прерывания от другого процессора или другой вычислительной системы.

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

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

Читайте так же:  Бизнес в торговом центре

— при наличии в поле кода операции незадействованной двоичной комбинации; а при делении на ноль;

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

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

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

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

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

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

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

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

С абсолютными приоритетами, то есть всегда обслуживается прерывание с наивысшим приоритетом. Для реализации этого режима необходимо на время обработки прерывания замаскировать все запросы с более низким приорите­том. При этом возможно многоуровневое прерывание, то есть прерывание про­грамм обработки прерываний. Число уровней прерывания в этом режиме изме­няется и зависит от приоритета запроса.

— По принципу стека, или, как иногда говорят, по дисциплине LCFS (Last Come First Served — последним пришел, первым обслужен), то есть запросы с более низким приоритетом могут прерывать обработку прерывания с более высоким приоритетом. Дли этого необходимо не накладывать маску ни на один из сиг­налов прерывания и не выключать систему прерываний.

Следует особо отметить, что для правильной реализации последних двух дисцип­лин нужно обеспечить полное маскирование системы прерываний при выполне­нии шагов 1-4 и 6-7. Это необходимо для того, чтобы не потерять запрос и пра­вильно его обслужить. Многоуровневое прерывание должно происходить на этапе собственно обработки прерывания, а не на этапе перехода с одного процесса вы­числений на другой.

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

Супервизор прерываний прежде всего сохраняет в дескрипторе текущей задачи ра­бочие регистры процессора, определяющие контекст прерываемого вычислитель­ного процесса. Далее он определяет ту подпрограмму, которая должна выполнить действия, связанные с обслуживанием настоящего (текущего) запроса на преры­вание, Наконец, перед тем, как передать управление на эту подпрограмму, супер­визор прерываний устанавливает необходимый режим обработки прерывания. После выполнения подпрограммы обработки прерывания управление вновь пере­дается ядру операционной системы. На этот раз уже на тот модуль, который зани­мается диспетчеризацией задач (см. раздел «Планирование и диспетчеризация процессов и задач» в главе 2). И уже диспетчер задач, в свою очередь, в соответ­ствии с принятой дисциплиной распределения процессорного времени (между выполняющимися вычислительными процессами) восстановит контекст той за­дачи, которой будет решено выделить процессор. Рассмотренную нами схему ил­люстрирует рис. 1.4.

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

Читайте так же:  Торговля алкоголем без лицензии – возможности и риски

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

Дата добавления: 2014-01-05 ; Просмотров: 748 ; Нарушение авторских прав? ;

Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет

Источник: http://studopedia.su/6_56283_prerivaniya.html

Прерывания работы устройства

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

i 80 x 86.

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

1. Понятие прерывания

2. Классификация прерываний

3. Система прерываний.

· Программные средства системы прерываний

· Таблица векторов прерываний

4. Обработка прерывания в реальном режиме

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

Т.е. это процесс, временно переключающий микропроцессор на выполнение другой программы с последующим возвратом к прерванной программе.

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

Адрес программы-обработчика прерывания вычисляется по таблице векторов прерываний.

Механизм прерываний поддерживается на аппаратном уровне.

В зависимости от источника, прерывания делятся на

· аппаратные — возникают как реакция микропроцессора на физический сигнал от некоторого устройства (клавиатура, системные часы, клавиатура, жесткий диск и т.д.), по времени возникновения эти прерывания асинхронны, т.е. происходят в случайные моменты времени;

· программные — вызываются искусственно с помощью соответствующей команды из программы ( int ), предназначены для выполнения некоторых действий операционной системы, являются синхронными;

· исключения — являются реакцией микропроцессора на нестандартную ситуацию, возникшую внутри микропроцессора во время выполнения некоторой команды программы (деление на ноль, прерывание по флагу TF ( трассировка)).

Общая классификация прерываний

· внешние

— вызываются внешними по отношению к микропроцессору событиями

(по существу — это группа аппаратных прерываний) Вложенных прерываний нет!

· внутренние

— возникают внутри микропроцессора во время вычислительного процесса (по существу — это исключительные ситуации и программные прерывания).

Внешние прерывания

возникают по сигналу какого-нибудь внешнего устройства.

Внешние прерывания подразделяются на не­маскируемые и маскируемые.

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

Маскируемые прерывания

генерируются контроллером прерываний по заявке определенных периферийных устройств. Контроллер прерываний (выполнен в виде специальной микросхемы i8259A) поддерживает восемь уровней (линий) приоритета; к каждому уровню “привязано” одно периферийное устройство. Именно маскируемые прерывания часто называют аппаратными прерываниями.

В ПК, начиная с IBM PC AT, построенных на базе микропроцессора i80286, используются два контроллера прерываний i8259A; они соединяются последователь­но каскадным образом, что увеличивает количество внешних источников прерываний до 15 (каждая по 8).

Обратим внимание . Микросхема i 8259А является программируемой.

Немаскируемые прерывания

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

В реальном и защищенном режиме работы микропроцессора обработка прерываний осуществляется принципиально разными методами.

Видео (кликните для воспроизведения).

Система прерываний. Аппаратные и программные средства системы прерываний

Система прерываний — это совокупность программных и аппаратных средств, реализующих механизм прерываний.

К аппаратным средствам

системы прерываний относятся:

· выводы микропроцессора — на них формируются сигналы, извещающие микропроцессор либо о том, что некоторое внешнее устройство «просит уделить ему внимание» ( INTR) , либо о том, что требуется безотлагательная обработка некоторого события или катастрофическая ошибка (NMI)

· INTR — вывод для входного сигнала запроса на прерывание ,

· NMI — вывод для входного сигнала немаскируемого прерывания

· INTA — вывод для выходного сигнала подтверждения получения сигнала прерывания микропроцессором (этот сигнал поступает на одноименный вход микросхемы конроллера 8259А;

· программируемый контроллер прерываний 8259А (предназначен для фиксирования сигналов прерываний от восьми различных внешних устройств; он выполнен в виде микросхемы; обычно используют две последовательно соединенные микросхемы, поэтому кол-во возможных источников внешних прерываний до 15 плюс одно немаскируемое прер.; именно он формирует номер вектора прерывания и выдает его шину данных);

· внешние устройства (таймер, клавиатура, магнитные диски и т.п.)

К программным средствам

системы прерываний Реального режима относятся:

· таблица векторов прерываний

.

Занимает первый килобайт ОП (адреса 00000 h-003FFh) .

Она содержит адреса (векторы — «векторы», т.к. два значения для указания адреса) обработчиков прерываний и состоит из 256 (0..255) элементов по 4 байта каждый:

— 2 байта — новое значение для регистра IP

— 2 байта — новое значение для регистра CS .

Расположение таблицы векторов прерываний в процессорах i80286 и старше определяется значением регистра IDTR .

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

Каждый вектор имеет свой номер и называется номером прерывания.

· два флага

в регистре флагов flags/eflags :

· IF (Interrupt Flag) — флаг прерывания. Предназначен для маскирования (запрещения) аппаратных прерываний. Если IF=1 , микропроцессор обрабатывает внешние прерывания, если = 0, то игнорирует;

· TF(Trace Flag) — флаг трассировки. Если он=1, то микропроцессор переходит в режим покомандной работы. В этом режиме в микропроцессоре генерируется внутреннее прерывание с номером 1;

· машинные команды микропроцессора:

int, into (прерывание по переполнению) , iret, cli, sti

Обработка прерывания в реальном режиме

производится в три этапа:

1) прекращение выполнения текущей программы;

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

Читайте так же:  Положен ли возврат ндфл, если недвижимость получена в дар

Обязательными для сохранения являются регистры cs, ip, flags (пара CS:IP содержит адрес команды, с которой необходимо начать выполнение после возврата, flags — состояние флагов после выполнения последней команды прерванной программы).

.

Эти регистры сохраняются микропроцессором автоматически. Сохранение остальных регистров — должно обеспечиваться программистом .

Наиболее удобным местом хранения регистров является стек.

После сохранения регистров в стеке микропроцессор сбрасывает бит флага IF (т.е.=0) (. В стеке при этом записан регистр flags с еще установленным IF . ) Этим предотвращается возможность возникновения вложенных внешних прерываний и порча регистров исходной программы вследствие неконтролируемых действий со стороны программы — обработчика вложенного прерывания. После того как необходимые действия по сохранению контекста завершены, обработчик аппаратного прерывания может разрешить вложенные прерывания командой sti .

2) переход к выполнению и выполнение программы обработки прерывания;

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

В реальном режиме микропроцессора допускается 256 источников — по кол-ву элементов таблицы векторов прерываний.

· 2 байта — значение смещения начала программы-обработчика прерывания от начала кодового сегмента

· 2 байта — значение базового адреса сегмента, в котором находится программа-обработчик.

Как определить адрес, по которому находится вектор прерывания с номером N ?

смещение эл-та таблицы векторов прерываний = N * 4

Полный размер таблицы ? 4*256=1024

Итак на втором этапе микропроцессор

1. По номеру источника прерывания определяет смещение в таблице векторов прерываний

2. Помещает первые два байта в регистр IP

3. Помещает вторые два байта в регистр CS

4. Передыет управление по адресу CS:IP

Далее выполняется сама программа обработки прерывания.

(Она тоже может быть прервана поступлением запроса от более приоритетного источника. Все источники прерывания имеют приоритеты.)

3) возврат управления прерванной программе.

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

Последние команды в в обработчике прерывания — sti, iret

sti — разрешить аппаратные прерывания (устанавливает флаг IF=1 , не имеет операндов) .

iret — извлечь последовательно три слова из стека и поместить их соответственно в регистры ip, cs, flags.

Источник: http://mf.grsu.by/UchProc/livak/po/lections/lec12.htm

Прерывания. Механизм обработки прерываний

Дата добавления: 2013-12-23 ; просмотров: 17150 ; Нарушение авторских прав

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

Идея прерываний была предложена в середине 50-х годов и можно без преувеличения сказать, что она внесла наиболее весомый вклад в развитие вычислительной техники. Основная цель введения прерываний – реализация асинхронного режима работы и распараллеливание работы отдельных устройств вычислительного комплекса.

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

Механизм обработки прерываний независимо от архитектуры вычислительной системы включает следующие элементы:

1. Установление факта прерывания (прием сигнала на прерывание) и идентификация прерывания (в операционных системах иногда осуществляется повторно, на шаге 4).

2. Запоминание состояния прерванного процесса. Состояние процесса определяется, прежде всего, значением счетчика команд, содержимым регистров процессора и может включать также спецификацию режима (например, режим пользовательский или привилегированный) и другую информацию.

3. Управление аппаратно передаётся подпрограмме обработки прерывания.

4. Сохранение информации о прерванной программе, которую не удалось спасти на шаге 2 с помощью действий аппаратуры. В некоторых вычислительных системах предусматривается запоминание довольно большого объёма информации о состоянии прерванного процесса.

5. Обработка прерывания. Эта работа может быть выполнена той же подпрограммой, которой было передано управление на шаге 3, но в ОС чаще всего она реализуется путем последующего вызова соответствующей подпрограммы.

6. Восстановление информации, относящейся к прерванному процессу (этап, обратный шагу 4).

7. Возврат в прерванную программу.

Шаги 1-3 реализуются аппаратно, а шаги 4-7 – программно.

Рис. 13. Обработка прерывания

На рисунке 13 показано, что при возникновении запроса на прерывание естественный ход вычислений нарушается и управление передаётся программе обработки возникшего прерывания. При этом средствами аппаратуры сохраняется (как правило, с помощью механизмов стековой памяти) адрес той команды, с которой следует продолжить выполнение прерванной программы. После выполнения программы обработки прерывания управление возвращается прерванной ранее программе посредством занесения в указатель команд сохранённого адреса команды. Однако такая схема используется только в самых простых программных средах.

Итак, главные функции механизма прерываний:

— распознавание или классификация прерываний;

— передача управления соответственно обработчику прерываний;

— корректное возвращение к прерванной программе.

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

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

Внешние прерывания вызываются асинхронными событиями, которые происходят вне прерываемого процесса, например:

— прерывания от таймера;

— прерывания от внешних устройств (прерывания по вводу/выводу);

— прерывания по нарушению питания;

— прерывания с пульта оператора вычислительной системы;

— прерывания от другого процессора или другой вычислительной системы.

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

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

Читайте так же:  Порядок перерасчета пенсии работающим пенсионерам

— при наличии в поле кода операции незадействованной двоичной комбинации;

— при делении на нуль;

— при переполнении или исчезновении порядка;

— при обнаружении ошибок чётности, ошибок в работе различных устройств аппаратуры средствами контроля.

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

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

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

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

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

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

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

— по принципу стека, или, как иногда говорят, по дисциплине LCFS (last come first served – последним пришёл – первым обслужен), то есть запросы с более низким приоритетом могут прерывать обработку прерывания с более высоким приоритетом. Для этого необходимо не накладывать маски ни на один сигнал прерывания и не выключать систему прерываний.

Для правильной реализации последних двух дисциплин нужно обеспечить полное маскирование системы прерываний при выполнении шагов 1-4 и 6-7, т.о. система прерываний может быть включена только во время обработки поступившего раннее прерывания. Многоуровневое прерывание должно происходить на этапе собственно обработки прерывания (5 шаг), а не на этапе перехода с одного процесса на другой.

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

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

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

Во многих ОС служебные секции программы обработки прерываний выделяются в специальный системный программный модуль – супервизор прерываний.

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

Рис. 14. Обработка прерывания при участии супервизоров ОС

Как мы видим из рисунка 14, здесь нет непосредственного возврата в прерванную ранее программу непосредственно из самой подпрограммы обработки прерывания.

Для прямого непосредственного возврата достаточно адрес возврата сохранить в стеке, что и делает аппаратура процессора. При этом стек легко обеспечивает возможность возврата в случае вложенных прерываний, поскольку он всегда реализует дисциплину LCFS (lastcome – first served).

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

Видео (кликните для воспроизведения).

Источник: http://life-prog.ru/1_15910_prerivaniya-mehanizm-obrabotki-prerivaniy.html

Прерывания работы устройства
Оценка 5 проголосовавших: 1

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here