concurrency: deadlock and starvation

87
Concurrency: Deadlock and Starvation

Upload: sheng

Post on 23-Feb-2016

140 views

Category:

Documents


1 download

DESCRIPTION

Concurrency: Deadlock and Starvation. Съдържание. Принципи на мъртвата-хватка ( Deadlock ) Предотвратяване на Deadlock Избягване на Deadlock Откриване на Deadlock Интегрирана Deadlock стратегия Проблемът “вечерящи философи” Механизми в UNIX, Linux, Solaris и Windows. Deadlock. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Concurrency: Deadlock and Starvation

Concurrency: Deadlock and Starvation

Page 2: Concurrency: Deadlock and Starvation

СъдържаниеПринципи на мъртвата-хватка

(Deadlock)Предотвратяване на DeadlockИзбягване на DeadlockОткриване на DeadlockИнтегрирана Deadlock стратегия

Проблемът “вечерящи философи”Механизми в UNIX, Linux, Solaris и

Windows

Page 3: Concurrency: Deadlock and Starvation

DeadlockМножество от процеси е блокирано без

изход, когато всеки процес е блокиран в очакване на събитие, което може да се инициира само от друг блокиран процес в множествотоОбикновено включва процеси, които се

състезават за достъп до едно и също множество ресурси

Няма ефикасно решение

Page 4: Concurrency: Deadlock and Starvation

Потенциално блокиаране без изход

I need quad A and

B

I need quad B and

C

I need quad C and B

I need quad D and A

Page 5: Concurrency: Deadlock and Starvation

Действително блокиране без изход

HALT until B is free

HALT until C is free

HALT until D is free

HALT until A is free

Page 6: Concurrency: Deadlock and Starvation

Два процеса P и QНека разгледаме

двата процеса P и QВсеки от тях

изключително се нуждае от достъп до ресурси A и B за определен период от време.

Page 7: Concurrency: Deadlock and Starvation

СъвместнаДиаграма на Deadlock

Page 8: Concurrency: Deadlock and Starvation

Алтернативна логикаДа предположим, че P

не се нуждае от двата ресурса по едно и също време.

Двата процеса могат да имат следната форма =>

Page 9: Concurrency: Deadlock and Starvation

Диаграма на алтернативната логика

Page 10: Concurrency: Deadlock and Starvation

Категории ресурси

Има две основни категории ресурси:Преизползваеми

Могат безопасно да се използват само от един процес по едно и също време и не се изчерпват от тази употреба.

КонсумативниМогат да бъдат създадени (produced) и

унищожени (consumed).

Page 11: Concurrency: Deadlock and Starvation

Преизползваеми ресурсиПримери:

Процесори, канали за вход/изход, първична и вторична памет, устройства, структури от данни като файлове,бази от данни и семафори

“Мъртва-хватка” се появява ако всеки процес държи един ресурс и изисква друг, за да продължи да се изпълнява.

Page 12: Concurrency: Deadlock and Starvation

Deadlock - ПримерИмаме два процеса, които се

състезават за незабавен достъп до файл D и пишещо устройство T.

Deadlock се появява, когато всеки процес държи единя ресурс и изисква достъп до другия.

Page 13: Concurrency: Deadlock and Starvation

Пример за преизползваеми ресурси

Page 14: Concurrency: Deadlock and Starvation

Пример 2:Memory Request

Свободното за алокиране пространство е 200Kbytes и следната последователност от събития:

Deadlock се получава, ако и двата процеса обработят второто си запитване към паметта.

P1

. . .

. . .Request 80 Kbytes;

Request 60 Kbytes;

P2

. . .

. . .Request 70 Kbytes;

Request 80 Kbytes;

Page 15: Concurrency: Deadlock and Starvation

Консумативни ресурсиПримери: Прекъсвания, сигнали,

съобщения, информация във входно/изходните буфери

Deadlock може да възникне, ако получаването на съобщението е блокиращо

Рядка комбинация от събития може да предизвика Deadlock

Page 16: Concurrency: Deadlock and Starvation

Пример за DeadlockИмаме двойка процеси, във всеки

процес се опитваме да получим съобщение от другия процес и тогава да пратим съобщение.

Page 17: Concurrency: Deadlock and Starvation

Разпределение на ресурситеГрафики

Графика, която изобразява състоянието на системата от ресурси и процеси

