Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5-Upr_vych_proc_obmen_s_PU_i_preryvanija.docx
Скачиваний:
4
Добавлен:
18.09.2019
Размер:
87.7 Кб
Скачать

Синхронизация выполнения программы с внешними процессами Примеры внешних процессов, с которыми хочется синхронизировать программу.

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

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

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

В многозадачной операционной среде одна из выполняемых программ может ожидать данных, подготавливаемых другой программой. В этом случае требуется синхронизация продолжения первой программы с завершением второй. Хотя обе программы работают на одном процессоре под одной ОС, они могут ничего не «знать» друг о друге. В этом случае событие, состоящее в завершении программы2 ничем не отличается для программы1 от внешнего события.

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

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

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

Рассмотрим далее, каким образом программа может «узнать» о наступлении события.

Способы синхронизации: программный опрос состояния versus прерывания

Простейший способ - программный опрос готовности (polling).

Опрос готовности состоит чаще всего в анализе состояния определенных битов в регистре статуса (состояния) – при достижении состояния готовности к обмену Вну устанавливает этот(эти) бит(ы) в определенное состояние. Обмен с ВнУ состоит в чтении или записи в регистр данных.

Так, если приемник последовательного интерфейса принял извне байт, автоматически устанавливается флаг готовности – младший байт в порте 03FDh. Фрагмент программы, ожидающий приема байта, может выглядеть так:

Недостаток: при ожидании готовности нерационально расходуется время процессора.

Можно опрашивать не постоянно, а периодически, при этом появляется задержка реакции на готовность.

Поэтому разработан был механизм прерываний.

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

hardware interrupt - аппаратное прерывание exсeption - исключение, прерывание по исключительной (экстраординарной) внутренней ситуации software interrupt - программное прерывание.

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

Будем далее называть подпрограмму, обрабатывающую факт наступления события обработчиком прерывания (interrupt handler или exception handler).

Термин обработка прерывания может использоваться для обозначений двух различных вещей: 1) действия, которые автоматически выполняет процессор при возникновении запроса, они реализованы аппаратно, и 2) действия, которые выполняет программа-обработчик прерывания (handler). Мы будем использовать термин обработка прерывания только во втором смысле, а для первой группы действий будем использовать термин вход в прерывание.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]