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

4.Механизмы синхронизации и взаимодействия процессов, потоков

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

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

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

Приведем примеры методов синхронизации процессов и потоков:

  • полудуплексные каналы UNIX;

  • очереди сообщений;

  • семафоры;

  • разделяемые сегменты памяти;

  • сетевые сокеты;

  • таймеры;

  • события;

  • мьютексы;

  • синхронизации потоков по отношению к моменту их завершения с использованием метода «присоединение»;

  • синхронизации потоков с использованием «барьера»;

  • блокировки чтения/записи;

  • прерывания.

1.7.1. Средства синхронизации с помощью таймеров.

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

  • опроса цап/ацп, частота запуска f1 гц (задача 1);

  • опроса рк, частота запуска f2 = f1/2 гц (задача 2).

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

Рис.1.7.1. Синхронизация с использованием таймера

При этом если, например, на i такте запустилась менее приоритетная задача 3, то ее выполнение должно быть прервано и возобновлено, только после завершения задач 1 и 2.

1.7.2. Синхронизация процессов в Windows 2000, Windows xp с использованием событий

Для синхронизации c j-м процессом i-ый процесс должен создать , а j-й процесс должен открыть . Пусть, например, i-й процесс осуществляет установку c периодом . Для правильной синхронизации двух процессов j-й процесс должен перейти на Ожидание установки i-го события.

Рис. 1.7.2 Синхронизация процессов с использованием событий для ОС Windows 2000 (Windows XP)

При ожидании установки i-го события процесс переводит в заблокированное состояние. Установка таймером данного события означает, что истек заданный интервал времени. После это процесс переводится ядром ОС в состояние выполнение, «сбрасывает» и выполняет свой остальной алгоритм. «Сброс» и «установка» осуществляется путем изменения атрибутов у соответствующего события в таблице дескрипторов Windows 2000 или Windows XP (рис. 1.7.2).

1.7.3. Использование семафора для синхронизации работы потоков

Семафор – это целая переменная, связанная с критическим ресурсом. Ее значения могут менять только специальные системные операции P и V. Пусть S – семафор. Когда процесс выполняет операцию P(S), то S уменьшается на 1, и если S больше или равно 0, то процесс продолжает работу, а если S меньше нуля, то процесс останавливается и встает в очередь ожидания, связанную с S, до тех пор пока операция V(S), выполненная другим процессом, не освободит его. При выполнении операции V(S) S увеличивается на 1. Если S был больше 0 до выполнения операции V(S), то процесс продолжает свою работу, а если S был меньше или равен 0, т.е. находился в заблокированном состоянии, то процесс удаляется из очереди ожидания и получает разрешение продолжить свою работу.

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

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

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

Примеры синхронизации работы процессов и потоков приводится ниже.

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