Page 18: Concurrency: Deadlock and Starvation

Условия завъзможен Deadlock

Взаимно изключванеСамо един процес може да използва даден

ресурс в определено времеHold-and-waitПроцес може да държи алокиран ресурс

докато чака да получи другиNo pre-emption

Нито един ресурс на може насилствено да бъде отнет от процеса, който оперира с него.

Page 19: Concurrency: Deadlock and Starvation

Действителният Deadlock се нуждае от …

Всичките три предходни условия и:Циклично чакане

Затворена верига от процеси, така че всеки процес притежава най-малко един ресурс, необходим на следващия процес във веригата

Page 20: Concurrency: Deadlock and Starvation

Разпределение на ресурситеГрафики на deadlock

Page 21: Concurrency: Deadlock and Starvation

Разпределение на ресурситеГрафики

Page 22: Concurrency: Deadlock and Starvation

Преодоляване на DeadlockСъществуват три подхода за

справянето със “мъртвата хватка”.Предотвратяване на deadlockИзбягване на deadlockОткриване на Deadlock

Page 23: Concurrency: Deadlock and Starvation

СъдържаниеПринципи на мъртвата-хватка

(Deadlock)Предотвратяване на DeadlockИзбягване на DeadlockОткриване на DeadlockИнтегрирана Deadlock стратегия

Проблемът “вечерящи философи”Механизми в UNIX, Linux, Solaris и

Windows

Page 24: Concurrency: Deadlock and Starvation

Стратегия за предотвратяване на “мъртва хватка”

Проектиране на системата по такъв начин, че възможността от възникване на deadlock да бъде изключена.

Два основни методаИндиректен – предотвратяване на трите

необходими условия да се появят наведнъж

Директен – Предотвратяване на цикличното изчакване

Page 25: Concurrency: Deadlock and Starvation

Предотвратяване на DeadlockУсловия 1 & 2

Взаимно изключванеТрябва да се поддържа от операционната

система

Hold and WaitИзисква процесът да заяви всички

необходими ресурси наведнъж

Page 26: Concurrency: Deadlock and Starvation

Предотвратяване на DeadlockУсловия 3 & 4

No PreemptionПроцесът трябва да освобождава

ресурсите и да ги изисква отновоOS may preempt a process to require it

releases its resources

Циклични изчакванияДефиниране на линейно подреждане на

типовете на ресурсите

Page 27: Concurrency: Deadlock and Starvation

СъдържаниеПринципи на мъртвата хватка

(Deadlock)Предотвратяване на Deadlock Избягване на Deadlock Откриване на Deadlock Интегрирана Deadlock стратегия

Проблемът “вечерящи философи” Механизми в UNIX, Linux, Solaris и

Windows

Page 28: Concurrency: Deadlock and Starvation

Избягване на DeadlockРешението дали текущото заделяне на

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

Изисква информация за бъдещи заявки на процесите

Page 29: Concurrency: Deadlock and Starvation

Два подхода за избягване на Deadlock

Отказ на стартирането на процесДа не се стартира процес, ако неговите

заявки могат да доведат до deadlock.

Отказ при заделянето на ресурсиДа не се правят опити за заделяне на

ресурси на един процес, ако това разпределение може да доведе до deadlock

Page 30: Concurrency: Deadlock and Starvation

Отказ при стартирането на процес

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

Не е оптималноПредполагаме най-лошият вариант: Всички

процеси ще достигнат максималните си изисквания.

Page 31: Concurrency: Deadlock and Starvation

Отказ при заделянето на ресурси

Познат още като алгоритъм на банкерите Стратегия на отказ за разпределение на ресурсите

Разглеждаме система с определен брой ресурси: State - Състоянието на системата е текущото

разпределение на ресурсите за обработка Safe state - Безопасно състояние е

разпределението, при което има най-малко една последователност, която не води до deadlock

Unsafe state – състояние, което не е безопасно

Page 32: Concurrency: Deadlock and Starvation

Определяне на безопасно състояние (Safe State)

Система, състояща се от четири процеса и три ресурса.

Разпределенията на ресурсите са направени по процесори

Кое е безопасното състояние?

Amount of Existing

Resources

Resources available

after allocation

Page 33: Concurrency: Deadlock and Starvation

Процес i

