Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС / Тема_2.ppt
Скачиваний:
202
Добавлен:
11.04.2015
Размер:
3.19 Mб
Скачать

2.6.3. Сотрудничество с использованием разделения

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

Проблемы: взаимоисключение, взаимоблокировка, голодание.

Дополнительно: синхронизация процессов для обеспечения согласованности данных

Пример: пусть должно выполняться a = b при начальном значении a = b = 1 1-й вариант: процессы выполняются последовательно

P1: a = a + 1; b = b + 1; P2: b = 2 * b; a = 2 * a; 2-й вариант: процессы прерывают друг друга

P1: a = a + 1; прерывание; P2: b = 2 * b; прерывание; P1: b = b + 1; прерывание; P2: a = 2 * a; Согласование нарушено: a = 4, b = 3

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

от скоростей процессов (потоков), называются гонками.

121

Операционные системы

2.6.3. Сотрудничество с использованием

Набор

 

разделения

 

называется

 

процессов

 

 

детерминированным,

если

всякий

раз

при

псевдопараллельном исполнении для одного и того же

набора входных данных он дает одинаковые выходные

данные.В противном случае он недетерминирован.

Детерминированный

набор

процессов

можно

безбоязненно выполнять в режиме разделения

времени. Для недетерминированного набора такое

исполнение нежелательно.

 

 

 

 

 

Про

недетерминированный

набор

программ

говорят, что он имеет race condition (состояние гонки,

состояние состязания).

 

 

 

 

 

 

 

Операционные системы

 

 

122

 

 

 

 

 

2.6.3. Сотрудничество с использованием

 

 

 

разделения

 

 

Задачу упорядоченного доступа к разделяемым

данным (устранение race condition) в том случае, если

нам не важна его очередность, можно решить, если

обеспечить каждому процессу эксклюзивное право

доступа к этим данным.

 

 

 

Каждый процесс, обращающийся к разделяемым

ресурсам, исключает для всех других процессов

возможность одновременного с ним общения с этими

ресурсами,

если

это

может

привести

к

недетерминированному поведению набора процессов.

Такой прием называется взаимоисключением (mutual

exclusion).

 

 

 

 

 

 

 

Операционные системы

 

123

 

 

 

 

2.6.4. Сотрудничество с использованием связи

При сотрудничестве с использованием связи

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

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

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

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

124

Операционные системы

2.6.4. Сотрудничество с использованием связи

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

125

Операционные системы

2.6.4.Методы взаимоисключений

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

2.Глобальные блокирующие переменные (программный подход)

Попытка доступа к

Нет, занят

разделяемому ресурсу D

Неделимая (атомарная)

F(D)=1?

 

Да, свободен

операция “проверка-

установка”

Занять ресурс

Недостатки: необходимость

Команды TC, BTR, BTS

F(D)=0

постоянного опроса другими

процессора Pentium

 

потоками, требующими тот

(анализ и присвоение

 

 

же ресурс, блокирующей

значения логической

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

переменной;

переменной)

(работа с ресурсом D)

дополнительные затраты

 

 

 

 

процессорного времени,

 

Освободить ресурс F(D)=1

применимы для потоков

 

одного процесса

 

 

 

Операционные системы

 

3.Использование системных функций входа в критическую секцию

Попытка доступа

Нет

Перевести данный

к разделяемому

F(D)=1?

 

ресурсу D

 

 

поток в ожидание D

 

 

 

 

 

 

Да

 

Установить блокирующую

Системный вызов

 

переменную в состояние

 

 

 

 

“Занято”, F(D) = 0

 

EnterCriticalSection()

Критическая секция (работа с ресурсом D)

Установить блокирующую

переменную в состояние Системный вызов “Свободно”, F(D) = 1

LeaveCriticalSection()

Перевести поток, ожидающий ресурс D, в состояние Готовность

Достоинство:

исключается потеря времени процессора на циклическую проверку освобождения занятого ресурса.

Недостаток: растут накладные расходы ОС по реализации функции входа в критическую секцию и выхода из нее

127

Операционные системы

4. Семафоры Дейкстры (Dijkstra)

Семафор: переменная S, примитивы P (proberen – проверка (==0); уменьшение, down) и V (verhogen – увеличение, up)

V(S) – переменная S увеличивается на 1 единым действием. Выборка, наращивание и запоминание не могут быть прерваны. К переменной S нет доступа во время выполнения этой операции.

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

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

Операция P заключает в себе потенциальную возможность перехода процесса, который ее выполняет, в состояние ожидания (если S = 0).

Операция V может при некоторых обстоятельствах активизировать процесс, приостановленный операцией P.

Для хранения процессов, ожидающих семафоры, используется очередь, работающая по принципу FIFO (Первым зашел – первым вышел).

128

Операционные системы

 

Начальные значения

 

 

семафоров

 

P(e)

e = N; f = 0

 

 

P(f)

e > 0

 

f > 0

 

 

Работа с

 

Работа с

разделяемым

 

 

разделяемым

ресурсом

 

 

ресурсом

(e=e-1)

 

 

(f=f-1)

 

e

 

 

V(f) ( f=f+1)

Буферный пул

V(e) (e=e+1)

 

 

 

e – пустые буферы,

 

Потоки-писатели

f – занятые буферы

Потоки-читатели

 

 

 

 

Операционные системы

129

 

 

5. Мониторы Хоара и Хансена

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

Суть этого механизма сводится к следующему.

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

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

При отказе в доступе монитор блокирует обратившийся к нему процесс

и определяет условие ожидания. Проверка условия ожидания

выполняется самим монитором, который и деблокирует ожидающий

процесс.

 

Операционные системы

130