Распределение прерываний по уровням приоритета
- Средства контроля процессора (высокий приоритет)
- Системный таймер
- Внешние устройства
- Программные прерывания (низкий приоритет)
При обработке каждого прерывания необходимо выполнить последовательность действий:
- При возникновении сигнала аппаратного или программного прерывания происходит первичное аппаратное распознание типа прерывания.
Если прерывания в данный момент запрещены, то процессор продолжает выполнение текущего процесса.
В противном случае вызывается супервизор прерываний. Он запрещает на некоторое время все прерывания и устанавливает причину прерывания. После этого супервизор сравнивает приоритет поступившего прерывания с текущим приоритетом процесса, выполняемого процессором.
Если прерывания разрешены, и поступивший запрос на прерывание имеет приоритет более высокий, чем текущий процесс, то будет производиться вызов процедуры обработки прерывания, адрес которой содержится в ОП в таблице векторов прерываний.
2. Сохраняется некоторая часть контекста прерванного процесса, которая позволит возобновить исполнение процесса после обработки прерывания (обычно это счетчик команд, слово состояния процессора, регистры общего назначения).
Может быть сохранен и полный контекст, если ОС обслуживает данное прерывание со сменой процесса. Однако это происходит не всегда, например, обслуживание прерывания по вводу-выводу (прием очередной порции данных от контроллера внешнего устройства) чаще всего выполняется без смены текущего процесса.
3. Одновременно с загрузкой адреса процедуры обработки прерываний в счетчик команд производится загрузка нового PSW (слово состояния процессора), которое определяет режимы работы процессора при обработке прерывания.
Прерывания обрабатываются в привилегированном режиме модулями ядра ОС, так как при этом нужно выполнить ряд критических операций.
4. Временно запрещаются прерывания данного типа, чтобы не образовалась очередь вложенных друг в друга потоков одной и той же процедуры. Делается это маскированием прерываний.
Многие процессоры автоматически устанавливают признак запрета прерываний в начале цикла обработки прерывания, в противном случае это делает программа обработки прерывания.
5. После того как прерывание обработано ядром операционной системы, прерванный контекст восстанавливается (частично аппаратно – PSW, содержимое счетчика команд, частично программно извлечение данных из стека) и процесс возобновляется с прерванного места. Снимается блокировка повторных прерываний данного типа.
Если данное прерывание связано со сменой выполняемого процесса, то вместо восстановления контекста управление передаётся диспетчеру процессов для выбора процесса из очереди готовых процессов для восстановления его контекста и передачи ему процессора.
2. Синхронизация параллельных процессов.
Назначение синхронизации.
Синхронизация обеспечивает:
- упорядочение развития процессов во времени в зависимости от типа отношения следования процессов (отношение предшествования, отношение приоритетности, отношение взаимного исключения)
- взаимодействие между процессами, выражающееся в передаче информации между ними (отношение «производитель-потребитель», отношение «читатель-писатель»)
Особенности каждого конкретного взаимодействия между двумя или более процессами определяются задачей синхронизации.
Количество различных задач синхронизации неограниченно.
Отношения между процессами, влияющие на синхронизацию процессов приведены на рис. 4.2.
Отношение предшествования | Для двух процессов это означает, что первый процесс должен переходить в состояние выполнения всегда раньше второго |
Отношение приоритетности | Процесс с приоритетом Р может быть переведен в состояние выполнения только при соблюдении двух условий:
|
Отношение взаимного исключения | Устанавливается для процессов, использующих общий ресурс. При этом совокупность действий над этим ресурсом в составе одного процесса называют критическим интервалом. Критический интервал одного процесса не должен выполняться одновременно с критическим интервалом над этим же ресурсом в составе другого процесса. |
Отношение «производитель- потребитель» | Устанавливается для двух процессов с жестко распределенными между ними функциями. Один процесс вырабатывает сообщения, предназначенные для восприятия и обработки другим. |
Отношение «читатели- писатели» |
|
Рис. 4.2. Назначение синхронизации и отношения между процессами, влияющие
на синхронизацию процессов
Типичные задачи синхронизации параллельных процессов:
Задача взаимного исключения
Необходимо согласовать работу параллельных процессов при использовании некоторого критического ресурса таким образом, чтобы удовлетворить следующим требованиям:
- Одновременно внутри критического интервала должно находиться не более одного процесса;
- Освобождение критического ресурса и выход из критического интервала должны быть произведены процессом, использующим критический ресурс, за конечное время.
Задача «производители-потребители»
Наиболее простой случай:
Взаимодействуют два процесса с жестко распределенными между ними функциями. Один процесс вырабатывает сообщения, предназначенные для восприятия и обработки другим.
Процесс, вырабатывающий сообщения, называют производителем, а воспринимающий сообщения – потребителем.
Процессы взаимодействуют через некоторую общую область памяти, которая является критическим ресурсом(в простейшем случае предполагается, что область способна хранить только одно сообщение и сообщения фиксированной длины).
Задача. Необходимо согласовать работу двух процессов при одностороннем (в простейшем случае) обмене сообщениями таким образом, чтобы удовлетворить следующим требованиям:
- Выполнять требования задачи взаимного исключения по отношению к критическому ресурсу – обобщенной памяти для хранения сообщения;
- Учитывать состояние обобщенной области памяти, характеризующей возможность или невозможность посылки (принятия) очередного сообщения.
Попытка процесса–производителя поместить очередное сообщение в область, из которой не было считано предыдущее сообщение процессом–потребителем, должна быть блокирована.
Процесс–производитель должен быть:
- либо должен быть оповещен о невозможности помещения сообщения,
- либо должен быть переведен в состояние ожидания возможности поместить сообщение через некоторое время по мере освобождения памяти.
Аналогично должна быть блокирована попытка процесса–потребителя считать сообщение из области, когда процесс - производитель не поместил туда очередного сообщения.
Процесс-потребитель должен быть:
- либо должен быть оповещен о невозможности считывания,
- либо должен быть переведен в состояние ожидания поступления очередного сообщения.
Если используется вариант с ожиданиями изменения состояния обобщенной области, необходимо обеспечить перевод ожидающих процессов в состояние готовности всякий раз, когда изменится состояние области:
- либо процесс-производитель поместит очередное сообщение в область, и оно может быть считано ожидающим процессом-потребителем
- либо процесс-потребитель считал очередное сообщение из области и обеспечил возможность ожидающему процессу-производителю послать очередное сообщение