Cij - Aij ≤ Vj, за ваяко jТова не е възможно за P1,

Който има само 1 единица от R1 и се нуждае от 2 единици повече от R1, 2 единици от R2, и 2 единици от R3.

Ако заделим една единица от R3 на процес P2, Тогава P2 има вече заделени максимално

заявените ресурси и може да продължи изпълнението си докрай и да върне ресурсите в “available recourse pool”

Page 34: Concurrency: Deadlock and Starvation

След изпълнението на P2

• Може ли някой от останалите процеси да бъде изпълнен докрай?

Note P2 is completed

Page 35: Concurrency: Deadlock and Starvation

След изпълнението на P1

Page 36: Concurrency: Deadlock and Starvation

Изпълнение на P3

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

безопасното състояние.

Page 37: Concurrency: Deadlock and Starvation

Определяне на опасни състояния (Unsafe State)

Този път Да предположим, че P1 прави искане за една допълнителна единица от R1 и R3.

Това ли е безопасно?

Page 38: Concurrency: Deadlock and Starvation

Избягване на Deadlock Когато един процес, който отправя искане за

група ресурси Допускаме ,че изкането е одобрено, Съответно актуализираме състоянието на

системата Тогава се определя дали резултатът е

безопасно състояние Ако е така, заявката се изпълнява Ако не е така, процесът се блокира докато

състоянието не стане безопасно за изпълнение на заявката

Page 39: Concurrency: Deadlock and Starvation

Избягване на Deadlock:Логика

Page 40: Concurrency: Deadlock and Starvation

Избягване на Deadlock:Логика

Page 41: Concurrency: Deadlock and Starvation

Избягване на Deadlock: Предимства

Не е необходимо да подменяме и отказваме процеси както при откриването на deadlock

Не е толкова ограничително както предотвратяването на deadlock.

Page 42: Concurrency: Deadlock and Starvation

Избягване на Deadlock: Ограничения

Максималните изисквания относно ресурсите трябва да се знаят предварително

Процесите трябва да бъдат независими и без изисквания за синхронизация

Трябва да има определен брой ресурси за разпределяне

Никой процес не може да приключи (exit), докато заема дадени ресурси

Page 43: Concurrency: Deadlock and Starvation

СъдържаниеПринципи на мъртвата-хватка

(Deadlock)Предотвратяване на DeadlockИзбягване на DeadlockОткриване на DeadlockИнтегрирана Deadlock стратегия

Проблемът “вечерящи философи”Механизми в UNIX, Linux, Solaris и

Windows

Page 44: Concurrency: Deadlock and Starvation

Откриване на DeadlockСтратегиите за предотвратяване на

Deadlock са много консервативни ограничаване на достъпа до ресурси и

налагане на ограничения на процесите.Стратегиите за откриване на Deadlock

правят точно обратното.Изисканите ресурси се заделят, когато е

възможно.Редовно се прави проверка дали е

възможно да възникне Deadlock

Page 45: Concurrency: Deadlock and Starvation

Обобщен алгоритъм за откриване

Използваме матрицата на разпределение на ресурсите и вектора на свободните такива

Използваме също и матрица на запитванията Qкъдето Qij показва,че ресурс j е поискан от

процес I Първо размаркираме (‘un-mark’) всички

процеси, които не се намират в deadlock.Първоначално това са всички процеси

Page 46: Concurrency: Deadlock and Starvation

Алгоритъм за откриване

1. Маркираме всеки процес, който има ред в матрицата за разпределение на ресурсите (Allocation matrix), състоящ се от нули.

2. Инициализираме временен вектор W, който е еднакъв с вектора на свободните ресурси (Available vector).

3. Намираме индекс i такъв, че процес i е немаркиран и i-тият ред на Q е по-малък или равен на W.т.е. Qik ≤ Wk за 1 ≤ k ≤ m. Ако такъв ред е намерен, прекратяваме

Page 47: Concurrency: Deadlock and Starvation

Алгоритъм за откриване

4. Ако такъв ред е намерен,Маркираме процес i и добавяме съответният

ред от матрицата за разпределение на ресурсите (allocation matrix) във W.

т.е. Wk = Wk + Aik, за 1 ≤ k ≤ mВръщаме се към стъпка 3. A deadlock съществува, тогава и само тогава,

когато са налице немаркирани процеси накрая

