Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка пргр МП.docx
Скачиваний:
11
Добавлен:
01.07.2025
Размер:
16 Мб
Скачать
☆
    1. Асинхронный обмен данными с аппаратной проверкой готовности

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Завершение работы ВУ или КВВ по передаче данных.

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

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

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

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

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

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

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

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

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

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

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

2.3.3 Функции системы прерываний и их реализация Функции системы прерываний: 1. Прием и хранение запросов прерываний от многих источников.

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

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

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

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

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

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

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

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

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

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

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

Механизм масок.

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

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

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

Для управления прерываниями используется маска прерываний (см. рис. ниже), представляющая собой двоичное слово M = m1 m2 … mk с числом разрядов, равным числу маскируемых причин прерывания. Если разряд маски mk = 0, то прерывание по причине k запрещено (замаскировано), если разряд маски mk = 1, то прерывание по причине k разрешено (не замаскировано). Маска прерываний хранится в процессоре, куда она загружается командой УСТАНОВИТЬ МАСКУ А, где А – адрес. По этой команде слово с адресом А загружается в качестве маски в процессор и определяет отношение процессора к сигналам прерывания. Если все разряды маски равны нулю, процессор не реагирует ни на одну причину прерывания.

В простейших процессорах используется следующий способ маскирования прерываний. В систему команд компьютера вводятся две системные команды ЗАПРЕТИТЬ ПРЕРЫВАНИЯ и РАЗРЕШИТЬ ПРЕРЫВАНИЯ, выполнение которых приводит к запрещению и разрешению прерываний одновременно по всем причинам.

Команды, маскирующие прерывания, относятся к группе привилегированных команд.

Рис. 22. Обобщенная схема блока обработки запросов прерываний

На рисунке селектор уровня/фронта внешнего сигнала запроса прерывания выбирает событие, по которому вырабатывается запрос прерывания от внешнего сигнала («внешнее прерывание»). Возможны следующие настройки: по перепаду (фронт или спад сигнала) или по уровню. При возникновении запроса прерывания в регистре флагов (Interrupt Flag, IF) устанавливается бит, соответствующий источнику. Логика маскирования прерываний разрешает или запрещает выработку запросов от определенных источников или от всех источников сразу. Для разрешения прерывания необходимо установить в «1» соответствующий бит регистра масок (Interrupt Enable, IE) и бит общего разрешения прерываний (Global Interrupt Enable, GIE). Логика маскирования никак не влияет на немаскируемый запрос прерывания (Non-Maskable Interrupt, NMI). Приоритетная логика (Interrupt Priority, IP) вырабатывает вектор для наиболее приоритетного запроса и передает его вычислительному ядру синхронно с сигналом запроса прерывания; отслеживает приоритет запроса, находящегося в обработке и вытесняет (прерывает) данных запрос, если пришел другой запрос с более высоким приоритетом.

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

В интерфейсе «общая шина» типа Unibus выделяются специальные линии запросов прерывания от ВУ и линии разрешения прерываний, которые являются однонаправленными. По линии запросов сигналы передаются от ВУ к CPU, по линии разрешения прерываний – от CPU к ВУ. (В данном случае под ВУ понимается не столько само внешнее устройство, сколько его контроллер (блок управления)). Эти линии обычно называются линиями арбитража. Для каждого уровня приоритета используются две линии.

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

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