Главная Операционные системы » Файлы » Лекции » Операционные системы [ Добавить материал ]

Синхронизация. Параллельное выполнение процессов и потоков.

[Скачать с сервера (254.1 Kb) - бесплатно] 21.11.2009, 12:36
  • Проблемы параллельного выполнения
  • Критические секции. Детерминированность.
  • Атомарность операций
  • Объекты синхронизации
  • Классические проблемы синхронизации
  • Реализация объектов синхронизации в ОС Windows
  • Особенности реализации объектов синхронизации в ОС Unix

Фрагменты из лекции

Детерминированность

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

Критическая секция

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

Атомарность. Виды ожидания

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

Объекты синхронизации

  • Мьютекс (mutual exclusive) — двоичная переменная, находящаяся в двух состояниях — свободном и занятом. Операция «проверить» ждет освобождения мьютекса и переводит его в занятое состояние, операция «освободить» переводит в свободное состояние.
  • Семафор — целая переменная с неотрицательным значением. Операция «проверить» вычитает значение семафора, если он положителен, и ожидает увеличения если равен нулю. Операция «освободить» увеличивает значение семафора на 1.
Синхронизация в ОС Windows
  • Функция Sleep
  • Объекты синхронизации
  • Функции ожидания
  • Критические секции
Функция Sleep
  • VOID Sleep(DWORD dwMilliseconds);
  • Переводит поток в состояние блокировки на указанное количество милисекунд.
  • В качестве значения параметра можно использовать макрос INFINITE.
  • Поток не продолжит работу в течении не менее чем указанное количество времени.
Объекты синхронизации ОС Windows
  • Объекты синхронизации ОС Windows — это объекты, которые имеют дескрипторы и могут находится в двух состояниях: сигналированом и несигналированом.
  • Объекты синхронизации используются в функциях ожидания.
  • Функция ожидания позволяет процессу дождаться сигналирования одного или нескольких объектов.
  • Все операции над объектами синхронизации (в т.ч. производимые функциями ожидания) атомарны.

Мьютекс

  • Мьютекс — бинарный объект синхронизации. В каждый момент времени он свободен (сигналирован) или принадлежит какому-либо потоку (несигналирован).
  • Успешно завершенная функция ожидания захватывает мьютекс. Для его освобождения поток использует функцию releaseMutex
  • Если поток начал ожидание на мьютексе, которым уже владеет, то оно немедленно заканчивается. Функцию ReleaseMutex для освобождения необходимо вызвать столько раз, сколько была вызвана функция ожидания.
Операции над мьютексами
  • Создание мьютекса
    • HANDLE CreateMutex ( LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner, LPCTSTR lpName);
  • Освобождение мьютекса
    • BOOL ReleaseMutex(HANDLE hMutex);

Семафор

  • Семафор — объект, состояние которого описывается неотрицательным целым числом (с пределом значения).
  • Семафор сигналирован, когда его значение положительно, несигналирован — когда оно равно нулю.
  • Функция ожидания (после завершения ожидания при необходимости) уменьшает значение семафора на 1.
  • Функция ReleaseSemaphore увеличивает значение семафора.
  • Если же поток организует несколько ожиданий на одном семафоре не отпуская его, то каждое ожидание уменьшает семафор.
Операции над семафорами
  • Создание семафора
    • HANDLE CreateSemaphore ( LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG lInitialCount, LONG lMaximumCount, LPCTSTR lpName);
  • Увеличение значения семафора
    • BOOL ReleaseSemaphore( HANDLE hSemaphore, LONG lReleaseCount, LPLONG lpPreviousCount);

Таймер

Таймер сигналируется по истечении определенного времени.

Таймер может быть:

  1. сбрасываемым вручную — остается сигналированным до установки нового значения времени (перезапуска);
  2. с автоматическим сбросом — переходит в несигналированное состояние при завершении операции ожидания.

Периодический таймер автоматически перезапускается через определенный период времени.

Операции над таймерами
  • Создание таймера
    • HANDLE CreateWaitableTimer ( LPSECURITY_ATTRIBUTES lpTimerAttributes, BOOL bManualReset, LPCTSTR lpTimerName);
  • Запуск таймера
    • BOOL SetWaitableTimer(
      HANDLE hTimer,
      const LARGE_INTEGER* pDueTime,   // 100нс, положительные — абсолютное время, отрицательные — относительное
      LONG lPeriod, //период, мс
      PTIMERAPCROUTINE pfnCompletionRoutine,
      LPVOID lpArgToCompletionRoutine,
      BOOL fResume //обычно 0 );
Похожие материалы:

Добавил: COBA (21.11.2009) | Категория: Операционные системы
Просмотров: 5584 | Загрузок: 1861 | Рейтинг: 0.0/0 |
Теги: синхронизация, unix, windows, программирование, ОСи, Сычёв
Комментарии (0)

Имя *:
Email *:
Код *: