Скачать презентацию Курс Операционные системы В М Волчков Тема 7 Скачать презентацию Курс Операционные системы В М Волчков Тема 7

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

  • Количество слайдов: 48

Курс Операционные системы В. М. Волчков Тема 7. Алгоритмы синхронизации На основе слайдов В. Курс Операционные системы В. М. Волчков Тема 7. Алгоритмы синхронизации На основе слайдов В. Е. Карпова(МФТИ) и С. Д. Кузнецова(ИНТУИТ) VMV. 2014

Основные разделы • Чередование, состязания и взаимное исключение • Критическая секция • Программные алгоритмы Основные разделы • Чередование, состязания и взаимное исключение • Критическая секция • Программные алгоритмы организации взаимодействия процессов • Аппаратная поддержка взаимных исключений Алгоритмы синхронизации 2

Понятие АКТИВНОСТИ Активность – последовательное выполнение необходимых действий, для достижение некоторой цели • Активности Понятие АКТИВНОСТИ Активность – последовательное выполнение необходимых действий, для достижение некоторой цели • Активности – это неотемлимая часть как обычной деятельности людей и животных так и составляющая в программном и техническом обеспечении. • Любая активность может быть разбита на некоторые неделимые части, называемые атомарные операции Алгоритмы синхронизации 3

Активности и атомарные операции Пример. Активность: “Приготовление вкуснейшего бутерброда” § § Отрезать ломтик хлеба Активности и атомарные операции Пример. Активность: “Приготовление вкуснейшего бутерброда” § § Отрезать ломтик хлеба Отрезать ломтик колбасы Намазать хлеб маслом Положить колбасу на хлеб Атомарные операции Два основных свойства атомарных операций 1. Атомарная операция выполняется за один раз 2. Выполнение атомарной операции невозможно прервать (она не разделяется на более мелкие операции) Алгоритмы синхронизации 4

Чередование, состязания и взаимное исключение Пусть имеется две активности P: a b c и Чередование, состязания и взаимное исключение Пусть имеется две активности P: a b c и Q: d e f Здесь a, b, c и d, e, f - атомарные операции При последовательном выполнении активностей будет соблюдаться и последовательность атомарных операций, т. е. P Q выполнится как a b c d e f При выполнении активности в режим разделения времени (псевдопараллельно) атомарные операции могут расслоиться с непрогнозируемым чередованием. Такое расслоение принято называть: interleaving Алгоритмы синхронизации 5

Interleaving Исходные активности Активность P: abc Активность Q: def Эффект interleaving при псевдопараллельном выполнении Interleaving Исходные активности Активность P: abc Активность Q: def Эффект interleaving при псевдопараллельном выполнении (т. е. в режиме разделения времени) : Поскольку при выполнение активностей невозможно предугадать прерывания (от ОС), оконечный результат может существенно отличаться от правильного Алгоритмы синхронизации abcdef ? abdcef abdecf abdefc. . . defabc Количество вариантов выполнения n процессов, cостоящих из m атомарных действий (каждый) (nґ m)! _______ (m!) n Для n=2 и m=3 вариантов: 20 6

Interleaving P = (a-> b-> c-> END). Q = (d-> e-> f-> END). ||PQ Interleaving P = (a-> b-> c-> END). Q = (d-> e-> f-> END). ||PQ = (P || Q). Алгоритмы синхронизации 6

Детерминированные и недетерминированные активности Пример. Пусть есть две активности P и Q, состоящие из Детерминированные и недетерминированные активности Пример. Пусть есть две активности P и Q, состоящие из двух атомарных операций каждая: P: x=2 Q: x=3 y=x-1 y=x+1 Возможны четыре разных набора значений переменных (nґ m)! _____ n (m!) (x, y): (2, 1) (2, 4) (2, 3) (2, 1) (3, 4) (3, 2) ) ) Множество значений переменных недетерминированно – когда при одинаковых начальных данных возможны разные результаты Процесс должен обладать ДЕТЕРМИНИРОВАННЫМ НАБОРОМ значений – когда при одинаковых начальных данных всегда получается только один результат Алгоритмы синхронизации 7