Всеки немаркиран процес е в състояние на deadlock.

Page 48: Concurrency: Deadlock and Starvation

Откриване на Deadlock

Page 49: Concurrency: Deadlock and Starvation

Стретегии за възстановяване след откриване на Deadlock

Прекратяване на всички процеси, които се намират в Deadlock.

Връщане назад (Back up) на всеки блокиран процес до някоя дефинирана предварително точка преди блокирането и рестартиране на всички процесиРиск от повторение на deadlock

Успешно излизане от блокирани процеси, докато deadlock ситуацията не бъде отстранена

Успешно подменяне на ресурси докато deadlock ситуацията не бъде отстранена

Page 50: Concurrency: Deadlock and Starvation

Предимства и Недостатъци

Page 51: Concurrency: Deadlock and Starvation

СъдържаниеПринципи на мъртвата хватка

(Deadlock) Предотвратяване на Deadlock Избягване на Deadlock Откриване на Deadlock Интегрирана Deadlock стратегия

Проблемът “вечерящи философи” Механизми в UNIX, Linux, Solaris и

Windows

Page 52: Concurrency: Deadlock and Starvation

Проблемът “вечерящи философи” : Сценарии

Page 53: Concurrency: Deadlock and Starvation

ПроблемътПроектиране на алгоритъм, който ще

позволи на философите да се нахранят.Никои двама философи не могат да

използват една и същя вилица по едно и също време (взаимно изключване)

Нито един философ не трябва да умира от глад (избягване на deadlock и недостиг на ресурси)

Page 54: Concurrency: Deadlock and Starvation

Решение със семафори

Page 55: Concurrency: Deadlock and Starvation

Избягване на deadlock

Page 56: Concurrency: Deadlock and Starvation

Решение с монитори

Page 57: Concurrency: Deadlock and Starvation

Решение с монитори

Page 58: Concurrency: Deadlock and Starvation

СъдържаниеПринципи на мъртвата хватка

(Deadlock)Предотвратяване на DeadlockИзбягване на DeadlockОткриване на Deadlock Интегрирана Deadlock стратегия

Проблемът “вечерящи философи” Механизми в UNIX, Linux, Solaris и

Windows

Page 59: Concurrency: Deadlock and Starvation

UNIX Concurrency Механизми

UNIX осигурява разнообразие от механизми за комуникация и синхронизация на процеси чрез:Pipes (тръби)Messages (съобщения)Shared memory (споделена памет)Semaphores (семафори)Signals (сигнали)

Page 60: Concurrency: Deadlock and Starvation

PipesКръгов буфер, позволяващ два процеса

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

записва данни, а другият чете.Два типа pipes:

ИменованиНеименовани

Page 61: Concurrency: Deadlock and Starvation

СъобщенияБлок от байтове с придружаващ тип.UNIX предлага msgsnd и msgrcv

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

Опашка от съобщения е обвързана с всеки процес, като тя функционира като пощенска кутия.

Page 62: Concurrency: Deadlock and Starvation

Споделена паметОбщ блок от виртуалната памет се

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

и запис за един процес, Определено на пред-процесно ниво.

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

Page 63: Concurrency: Deadlock and Starvation

СемафориSVR4 използва обобщение на semWait

и semSignal примитивите, дефинирани в Глава 5;

Със семафора е асоциирана опашка от процеси, които са блокирани по този семафор.

Page 64: Concurrency: Deadlock and Starvation

СигналиПрограмен механизъм, който

информира процеса за появата на асинхронни събития.Подобно на хардуерните прекъсвания, без

приоритетиСигнал се получава при обновяването

на област от таблицата с процеси за процес, за който е изпратен сигналът.

Page 65: Concurrency: Deadlock and Starvation

Сигнали, дефинирани заUNIX SVR4.

Page 66: Concurrency: Deadlock and Starvation

Linux Kernel Concurrency Mechanism

Включва всички механизми, споменати за UNIX, както и:Atomic operations (Атомични операции)SpinlocksSemaphores (семафори, които са малко по-

различни от тези в SVR4)Barriers (бариери)

Page 67: Concurrency: Deadlock and Starvation

Атомични операцииАтомичната операциия се изпълнява

без прекъсване и без намесаВидове:

Операции над целочислени данни – работа с integer променливи

Bitmap операции – работа с един bit от bitmap

