Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы_v3.doc
Скачиваний:
5
Добавлен:
01.05.2025
Размер:
1 Мб
Скачать
☆

11. Организация аппаратных прерываний в эвм.

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

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

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

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

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

Система прерываний представляет собой комплекс аппаратных и программных средств. Аппаратные средства системы прерываний обычно называются блоком или контроллером прерываний. В ПК это PIC (Programmable Interrupt Controller), т.е. отдельная микросхема 8259A. В некоторых случаях контроллер прерываний интегрируется в кристалл микропроцессора. Программные средства систем прерываний представляют собой специальные программы – обработчики прерываний (interrupt handler).

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

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

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

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

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

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

Аппаратные прерывания могут возникать в произвольные моменты времени и являются асинхронными по отношению к выполняемой программе.

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

Реагируя на аппаратное прерывание, процессор должен идентифицировать его источник, сохранить минимальный контекст прерываемой программы и переключаться на специальную программу – обработчик прерывания (interrupt handler), который может быть оформлен как процедура или задача.

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

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

К основным ситуациям, возникающим вне процессора и приводящим к прерыванию, относятся:

  • запросы от управляемого объекта (являются типичными для управляющих систем), т.е. запросы от ВУ:

  • ВУ, готовые к обмену, требуют реакции процессора для организации программно-управляемой передачи данных;

  • завершение работы ВУ или КВВ по передаче данных;

  • особая (аварийная) ситуация в ВУ или КВВ.

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

Программные прерывания, в отличие от аппаратных, появляются синхронно по отношению к выполняемой программе.

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

Обработка исключительных ситуаций(exception handling) — механизм языков программирования, предназначенный для описания реакции программы на ошибки времени выполнения и другие возможные проблемы (исключения), которые могут возникнуть при выполнении программы и приводят к невозможности (бессмысленности) дальнейшей отработки программой её базового алгоритма. В русском языке также применяется более короткая форма термина: «обработка исключений».

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

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

•Ошибка при попытке считать данные с внешнего устройства. Если данные не удаётся ввести, любые дальнейшие запланированные операции с ними бессмысленны.

•Исчерпание доступной памяти. Если в какой-то момент система оказывается не в состоянии выделить достаточный для прикладной программы объём оперативной памяти, программа не сможет работать нормально.

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

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

Функции системы прерываний и их реализация

Функции системы прерываний:

1.Прием и хранение запросов прерываний от многих источников.

2.Выделение наиболее приоритетного запроса из множества поступивших.

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

4.Сохранение состояния (контекста) прерываемой программы.

5.Вызов обработчика прерываний.

6.Собственно обработка прерываний (выполнение программы обработки прерываний).

7.Восстановление состояния (контекста) прерванной программы и возобновление ее выполнения.

Этапы 1-5 выполняются аппаратными средствами компьютера автоматически при появлении запроса прерывания. Этап 7 также выполняется аппаратно по команде возврата из обработчика прерывания.

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

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

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

Отношение процессора к поступившим запросам прерываний может быть выражено с помощью одного из двух механизмов:

•механизм масок;

•порог прерываний.

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

Запросы прерываний от ВУ формируются с помощью PIC (Programmable InterruptionController), который связан линией запроса с CPU. Запросы от PIC поступают в CPU на внешний вход INTR.

Для управления прерываниями используется маска прерываний, представляющая собой двоичное слово M = m1 m2 … mk с числом разрядов, равным числу маскируемых причин прерывания.

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

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

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

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

Прерывания ADuC812 имеют вектора в диапазоне 0003h-0043h, которые попадают в область младших адресов памяти программ. Это пространство соответствует 8Кб (0000h-2000h) Flash-памяти. В стенде пользователь не имеет возможности записи во Flash-память (запись программ осуществляется во внешнюю память программ и данных), следовательно, не может подставить свои процедуры обработки прерываний (точнее, команды перехода к процедурам) по адресам, соответствующим векторам прерываний.

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

1.По адресам (0003h-0043h) векторов прерываний во Flash-памяти SDK-1.1 располагаются команды переходов на вектора пользовательской таблицы, размещенной в адресах 2003h-2043h.

2.По адресам векторов пользовательской таблицы пользователем указываются команды переходов на процедуры обработки прерываний.

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