Достаточные условия детерминированности Как узнать, является ли заданный набор активностей детерминированным? Как бы несущественное Достаточные условия детерминированности Как узнать, является ли заданный набор активностей детерминированным? Как бы несущественное замечание Если для каждой программы имеются множества входных и выходных переменных, то для каждой атомарной операции тоже существуют множества входных и выходных переменных. Это – те конкретные наборы переменных, которые атомарная операция · перед выполнением считывает, · с ними совершает заданные действия, · а после выполнения записывает Алгоритмы синхронизации 8

Условия Бернстайна (Bernstain) Для программы P: (из двух строк) 1) x = u+v 2) Условия Бернстайна (Bernstain) Для программы P: (из двух строк) 1) x = u+v 2) y = x*w Входные переменные (Read) Выходные переменные (Write) R 1 = {u, v} W 1 = {x} R 2 = {x, w} W 2 = {y} Множество W(P)={x, y} Множество R(P)={u, v, x, w} Переменная x присутствует как в R(P) так и в W(P) Если для двух данных активностей P и Q известно, что 1) W(P) ∩ W(Q) = {ø} У них нет общих переменных, в которые 2) W(P) ∩ R(Q) = {ø} одна активность пишет, 3) R(P) ∩ W(Q) = {ø} а другая читает то выполнение P и Q будет детерминировано Алгоритмы синхронизации 9

Условия Бернстайна (Bernstain) Два уточнения Условия Бернстайна могут соблюдаются, только для невзаимодействующих процессов Достаточность Условия Бернстайна (Bernstain) Два уточнения Условия Бернстайна могут соблюдаются, только для невзаимодействующих процессов Достаточность заключается в том, что если условия не соблюдены, то параллельное выполнение двух программ может быть(!!) и недетерминировано. Чтобы активности, совместно использующие и обменивающиеся информацией образовывали ДЕТЕРМИНИРОВАННЫЙ НАБОР, необходимо ограничить число возможных чередований атомарных операций. Это можно сделать явно синхронизируя выполняющихся программы и/или обеспечивая упорядоченный доступ программ к данным Алгоритмы синхронизации 10

Состояние состязания (race condition) В рассмотренных примерах процессы как бы состязались за вычисление значений Состояние состязания (race condition) В рассмотренных примерах процессы как бы состязались за вычисление значений переменных x и y Про НЕДЕТЕРМИНИРОВАННЫЙ набор значений для активностей говорят, что он находится в состоянии состязания (race condition) Упорядоченный доступ к разделяемым данным (если не важна его очередность) возможен, если обеспечить каждому процессу монопольное право доступа к этим данным Алгоритмы синхронизации 11

Взаимоисключение (mutual exclusion) Каждый процесс, обращающийся к разделяемым ресурсам, должен исключить одновременность общения с Взаимоисключение (mutual exclusion) Каждый процесс, обращающийся к разделяемым ресурсам, должен исключить одновременность общения с этими ресурсами всех других процессов ( чтобы не получить недетерминированный набор ) Такое требование называется взаимным исключением (mutual exclusion) Но если для получения правильных результатов существенна и очередность доступа к разделяемым ресурсам, то только взаимоисключенья не достаточны Алгоритмы синхронизации 12

Состояние состязания (race condition) и взаимоисключение (mutual exclusion) Ранее был рассмотрен пример про две Состояние состязания (race condition) и взаимоисключение (mutual exclusion) Ранее был рассмотрен пример про две активности P и Q, состоящие из двух атомарных операций каждая: P: x=2 y = x-1 Q: x=3 z = x+1 Этот набор НЕДЕТЕРМИНИРОВАН – поскольку происходит состязание процессов (race condition) за использование переменной x Если очередность доступа к переменным несущественна избежать НЕДЕТЕРМИНИРОВАННОГО поведения можно с помощью метода взаимного исключения (mutual exclusion) Алгоритмы сихронизации 13

Критическая секция Часть программы, выполнение которой может привести к возникновению race condition называется КРИТИЧЕСКОЙ Критическая секция Часть программы, выполнение которой может привести к возникновению race condition называется КРИТИЧЕСКОЙ СЕКЦИЕЙ (critical section) Чтобы исключить эффект состязания по отношению к некоторому ресурсу, выполнение необходимо организовать так, чтобы в каждый момент времени только один процесс мог находиться в своей критической секции, связанной с этим ресурсом При написании программ, взаимное исключение необходимо обеспечить именно в критических секциях Алгоритмы синхронизации 14