Page 68: Concurrency: Deadlock and Starvation

Linux Атомични Операции

Page 69: Concurrency: Deadlock and Starvation

Linux Атомични Операции

Page 70: Concurrency: Deadlock and Starvation

SpinlockСамо една нишка в даден момент може

да придобие spinlock.Всяка друга нишка ще продължи да се

опитва (spinning) докато не придобие заключване (lock).

Spinlock е цяло число Ако е 0, нишката го променя на 1и влиза в

критичната си секция. Ако стойността не е 0, нишката продължава да

проверява стойността, докато тя стане 0.

Page 71: Concurrency: Deadlock and Starvation

Linux Spinlocks

Page 72: Concurrency: Deadlock and Starvation

СемафориПодобни на UNIX SVR4, но освен това

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

Три вида семафори на ядрото:Двоични семафори (Binary semaphores)Броящи семафори (counting semaphores), “Четящи-пишещи” семафори (reader-writer

semaphores).

Page 73: Concurrency: Deadlock and Starvation

Семафори в Linux

Page 74: Concurrency: Deadlock and Starvation

Barriers (Бариери) За прилагане на реда, в който се изпълняват

инструкциите, Linux предлага използването на бариери при употреба на паметта.

Page 75: Concurrency: Deadlock and Starvation

Примитиви за синхронизиране на нишки в Solaris

В допълнение на механизмите за съгласуване (concurrency mechanisms) в UNIX SVR4 има:Взаимно изключване (mutex) заключванеСемафориМножество читатели, един писател

(readers/writer) заключванияУсловни променливи

Page 76: Concurrency: Deadlock and Starvation

Синхронизация в Solaris Структури от данни

Page 77: Concurrency: Deadlock and Starvation

MUTEX LockMutex се използва, за да осигури, че

само една нишка в дадено време може да достъпи защитен от mutex ресурс.

Нишката, която заключва mutex, трябва да бъде единствената, която може да го отключи.

Page 78: Concurrency: Deadlock and Starvation

Семафори и Read/Write заключвания

Solaris предлага класически броящи семафори.

Readers/Writers заключването позволява множество нишки да имат постоянен read-only достъп до защитен от lock обект. Той също така позволява на една нишка да

достъпи обекта за запис наведнъж, докато изключва достъпа на всички читатели.

Page 79: Concurrency: Deadlock and Starvation

Условни променливиУсловна променлива се използва при

изчакване докато дадено условие се изпълни (има стойност true).

Условните променливи трябва да се използват заедно с mutex заключването.

Page 80: Concurrency: Deadlock and Starvation

Механизми за съгласуванев Windows

Windows предвижда синхронизирането на нишки като част от обектната си архитектура.

Важни методи на синхронизация са: Изпълними обекти за разпределение

(използващи Wait функции), Потребителски режим в критичните

секции, слаби reader-writer заключвания, и условни променливи.

Page 81: Concurrency: Deadlock and Starvation

Wait функцииWait функциите позволяват на нишката

сама да блокира изпълнението си. Wait функците не връшат изпълнението,

докато определено условие не се изпълни.Типът на wait функцията определя

множеството от използваните условия.

Page 82: Concurrency: Deadlock and Starvation

Dispatcher Objects

Page 83: Concurrency: Deadlock and Starvation

Критични секцииПодобен механизъм на mutex lock

С изключението, че критичните секции могат да се използват само от нишки на един процес.

Ако системата е мултипроцесорна, кода ще се опита да присвои spin-lock.Като последна мярка, в случай че spinlock

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

Page 84: Concurrency: Deadlock and Starvation

Слаби Read-Writer заключвания

Windows Vista добави потребителски режим reader-writer.

Reader-writer заключването влиза в ядрото за блокиране единствено след опит за използване на spin-lock.

‘Слаби ’ - тъй като обикновено се изисква заделяне на част от паметта, сочена от указатели.

Page 85: Concurrency: Deadlock and Starvation

Условни променливиWindows Vista добавя и условни

променливи.Процесът трябва да декларира и

инициализира CONDITION_VARIABLE Използва се или при критични секции

или при SRW заключвания.

Page 86: Concurrency: Deadlock and Starvation

Windows/Linux Сравнение

Page 87: Concurrency: Deadlock and Starvation

Windows/Linux Сравнение.