Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС_лекции.docx
Скачиваний:
23
Добавлен:
22.02.2015
Размер:
109.07 Кб
Скачать

5. Алгоритмы синхронизации

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

5.1 Interleaving race condition

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

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

Пусть есть активность

Pia,b,ca,b,c,d,e,f– выполняются как единое целое (атепарные)

Qd,e,f

Что произойдет, если эти активности будут выполнятся псевдо … в режиме разделения времени?

abdcef

abdecf

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

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

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

Вывод: детерменированный набор активностей можно выполнять в произвольном порядке.

Существует условие, которое позволяет определять является ли набор детерменированным. Условие Бернштейна:

R(P) – входные переменные

W(P) – выходные переменные

P: x = u +v

Y=x*W

R(P) = {u,v,x,W}

W(P) = {x,y}

Если для двух активностей P и Q:

      1. W(P) ∩W(Q) =

      2. W(P) ∩ R(Q) =

      3. R(P) ∩ W(Q) =

То выполнения P и Q детерменированны.

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

.

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

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

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

5.3 Программные алгоритмы организации взаимодействия процессов

5.3.1 Требования, предъявляемые к алгоритму.

организация взаимоисключений

5 условий хорошего алгоритма необходимого для организации правильного взаимодействия процессов, имеющих критические участки:

  • задача должна быть решена чисто программным способом. (на машине нет аппаратных программ взаимоисключения)

  • не должно существовать предположений о соотношении скоростей выполняющихся процессов

  • если процесс Pi исполняется в своем критическом участке, то не существует других процессов, которые выполняются так же в своём критическом участке

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

  • не должно быть бесконечного ожидании для входа в свой критический участок.

5.3.2 Запрет прерываний

while

{

запретить прерывания

criticalsection

разрешить прерывания

remainedsection

}

переменная «замок».

Берётся переменная доступная всем процессам.

1 . процесс может войти в критическую секцию только тогда, когда значение этой переменной равно 0.

2 . при входе 0 -> 1

3 . другой процесс видит что установлена 1.

4 . а другой процесс видит, что в критической секции 1 и не может туда войти

как только там образовался 0, то «вход свободен»

5.3.3 Строгое чередование

в закрытую секцию по очереди заходят процессы.

Shared turn = 0;

while (some condition)

{

while (harm !=i);

critical section;

turn = 1-I;

remainder section;

}

аппаратная поддержка взаимоисключения -

позволяет упростить алгоритмы и повысить их эффективность

многие вычисления в процессорах позволяют проверить и изменить значение машинного слова.

Команда Swap.

void Swap (int *a, int *b)

{

int tmp = *a;

*a=*b;

*b=tmp;

}

key

shared int lock=0

int key;

6. Механизмы синхронизации.

Пусть есть 2 процесса:

процесс с высоким приоритетом

с низким

пусть работает 2 процесс, системе появляется 1 поэтому 2 перестает работать.

процесс 2 находится в критической секции, появляется 1, но не может войти к ерит. секцию, при этом 1 забрал процессор. -> происходит зависание

6.1. семафор

в 60-х годах предложен механизм, использовавший семафор.

6.1.1. концепция работы семафора

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

P(s) : while (s==0)

s=s-1;

--------------------------

­­­­­­­V(s):s=s+1

Переменные семафора применяются для решения задач организации взаимодействия процессов.

Очень часто переменная sрасполагается в коде ядра ОС

6.1.2. решение проблемы производитель -> потребитель

пусть 2 процесса обмениваются информацией через буфер ограниченного размера.

7. Тупики

Если средствами синхронизации пользоваться некорректно, то могут возникнуть непредвиденные затруднения.

Такая проблема может возникнуть в базах данных.

Тупики аппаратные и программные.

Программные тупики.

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

7.2 Концепция ресурсов

одной из главнейших функций ОС является возможность распределения процессов по времени. Некоторые ресурсы (диск) могут быть разделяемы (ресурсы использующиеся совместно).

запрос ресурсов – request

использовать ресурс

освободить ресурс

Если ресурса нет, то процесс должен ждать или блокируется

7.3 Условие возникновения тупиков

1) условие взаимоисключения

2) условие ожидания ресурса. Если процесс взял какой-то ресурс, а остальные ещё не получил, он ранее ожидаемые ресурсы удерживает.

3) условия неперераспределяемости. Если ресурс попал к процессу, то ресурс не может быть изъят даже ОС.

4)условие кругового ожидания. Есть несколько процессов, которые захватили ресурс, но им его не хватает.

Математически строго показано, что для возникновения тупика необходимо выполнение всех 4-х условий.

7.4 Основные направления борьбы с тупиками

1) игнорировать проблему

2) обнаружение тупиков

3) восстановление после тупиков

4) обход тупиков за счет тщательного распределения ресурсов

5) предотвращение тупиков за счет нарушения любого из условий возникновения тупиков

7.5. Алгоритм Страуса

7.6. Обнаружение тупиков

необходимо установить, что возникла тупиковая ситуация

нужно определить процессы и ресурсы, которые вовлечены в ситуацию

ресурс

процесс

ресурс R

процесс

процесс А удерживает рес. R

ресурс K

7.7. Восстановление после тупиков.

предположим, что тупик обнаружен

восстановиться

откат назад, восстановление ситуации предшествующей возникновению тупика

при откатах данные теряются частично.

Сложность восстановления после тупиков:

  1. по большей части в ОС отсутствуют механизмы эффективного восстановления

  2. если даже такие средства есть, то они затратные

  3. восстановление после тупика требует много времени, связанное с потерей данных

7.7.1 Восстановление с помощью перераспределения ресурсов

У ОС должна быть возможность изъять один ресурс и передать его другому процессу.

7.7.2 Восстановление через откат назад.

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

7.7.3 Восстановление через ликвидацию системных процессов

есть риск потери данных убитого процесса

идемпотентный – это процесс связан с трансляцией, лучше всего «убить» его.

7.8. Способы обхода тупиков путём распределения ресурсов

Цель: предотвращать условия возникновения тупиков, иначе говоря, ОС, предоставляющая ресурсы процессу должна быть уверена в безопасности этой операции.

А всегда ли возможно предусмотреть появление тупика, при выделении ресурса процессом?

Да, существуют алгоритмы, позволяющие гарантировать отсутствие тупиков при правильном распределении ресурсов.

7.8.1 Алгоритм банкира.

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

Пусть есть несколько nустройств. Ос принимает запрос от процесса, если максимальная потребность в ресурсе не превышаетn.

пользователь гарантирует, что все устройства возвратит ОС за конечное время

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

выделение ресурса возможно, если состояние системы останется надёжным.

устройство

№ пользователя

текущее количество

максимальная потребность

1

1

4

2

4

6

3

5

8

данное состояние надёжно.

Система удовлетворяет только те запросы, которые оставляют её в надёжном состоянии и отклоняет остальные.