Критическая секция ВАЖНО!!! Критическая секция должна выполняться как одна атомарная операция Есть занятный пример, Критическая секция ВАЖНО!!! Критическая секция должна выполняться как одна атомарная операция Есть занятный пример, в котором псевдопараллельные взаимодействующие процессы представлены как действия 3 -х студентов после занятий (!) и в конце недели (!!!!) Алгоритмы синхронизации 15

Критическая секция Время 17 -05 Студент 1 Приходит в комнату 17 -07 Студент 2 Критическая секция Время 17 -05 Студент 1 Приходит в комнату 17 -07 Студент 2 Студент 3 Уходит за пивом 17 -09 Приходит в комнату 17 -11 Уходит за пивом Приходит в комнату 17 -13 17 -15 17 -17 Уходит за пивом Достает 6 бут. пива Покупает 6 бут. пива 17 -19 Покупает 6 бут. пива 17 -21 17 -23 Приносит пиво 17 -25 Приходит в комнату Приносит пиво 17 -27 Критический участок для каждого процесса — от операции “Обнаруживает, что пива нет” до операции “Возвращается в комнату” Алгоритмы синхронизации Приходит в комнату Приносит пиво В результате отсутствия взаимоисключения мы из ситуации “Нет пива” попадаем в ситуацию “Слишком много пива” 16

Критическая секция Для решения задачи необходимо, чтобы в том случае, когда процесс находится в Критическая секция Для решения задачи необходимо, чтобы в том случае, когда процесс находится в своем критическом участке, другие процессы не могли войти в свои критические участки Критический участок должен сопровождаться прологом (entry section) – например, “закрыть дверь изнутри на засов” и эпилогом (exit section) – например, “отодвинуть засов” В прологе процесс должен получить разрешение на вход в критический участок, а в эпилоге – должен сообщить другим процессам, что он покинул критическую секцию Алгоритмы синхронизации 17

Структура взаимодействующего процесса В общем случае структура процесса, участвующего во взаимодействии, может быть представлена Структура взаимодействующего процесса В общем случае структура процесса, участвующего во взаимодействии, может быть представлена следующим образом: while (some condition) { entry section critical section exit section Под remainder section понимаются все атомарные операции, } не входящие в critical section Каковы способы организации пролога и эпилога критического участка ? Алгоритмы синхронизации 18

Требования, предъявляемые к алгоритмам 1) Задача должна быть решена ТОЛЬКО программным способом 2) Не Требования, предъявляемые к алгоритмам 1) Задача должна быть решена ТОЛЬКО программным способом 2) Не должны использоваться какие-либо предположения… • об относительных скоростях выполнения процессов • о числе процессоров, участвующих в реализации 3) Должны выполнятся условия взаимоисключения (mutual exclusion). Если существует процесс, который уже исполняется в своей критической секции, то не должны существовать какие-либо другие процессы, исполняющиеся в своих критических секциях 19 Алгоритмы синхронизации

Требования, предъявляемые к алгоритмам 4) Условие прогресса (progress) Если нет процессов, выполняющихся в критических Требования, предъявляемые к алгоритмам 4) Условие прогресса (progress) Если нет процессов, выполняющихся в критических секциях, и имеются процессы, желающие в них войти, то … 1. В выборе «счастливчика» ( процесса, который войдет в свою критическую секцию ) должны участвовать только те процессы, которые не исполняются в remainder section. 2. Решение обязано приниматься за конечное время После отрывания контроля у билетика, очередь на вход должна быстро рассосаться Алгоритмы синхронизации 20

Требования, предъявляемые к алгоритмам 5) Условие ограниченного ожидания (bound waiting) 1. Не должно возникать Требования, предъявляемые к алгоритмам 5) Условие ограниченного ожидания (bound waiting) 1. Не должно возникать бесконечного ожидания для входа процесса в свой критический участок от того момента, когда процесс запросил разрешение на вход в критическую секцию, и до того момента, когда он это разрешение получил… 2. Другие процессы могут пройти через свои критические участки лишь ограниченное число раз Выходить «на минуточку» из кинозала можно только один раз Алгоритмы синхронизации 21

