🗊 Презентация Алгоритмы синхронизации

Категория: Образование
Нажмите для полного просмотра!
Алгоритмы синхронизации, слайд №1 Алгоритмы синхронизации, слайд №2 Алгоритмы синхронизации, слайд №3 Алгоритмы синхронизации, слайд №4 Алгоритмы синхронизации, слайд №5 Алгоритмы синхронизации, слайд №6 Алгоритмы синхронизации, слайд №7 Алгоритмы синхронизации, слайд №8 Алгоритмы синхронизации, слайд №9 Алгоритмы синхронизации, слайд №10 Алгоритмы синхронизации, слайд №11 Алгоритмы синхронизации, слайд №12 Алгоритмы синхронизации, слайд №13 Алгоритмы синхронизации, слайд №14 Алгоритмы синхронизации, слайд №15 Алгоритмы синхронизации, слайд №16 Алгоритмы синхронизации, слайд №17 Алгоритмы синхронизации, слайд №18 Алгоритмы синхронизации, слайд №19 Алгоритмы синхронизации, слайд №20 Алгоритмы синхронизации, слайд №21 Алгоритмы синхронизации, слайд №22 Алгоритмы синхронизации, слайд №23 Алгоритмы синхронизации, слайд №24 Алгоритмы синхронизации, слайд №25 Алгоритмы синхронизации, слайд №26 Алгоритмы синхронизации, слайд №27 Алгоритмы синхронизации, слайд №28 Алгоритмы синхронизации, слайд №29 Алгоритмы синхронизации, слайд №30 Алгоритмы синхронизации, слайд №31 Алгоритмы синхронизации, слайд №32 Алгоритмы синхронизации, слайд №33 Алгоритмы синхронизации, слайд №34 Алгоритмы синхронизации, слайд №35 Алгоритмы синхронизации, слайд №36 Алгоритмы синхронизации, слайд №37 Алгоритмы синхронизации, слайд №38 Алгоритмы синхронизации, слайд №39 Алгоритмы синхронизации, слайд №40 Алгоритмы синхронизации, слайд №41 Алгоритмы синхронизации, слайд №42 Алгоритмы синхронизации, слайд №43 Алгоритмы синхронизации, слайд №44 Алгоритмы синхронизации, слайд №45 Алгоритмы синхронизации, слайд №46 Алгоритмы синхронизации, слайд №47 Алгоритмы синхронизации, слайд №48 Алгоритмы синхронизации, слайд №49 Алгоритмы синхронизации, слайд №50 Алгоритмы синхронизации, слайд №51 Алгоритмы синхронизации, слайд №52 Алгоритмы синхронизации, слайд №53 Алгоритмы синхронизации, слайд №54

Содержание

Вы можете ознакомиться и скачать презентацию на тему Алгоритмы синхронизации. Доклад-сообщение содержит 54 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1


Алгоритмы синхронизации Судаков А.А. “Параллельные и распределенные вычисления” Лекция 15
Описание слайда:
Алгоритмы синхронизации Судаков А.А. “Параллельные и распределенные вычисления” Лекция 15

Слайд 2


План Необходимость синхронизации Синхронизация в системах с общей памятью Спин-блокировки Секвентные блокировки Семафоры Условные переменные...
Описание слайда:
План Необходимость синхронизации Синхронизация в системах с общей памятью Спин-блокировки Секвентные блокировки Семафоры Условные переменные Синхронизация в системах с распределенной памятью Барьер

Слайд 3


Литература Лекции по параллельным и распределенным вычислениям
Описание слайда:
Литература Лекции по параллельным и распределенным вычислениям

Слайд 4


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

Слайд 5


Пример: файл данных Процесс 1 Записывает данные расчета в файл Процесс 2 Считывает из файла данные, записанные процессом 1 и работает с ними Проблема...
Описание слайда:
Пример: файл данных Процесс 1 Записывает данные расчета в файл Процесс 2 Считывает из файла данные, записанные процессом 1 и работает с ними Проблема Чтобы процесс 2 нормально отработал, необходимо, чтобы перед считыванием данных данные уже были в файле Как решить Обеспечить гарантию, что процесс 2 начнет считывать данные только после того, как процесс 1 их запишет

Слайд 6


Пример 2: общая переменная a=1 Поток1 : считываем a a=1 Поток2 : увеличивает a на 1 a=2 Поток1 : записывает a назад a=2 Поток2 : считываем a a=2...
Описание слайда:
Пример 2: общая переменная a=1 Поток1 : считываем a a=1 Поток2 : увеличивает a на 1 a=2 Поток1 : записывает a назад a=2 Поток2 : считываем a a=2 Поток2 : увеличивает a на 1 a=3 Поток2: записывает a назад a=3 Результат - правильный