Программные алгоритмы взаимодействия Наиболее простое решение Запрет прерываний while (some condition) { запретить все Программные алгоритмы взаимодействия Наиболее простое решение Запрет прерываний while (some condition) { запретить все прерывания critical section разрешить все прерывания remainder section } Не должен применяться пользователем ! В результате ошибки пользователя, запрет прерываний в системе, может зациклить или завершить свой процесс. Потребуется перезагрузка !!! Алгоритмы синхронизации 22

Программные алгоритмы взаимодействия Переменная-замок Shared int lock = 0; while (some condition) { while Программные алгоритмы взаимодействия Переменная-замок Shared int lock = 0; while (some condition) { while (lock=0); | lock = 1; critical section lock = 0; remainder section } Два процесса одновременно выполняют свои критические секции while (some condition) { while (lock=0); lock = 1; critical section lock = 0; remainder section } Не удовлетворяется условие 3 (mutual exclusion), поскольку действие: Алгоритмы синхронизации while(lock=0); lock=1 - не является атомарным 23

Программные алгоритмы взаимодействия Строгое чередование (Явно указывается, кто может войти в критический участок) Shared Программные алгоритмы взаимодействия Строгое чередование (Явно указывается, кто может войти в критический участок) Shared int turn = 1; 0; Pi 0 P Если turn = 0, но процесс P 0 НЕ ХОЧЕТ НЕДОСТАТОК. (чем-то занят), а P 1 уже готов войти Процессы ничего не знают в critical section, то он не может section о состоянии друга этого сделать (!), даже если P 0 в текущий момент времени ! находится в remainder section P 1 while (some condition) { } 0); while (turn = i); critical section 1; turn = 1 - i; remainder section while (some condition) { while (turn = 1); critical section turn = 0; remainder section } Условие взаимоисключения выполняется Нарушается условие прогресса Алгоритмы синхронизации 24

Программные алгоритмы взаимодействия Флаги готовности P 0 P 1 Shared int ready[2] = {0, Программные алгоритмы взаимодействия Флаги готовности P 0 P 1 Shared int ready[2] = {0, 0}; {1, 1}; Pi 0 while (some condition) { ready[0]= 1; ; ready[i] = 1 while (ready [1]=0); (ready[1 -i]); critical section ready[0] = 0; ready[i] = 0; remainder section } Оба присваивания ready[0] Послепроцесса бесконечно = 1 долго ждут передает планировщикдруга процессор на входе в критическую секцию от процесса P 0 процессу P 1, Эта ситуация названа который также выполняет тупиковой (deadlock) присваивание ready[1] = 1 P 1 while (some condition) { ready[1] = 1; while (ready [0]=0); critical section ready[1] = 0; remainder section } Условие условия прогресса нарушается 1 -я частьвзаимоисключения выполняется 2 - я часть условия прогресса выполняется Алгоритмы синхронизации 25

Программные алгоритмы взаимодействия Первое решение, удовлетворяющее всем требованиям и использующее рассмотренные идеи, было предложено Программные алгоритмы взаимодействия Первое решение, удовлетворяющее всем требованиям и использующее рассмотренные идеи, было предложено датским математиком Деккером (Dekker) В 1981 году Петерсон (Peterson) предложил более изящное решение Алгоритмы синхронизации 26

Алгоритм Петерсона Пусть два процесса имеют доступ Shared int ready[2] = {0, 0}; к Алгоритм Петерсона Пусть два процесса имеют доступ Shared int ready[2] = {0, 0}; к массиву флагов готовности и Shared int turn; к переменной, задающей очередь Pi 0 while (some condition) { ready[i] = 1 ready[0]= 1; ; turn = 1 ; - i; turn = 1 while(ready[1 -i]=0 and turn=1 -i while (ready[1]=0 and turn=0); ); } critical section ready[0] = 0; ready[i] = 0; remainder section P 1 while (some condition) { ready[1] = 1; turn = 0; while (ready[0]=0 and turn=1); critical section ready[1] = 0; remainder section } Все пять условий выполняются ! Алгоритмы синхронизации 27

Алгоритм Петерсона Доказательство выполнения (методом от противного) условия взаимного исключения 1. Пусть оба процесса Алгоритм Петерсона Доказательство выполнения (методом от противного) условия взаимного исключения 1. Пусть оба процесса одновременно оказались внутри своих критических секций Надо заметить, что, например, процесс P 0 может войти в критическую секцию, только если и ready[1] = 0 (первый процесс не готов) и turn = 0 (настала очередь P 0) Но если бы оба процесса одновременно Напоминание текста для Pi while (some condition) { выполняли свои критические секции, то значения флагов готовности для этих ready[i] = 1; turn = 1 - i; процессов были бы ОБА(!) равны 1 Более того, и переменная turn должна была бы одновременно иметь значения и 0 и 1 !!! while(ready[1 -i]=0 and turn=1 -i); critical section ready[i] = 0; remainder section } Получается первое противоречие Алгоритмы синхронизации 29

Алгоритм Петерсона 2. Пусть P 0 первым вошел в критический участок. Чтобы это случилось, Алгоритм Петерсона 2. Пусть P 0 первым вошел в критический участок. Чтобы это случилось, надо чтобы P 1 (другой процесс) выполнил перед вхождением во ВНУТРЕННИЙ цикл while предваряющий оператор turn = 0 Однако после этого P 1 не смог бы Напоминание текста для P i перейти во ВНУТРЕННИЙ цикл до while (some condition) { ready[i] = 1; окончания критического участка turn = 1 - i; процессом P 0, так как при входе while(ready[1 -i]=0 and turn=1 -i); этого P 0 в цикл помимо turn = 0 critical section установилось и ready[0] = 1 ready[i] = 0; remainder section } А эти значения не могут измениться до тех пор, пока P 0 не покинет свой критический участок Получается второе противоречие Соблюдаются Алгоритмы синхронизации условия взаимного исключения 30

Алгоритм Петерсона Доказательство выполнения условия прогресса 1. Видно, что P 0 не может войти Алгоритм Петерсона Доказательство выполнения условия прогресса 1. Видно, что P 0 не может войти в свою критическую секцию только, когда одновременно ready[1] = 1 и turn = 1 Только если процесс P 1 не готов к выполнению критического участка, то ready[1] = 0, и … процесс P 0 может осуществить вход Если процесс P 1 готов Напоминание текста для Pi while (some condition) { ready[i] = 1; turn = 1 - i; while(ready[1 -i]=0 and turn=1 -i); critical section ready[i] = 0; remainder section } к выполнению критического участка, то ready[1] = 1 и для turn возможны два варианта: Значение turn Разрешает войти в критическую секцию… =0 =1 Алгоритмы синхронизации процессу P 0 процессу P 1 31

Алгоритм Петерсона Если процесс P 1 завершил выполнение критического участка, то он сбросит свой Алгоритм Петерсона Если процесс P 1 завершил выполнение критического участка, то он сбросит свой флаг готовности ready[1] = 0 , разрешая процессу P 0 приступить Напоминание текста для Pi { к выполнению критической работы. while (some condition) Выполняется условие прогресса ready[i] = 1; turn = 1 - i; while(ready[1 -i]=0 and turn=1 -i); critical section ready[i] = 0; remainder section } 2. Видно, что процесс P 0 во время ожидания входа в свой критический участок не изменяет значения переменных Следовательно, он сможет начать исполнение своего критического участка после не более чем одного прохода по критической секции конкурирующего процесса P 1 Соблюдаются Алгоритмы синхронизации условия ограниченного ожидания 31

Замечания к Алгоритму Петерсона Алгоритм Петерсона не работает, если планирование процессов выполняется по алгоритму Замечания к Алгоритму Петерсона Алгоритм Петерсона не работает, если планирование процессов выполняется по алгоритму приоритетного планирования без квантования. ПОЯСНЕНИЕ. Если низкоприоритетный P 0 зашел в свой критический участок, но возникло прерывание от высокоприоритетного P 1 тогда этот, более приоритетный процесс зациклится в своём критическом участке, не давая пропустить P 0, поскольку не возникнет необходимого переключения Алгоритм Петерсона дает решение задачи взаимодействия только для двух (взаимодействующих) процессов Алгоритмы синхронизации 32

Программные алгоритмы взаимодействия Алгоритм булочной (Bakery algorithm) (Организация взаимодействия n процессов) (ПРАВИЛЬНЕЕ - это Программные алгоритмы взаимодействия Алгоритм булочной (Bakery algorithm) (Организация взаимодействия n процессов) (ПРАВИЛЬНЕЕ - это алгоритм обслуживания пациентов в поликлинике, причём врач — это критический участок ) 1. Каждый вновь прибывающий пациент(процесс) получает для обслуживания талончик с номером 2. Пациент(процесс) с наименьшим номером талончика обслуживается следующим Алгоритмы синхронизации 33

Алгоритм булочной (Bakery algorithm) Два важных замечания к алгоритму · Из-за неатомарности операции вычисления Алгоритм булочной (Bakery algorithm) Два важных замечания к алгоритму · Из-за неатомарности операции вычисления следующего номера алгоритм булочной не гарантирует: что у всех процессов будут талончики с разными номерами · В случае равенства номеров у двух или более клиентов первым должен обслуживается клиент с меньшим значением имени ( имена можно сравнивать, например, в лексикографическом порядке) Алгоритмы синхронизации 33

Алгоритм булочной (Bakery algorithm) Для алгоритма необходимы разделяемые ресурсы, а именно, два массива: Для Алгоритм булочной (Bakery algorithm) Для алгоритма необходимы разделяемые ресурсы, а именно, два массива: Для каждого процесса Pk имеется свой номер очереди Shared number: array[1. . n] of integer=[0, … , 0]; (Начальные значения всех элементов = 0 ) Для всех процессов Pk определён один массив логических величин Shared choosing: array[1. . n] of boolean=[false, …, false]; (Начальные значения всех элементов = false, что означает, что соответствующему процессу номер не задан ) Алгоритмы синхронизации 34

Алгоритм булочной (Bakery algorithm) Основная идея реализации пролога и эпилога критической для процесса Pi Алгоритм булочной (Bakery algorithm) Основная идея реализации пролога и эпилога критической для процесса Pi : Repeat { 1. Получаем процесс i и задаём ему уникальный номер } { 2. Ищем неудовлетворённый процесс j, с номером большем, чем у обрабатываемого процесса } critical section number[i] : = 0; remainder section until false; Алгоритмы синхронизации Процесс Pi в критической секции больше не нуждается 35

Алгоритм булочной (Bakery algorithm) Часть 1. Идея реализации для процесса Pi : Shared number: Алгоритм булочной (Bakery algorithm) Часть 1. Идея реализации для процесса Pi : Shared number: array[1. . n] of integer= [0, … , 0]; Shared choosing: array[1. . n] of boolean=[false, …, false]; { 1. Получаем процесс i и задаём ему уникальный номер } choosing[i] : = true; number[i] : = max( number[1. . n] ) + 1; choosing[i] : = false; Использованы следующие обозначения: а max(a 0, a 1, … , an) - это некое число m , такое, что m >= ai для всех i = 0, … , n Алгоритмы синхронизации 35

Алгоритм булочной (Bakery algorithm) Часть 2. Идея реализации для процесса Pi : { 2. Алгоритм булочной (Bakery algorithm) Часть 2. Идея реализации для процесса Pi : { 2. Ищем неудовлетворённый процесс j, с номером большем, чем у обрабатываемого процесса } for j : = 1 to n while choosing[j]=true do no-op; while ( number[j] ≠ 0 and (number[j], j) < (number[i], i) ) end for; do no-op; Использованы следующие обозначения: а соотношение (a, b) < (c, d) верно, если a < c или если a = c , то b < d Итогом работы частей 1 и 2 будет получение для процессов соответственно number[i] и number[j] Алгоритмы синхронизации 35

Алгоритм булочной (Bakery algorithm) Общий вид алгоритма Repeat { 1. Получение номера для процесса Алгоритм булочной (Bakery algorithm) Общий вид алгоритма Repeat { 1. Получение номера для процесса i} { 2. Получение номера для процесса j, т. е. убеждаемся, что существуют конкурирующие процессы и выбранный процесс с наименьшим номером } critical section number[i] : = 0; remainder section until false; Алгоритмы синхронизации Недостатки алгоритма • Много кодов и циклов • Многотрудное N • Возможны НЕзануления 35

Аппаратная поддержка взаимоисключений Функция Test-And-Set одновременно и считывает значение заданной переменной и устанавливает её Аппаратная поддержка взаимоисключений Функция Test-And-Set одновременно и считывает значение заданной переменной и устанавливает её в 1 function Test-and-Set (var look: integer): integer; begin Изменённый алгоритм Test-and-Set : = look; Переменная-замок look : = 1; shared int lock = 0; end; На ассемблере IA 32: Bit-Test-and-Set while (some condition) Пример (bit 5 - это look, реализованный в бите 5 общей переменной х) . data x WORD 1000 b. code BTS x, bit 5 ; CF=0 x=10101000 b Возвращаемое значение Алгоритмы синхронизации Новое значение look { while (Test-And-Set(lock) = 0); critical section lock = 0; remainder section } Теперь нарушается условие 5 ограниченного ожидания 36

Аппаратная поддержка взаимоисключений Команда Swap обменивает значения двух переменных, находящихся в памяти procedure Swap Аппаратная поддержка взаимоисключений Команда Swap обменивает значения двух переменных, находящихся в памяти procedure Swap ( int a, b) int tmp = a; a = b; b = tmp; Изменённый алгоритм Переменная-замок shared int lock = 0; int key = 0; while (some condition) { key = 1; Swap(lock, key); while (key=0); critical section lock = 0; remainder section } Всё равно - нарушается условие ограниченного ожидания Алгоритмы синхронизации 37

Заключение 1 /5 Последовательное выполнение некоторых действий, направленных на достижение определенной цели, называется активностью Заключение 1 /5 Последовательное выполнение некоторых действий, направленных на достижение определенной цели, называется активностью • Активности состоят из атомарных операций, выполняемых неразрывно, как единое целое • При исполнении нескольких активностей в псевдопараллельном режиме атомарные операции различных активностей могут перемешиваться между собой с соблюдением порядка следования внутри активностей Это явление получило название interleaving (чередование) Алгоритмы синхронизации 38

Заключение 2 /5 • Если результаты выполнения нескольких активностей не зависят от варианта чередования, Заключение 2 /5 • Если результаты выполнения нескольких активностей не зависят от варианта чередования, то этот набор активностей называется детерминированным • В противном случае он носит название недетерминированного • Существует достаточное условие Бернстайна для определения детерминированности набора активностей, но оно накладывает очень жесткие ограничения на набор, требуя практически не взаимодействующих активностей Алгоритмы синхронизации 39

Заключение 3 /5 • В недетерминированном наборе активностей имеет место эффект состязаний (race condition) Заключение 3 /5 • В недетерминированном наборе активностей имеет место эффект состязаний (race condition) • Устранение эффекта состязаний возможно при ограничении допустимых вариантов чередований атомарных операций с помощью синхронизации поведения активностей • Участки активностей, выполнение которых может привести к эффекту состязаний, называют критическими участками • Необходимым условием для устранения эффекта состязаний является организация взаимного исключения на критических участках Алгоритмы синхронизации 40

Заключение 4 /5 Для эффективных программных алгоритмов устранения race condition помимо условия взаимоисключения требуется Заключение 4 /5 Для эффективных программных алгоритмов устранения race condition помимо условия взаимоисключения требуется выполнение следующих условий: • алгоритмы не используют специальных команд процессора для организации взаимоисключений • алгоритмы никак не должны учитывать скорости выполнения процессов • алгоритмы обязаны удовлетворяют условиям прогресса и ограниченного ожидания Алгоритмы синхронизации 41

Заключение 5 /5 • Всем этим условиям удовлетворяют алгоритм Петерсона для двух процессов и Заключение 5 /5 • Всем этим условиям удовлетворяют алгоритм Петерсона для двух процессов и алгоритм булочной для нескольких процессов • Применение специальных команд процессора Test-And-Set и Swap, выполняющих ряд действий как атомарную операцию, позволяет существенно упростить алгоритмы, но с некоторыми оговорками Алгоритмы синхронизации 42

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