Слайд 7


Критические участки Критический участок – это код, который оперирует с совместно используемыми данными Состояние конкуренции за ресурс (race...
Описание слайда:
Критические участки Критический участок – это код, который оперирует с совместно используемыми данными Состояние конкуренции за ресурс (race condition) – ситуация в которой параллельный доступ к данным может привести к тому, что данные окажутся в неопределенном или разрушенном состоянии

Слайд 8


Взаимоисключающий доступ Чтобы гарантировать консистентность данных – необходимо, чтобы все обращения к данным, которые могут привести к их...
Описание слайда:
Взаимоисключающий доступ Чтобы гарантировать консистентность данных – необходимо, чтобы все обращения к данным, которые могут привести к их разрушению выполнялись строго последовательно – взаимоисключающим образом

Слайд 9


Атомарные операции Атомарные операции – операции, которые выполняются не прерываясь и не перекрываясь. Две атомарные операции с одними и теми же...
Описание слайда:
Атомарные операции Атомарные операции – операции, которые выполняются не прерываясь и не перекрываясь. Две атомарные операции с одними и теми же данными могут выполняться строго последовательно

Слайд 10


Пример: вставка в связанный список Поток 1 Вставляет элемент new перед элементом 2 Поток 2 Удаляет элемент 2 Проблема Если не принять соответствующих...
Описание слайда:
Пример: вставка в связанный список Поток 1 Вставляет элемент new перед элементом 2 Поток 2 Удаляет элемент 2 Проблема Если не принять соответствующих мер, то элемент new может остаться указывать на удаленный элемент Решение – все операции вставки-удаления элементов должны быть атомарными

Слайд 11


Синхронизация в системах с общей памятью Память общая –> возможность доступа к общим данным –> возможность конкуренции за ресурс Очень часто...
Описание слайда:
Синхронизация в системах с общей памятью Память общая –> возможность доступа к общим данным –> возможность конкуренции за ресурс Очень часто необходима синхронизация доступа к данным Удобство и скорость доступа к общим данным компенсируется необходимостью использования синхронизации

Слайд 12


Атомарные операции с общей памятью Часть операций обеспечивается аппаратными инструкциями Целочисленное сложение в ячейке памяти Битовые операции Для...
Описание слайда:
Атомарные операции с общей памятью Часть операций обеспечивается аппаратными инструкциями Целочисленное сложение в ячейке памяти Битовые операции Для сложных операций необходимо использовать программные средства синхронизации блокировки связанного списка Для RISC процессоров часто даже для простых операций приходится использовать программные средства

Слайд 13


Блокировки Блокировка – ресурс (переменная), который обеспечивает к себе взаимоисключающий доступ Блокировки Обязательные (mandatory) – при обращении...
Описание слайда:
Блокировки Блокировка – ресурс (переменная), который обеспечивает к себе взаимоисключающий доступ Блокировки Обязательные (mandatory) – при обращении к ресурсу блокировка захватывается обязательно Рекомендуемые (advisory) – при обращении к ресурсу блокировка захватывается по желанию разработчика

Слайд 14


Захват и освобождение блокировок С блокировками возможны две операции Захват Освобождение В захваченном состоянии блокировку может удерживать только...
Описание слайда:
Захват и освобождение блокировок С блокировками возможны две операции Захват Освобождение В захваченном состоянии блокировку может удерживать только один поток (процесс)‏ После освобождения блокировку снова можно захватывать

Слайд 15


Обеспечение атомарности с помощью блокировки lock – общая переменная List – общий связанный список Поток 1 Захватить(lock)‏ Если захват успешный, то...
Описание слайда:
Обеспечение атомарности с помощью блокировки lock – общая переменная List – общий связанный список Поток 1 Захватить(lock)‏ Если захват успешный, то все остальные будут ждать захвата Вставка (list)‏ Освободить(lock)‏

Слайд 16


Предотвращение состояний конкуренции Доступ к совместно используемым ресурсам необходимо блокировать В критических участках необходимо использовать...
Описание слайда:
Предотвращение состояний конкуренции Доступ к совместно используемым ресурсам необходимо блокировать В критических участках необходимо использовать блокировки Блокировать необходимо данные, а не код! Блокировки необходимо связывать с совместными данными

Слайд 17


Взаимоблокировка (deadlock)‏ Общие блокировки Lock_a, lock_b Процесс 1 Захватить (lock_a)‏ Захватить (lock_b)‏ Вечно ожидаем освобождения lock_b...
Описание слайда:
Взаимоблокировка (deadlock)‏ Общие блокировки Lock_a, lock_b Процесс 1 Захватить (lock_a)‏ Захватить (lock_b)‏ Вечно ожидаем освобождения lock_b lock_b не может быть освобождена, процесс 2 застрял на lock_a

Слайд 18


Самоблокировка Блокировка lock Процесс Захватить (lock)‏ .. Захватить (lock)‏ Попытка захватить уже захваченную и никогда не освобождаемую блокировку...
Описание слайда:
Самоблокировка Блокировка lock Процесс Захватить (lock)‏ .. Захватить (lock)‏ Попытка захватить уже захваченную и никогда не освобождаемую блокировку приведет к зависанию

Слайд 19


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

Слайд 20


Еще раз о состоянии конкуренции Лишняя операция освобождения может привести к состоянию конкуренции Процесс Захват()‏ … Освобождение()‏ Освобождаем...
Описание слайда:
Еще раз о состоянии конкуренции Лишняя операция освобождения может привести к состоянию конкуренции Процесс Захват()‏ … Освобождение()‏ Освобождаем захваченную нами блокировку (ресурс свободен)‏ Освобождение()‏ Освобождаем захваченную кем-то другим блокировку Предоставляем конкурентный доступ к ресурсу кому-то третьему

Слайд 21


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

Слайд 22


Спин блокировка с атомарными операциями Test-and-set lock Атомарная машинная инструкция tas(addr,val)‏ Атомарно считывает предыдущее значение из...
Описание слайда:
Спин блокировка с атомарными операциями Test-and-set lock Атомарная машинная инструкция tas(addr,val)‏ Атомарно считывает предыдущее значение из области памяти addr и устанавливает значение этой области памяти в val

Слайд 23


Блокировки без атомарных операций Используются последовательные операции записи, чтения, проверки нескольких переменных Алгоритм Петерсона Два...
Описание слайда:
Блокировки без атомарных операций Используются последовательные операции записи, чтения, проверки нескольких переменных Алгоритм Петерсона Два процессора 0 и 1 me() – номер текущего процессора Три общих переменных Flag[2] – кто ожидает Victim – кто захватывает

Слайд 24


Свойства Алгоритм Петерсона обеспечивает взаимоисключающий доступ к критическому разделу Алгоритм Петерсона гарантирует отсутствие бесконечного...
Описание слайда:
Свойства Алгоритм Петерсона обеспечивает взаимоисключающий доступ к критическому разделу Алгоритм Петерсона гарантирует отсутствие бесконечного ожидания

Слайд 25


Доказательство взаимоисключения Запишем последовательность действий обоих процессоров Запись0(flag[0]=1)->запись0(victim=0)...
Описание слайда:
Доказательство взаимоисключения Запишем последовательность действий обоих процессоров Запись0(flag[0]=1)->запись0(victim=0) ->чтение0(flag[1])->чтение0(victim)‏ Запись1(flag[1]=1)->запись1(victim=1) ->чтение1(flag[0])->чтение1(victim)‏ Допустим, что оба процессора вошли в критический раздел Пусть для определенности процессор 0 записал значение переменной victim последним Все значения flag[] уже записаны Тогда последовательность записи этой переменной была следующей запись1(victim=1)->запись0(victim=0)‏ Раз процессор 0 вошел в критический раздел, то он прочитал flag[1]=0, victim=0 Значит последовательность операций была запись0(victim=0)-> чтение1(flag[1]==0)‏ Учитывая первые 3 уравнения Запись1(flag[1]=1)->запись1(victim=1) ->запись0(victim=0)->чтение1(flag[1]==0)‏ Получается, что значение переменной flag[1] поменялось после записи victim, а такого не может быть

Слайд 26


Доказательство отсутствия бесконечного ожидания Пусть процессор 0 бесконечно ожидает в цикле, тогда flag[1]=1 и victim=0 Такая ситуация может...
Описание слайда:
Доказательство отсутствия бесконечного ожидания Пусть процессор 0 бесконечно ожидает в цикле, тогда flag[1]=1 и victim=0 Такая ситуация может возникнуть только когда процессор 1 выполнил команду flag[me()]=1; и еще не выполнил команду victim = me(); Эти две команды идут подряд, поэтому, если выполнилась первая, то вторая тоже скоро выполнится

Слайд 27


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

Слайд 28


Блокировка в состоянии конфликта Спин-блокировка - сложный алгоритм, который выполняется несколькими процессами одновременно Когда за захват...
Описание слайда:
Блокировка в состоянии конфликта Спин-блокировка - сложный алгоритм, который выполняется несколькими процессами одновременно Когда за захват блокировки состязаются потоки – блокировка находится в состоянии конфликта (contended)‏ Различные алгоритмы требуют разного количества операций при обработке состояния конфликта при большом количестве потоков

Слайд 29


Эффективность блокировок Существуют алгоритмы порядка O(n2) и O(n) операций для выполнения проверок в состоянии конфликта При увеличении количества...
Описание слайда:
Эффективность блокировок Существуют алгоритмы порядка O(n2) и O(n) операций для выполнения проверок в состоянии конфликта При увеличении количества потоков время выполнения может расти из-за конфликтов при захвате

Слайд 30


Спин-блокировки для реальных систем Атомарные операции – медленные Запись в общую память может выполняться не сразу, а буферизироваться процессором...
Описание слайда:
Спин-блокировки для реальных систем Атомарные операции – медленные Запись в общую память может выполняться не сразу, а буферизироваться процессором Компилятор может пытаться оптимизировать код и изменять порядок операций Необходимо использовать барьеры памяти, компилятора Существует множество библиотечных функций для обеспечения блокировок

Слайд 31


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

Слайд 32


Пример использования блокировки чтения-записи //Общая переменная rw_lock lock; //общий связанный список Llist list; Поток 1 write_lock(&lock);...
Описание слайда:
Пример использования блокировки чтения-записи //Общая переменная rw_lock lock; //общий связанный список Llist list; Поток 1 write_lock(&lock); //эксклюзивный //доступ на запись insert(list); write_unlock(&lock);

Слайд 33


Пример реализации rw блокировки int readers=0; int writes=0; Spinlock l; void read_lock(){ while(1){ lock(l); if(!writers) { readers++; unlock();...
Описание слайда:
Пример реализации rw блокировки int readers=0; int writes=0; Spinlock l; void read_lock(){ while(1){ lock(l); if(!writers) { readers++; unlock(); break; } unlock(l); } } Void read_unlock(){ lock(l); readers--; unlock(l) }

Слайд 34


Отказ обслуживания записи при обслуживании чтения Пример: 1 поток записи 1000 потоков чтения Один поток чтения захватывает блокировку Все потоки...
Описание слайда:
Отказ обслуживания записи при обслуживании чтения Пример: 1 поток записи 1000 потоков чтения Один поток чтения захватывает блокировку Все потоки чтения ею пользуются 1 поток записи ждет долго! Реальный пример Системный таймер 1 поток записывает значение времени в общую переменную Остальные потоки читают это значение В нашем случае часы будут отставать

Слайд 35


Блокировки чтения-записи с приоритетом на запись Секвентная блокировка (seq_lock)‏ Вводится счетчик Перед началом каждой операции записи значение...
Описание слайда:
Блокировки чтения-записи с приоритетом на запись Секвентная блокировка (seq_lock)‏ Вводится счетчик Перед началом каждой операции записи значение счетчика увеличивается на 1 После окончания записи значение счетчика снова увеличивается на 1 Вначале и в конце чтения значение счетчика проверяется Если они четные, то новый акт записи закончен Если значения одинаковы, то акт записи в процессе чтения не начинался

Слайд 36


Использование секвентных блокировок //Общая переменная time_t time; //Блокировка Seqlock lock; Поток записи write_seqlock(lock); time=…;...
Описание слайда:
Использование секвентных блокировок //Общая переменная time_t time; //Блокировка Seqlock lock; Поток записи write_seqlock(lock); time=…; write_sequnlock(lock);

Слайд 37


Реализация seqlock Spinlock l; Counter c; write_seqlock(){ lock(l); c++ } write_sequnlock(){ c++ unlock(l); }
Описание слайда:
Реализация seqlock Spinlock l; Counter c; write_seqlock(){ lock(l); c++ } write_sequnlock(){ c++ unlock(l); }

Слайд 38


Недостатки spinlock Занимают процессорное время Не могут использоваться для длительного времени ожидания
Описание слайда:
Недостатки spinlock Занимают процессорное время Не могут использоваться для длительного времени ожидания

Слайд 39


Семафоры Семафоры – целочисленные переменные с которыми возможно выполнять атомарные операции увеличения/уменьшения на 1 Если значение семафора...
Описание слайда:
Семафоры Семафоры – целочисленные переменные с которыми возможно выполнять атомарные операции увеличения/уменьшения на 1 Если значение семафора становится меньшем нуля, то процесс, который выполнил такую операцию блокируется, пока значение семафора не станет большим или равным нулю Процессы, ожидающие освобождения семафора не занимают процессорное время

Слайд 40


Операции с семафорами Присвоение значения Подъем (увеличение на 1) – up()‏ Опускание (уменьшение на 1) – down()‏ Требование нулевого значение (есть...
Описание слайда:
Операции с семафорами Присвоение значения Подъем (увеличение на 1) – up()‏ Опускание (уменьшение на 1) – down()‏ Требование нулевого значение (есть не во всех реализациях) test()‏ Считывание значение read()‏ Все операции атомарные

Слайд 41


Mutex Mutex – семафор с начальным значение 1 Используется для взаимоисключающего доступа
Описание слайда:
Mutex Mutex – семафор с начальным значение 1 Используется для взаимоисключающего доступа

Слайд 42


Пример: //Общий связанный список List l; Поток записи Semaphore mutex(1); down(mutex); // mutex=0 insert(list); up(mutex);
Описание слайда:
Пример: //Общий связанный список List l; Поток записи Semaphore mutex(1); down(mutex); // mutex=0 insert(list); up(mutex);

Слайд 43


Счетный семафор Семафор со значением большим 1 может использоваться в качестве атомарного счетчика Semaphore a(1); Поток 1 Поток 2 Up(a); read(a);
Описание слайда:
Счетный семафор Семафор со значением большим 1 может использоваться в качестве атомарного счетчика Semaphore a(1); Поток 1 Поток 2 Up(a); read(a);

Слайд 44


Реализация семафоров Блокировка с помощью очереди Счетчик семафора Очередь процессов, которые захватывают семафор Очередь защищается спин-блокировкой...
Описание слайда:
Реализация семафоров Блокировка с помощью очереди Счетчик семафора Очередь процессов, которые захватывают семафор Очередь защищается спин-блокировкой Как только семафор становится меньшим нуля, процессы при захвате добавляются в очередь При отпускании семафора процессы извлекаются из очереди

Слайд 45


Пример реализации семафора Spinlock l; Int count; Queue q; //текущий процесс current down(){ lock(l)‏ if(count>0) { count--; unlock(l); } else {...
Описание слайда:
Пример реализации семафора Spinlock l; Int count; Queue q; //текущий процесс current down(){ lock(l)‏ if(count>0) { count--; unlock(l); } else { queue.insert(current); unlock(l); stop(current) } }

Слайд 46


Семафоры чтения записи По аналогии со спин блокировками чтения записи
Описание слайда:
Семафоры чтения записи По аналогии со спин блокировками чтения записи

Слайд 47


Особенности семафоров Семафоры обычно реализуются операционными системами По сравнению со спин-блокировкой семафор – «тяжелая» операция, требующая...
Описание слайда:
Особенности семафоров Семафоры обычно реализуются операционными системами По сравнению со спин-блокировкой семафор – «тяжелая» операция, требующая много времени

Слайд 48


Условные переменные Условная переменная – вид блокировки, которая позволяет информировать процессы о наступлении некоторого события Пример –...
Описание слайда:
Условные переменные Условная переменная – вид блокировки, которая позволяет информировать процессы о наступлении некоторого события Пример – срабатывание будильника

Слайд 49


Пример использование Event e; Потоки, ожидающие на события e.wait(); //ожидаем, пока событие не наступит
Описание слайда:
Пример использование Event e; Потоки, ожидающие на события e.wait(); //ожидаем, пока событие не наступит

Слайд 50


Мониторы Монитор – объект Данные+методы безопасного доступа к этим данным Обеспечивает обязательную блокировку в отличие от всех предыдущих способов...
Описание слайда:
Мониторы Монитор – объект Данные+методы безопасного доступа к этим данным Обеспечивает обязательную блокировку в отличие от всех предыдущих способов Counter{ int c; semaphore s; public: int operator ++(){…} int operator --(){…} }

Слайд 51


Барьер Барьер – коллективная синхронизация Гарантия того, что те или иные операции выполнены всеми потоками, процессами
Описание слайда:
Барьер Барьер – коллективная синхронизация Гарантия того, что те или иные операции выполнены всеми потоками, процессами

Слайд 52


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

Слайд 53


Пример реализации барьера Каждый процесс вызывает функцию Allreduce(); //ждем, пока не получим необходимых данных от всех остальных процессов
Описание слайда:
Пример реализации барьера Каждый процесс вызывает функцию Allreduce(); //ждем, пока не получим необходимых данных от всех остальных процессов

Слайд 54


Вопросы?
Описание слайда:
Вопросы?



Похожие презентации
Mypresentation.ru
Загрузить презентацию