87
Synchronizace 11/4/2020 vjj 1

Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

Synchronizace

11/4/2020 vjj 1

Page 2: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

Synchronizace

film - obraz a zvuktanec

automatická plnící linka

11/4/2020 vjj 2

Page 3: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

Synchronizace

• čeho ?!?!?!

• dvou (a více) paralelně běžících procesů(studenti střídající se v labu PC)

• dvou (a více) paralelně běžících vláken jednoho procesu(jeden účet na společném notebooku)

• dvou (a více) paralelně běžících vláken dvou (a více) procesů(cloud pro sdílení dat)

11/4/2020 vjj 3

Page 4: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

Synchronizace

• proč ?!?!?!

• sdílení prostředků

• čekání na zprávu, že data jsou připravena(autor píše článek a vybírá vhodné ilustrace a výsledek pošle do sdíleného uložiště v cloudu,grafik potom upravuje celkový vzhled článku)

• exkluzivní práce se sdílenými daty (kritické sekce)(dva autoři se střídají v práci na společném článku)

11/4/2020 vjj 4

Page 5: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

synchronizace I.

• 1. proces / vlákno

Signalizace(že data jsou už připravena)

• 2. proces / vlákno

Čekání(až budou data připravena)

11/4/2020 vjj 5

Page 6: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

příkladF1 (X)

{

...

X = výsledek

}

main (. . . )

{F1(A) // výpočet A nezávislý na B

F2(B) // výpočet B nezávislý na A

F3(A,B)}

11/4/2020 vjj 6

F2 (X)

{

...

X = výsledek

}

Page 7: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

příkladF1 (X)

{

...

X = výsledek

}

main (. . . )

{F2(B) // výpočet B nezávislý na A

F1(A) // výpočet A nezávislý na B

F3(A,B)}

11/4/2020 vjj 7

F2 (X)

{

...

X = výsledek

}

Page 8: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

problém

main (. . . )

{

...

čekej na F1 a F2

F3(A,B)}

11/4/2020 vjj 8

F1(A) ; F2(B) ;

F1 (X)

{

...

X = výsledek

}

F2 (X)

{

...

X = výsledek

}

MAINF1 F2

WAIT

Page 9: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

round-robin

• Main, F1 a F2 se stále točí v Round-Robinu společně s ostatními vlákny

11/4/2020 vjj 9

Page 10: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

to umí každýF1 (X)

{ ...

X = výsledek

HOTOVO1 = TRUE

}

main (. . . )

{ bool HOTOVO1 = FALSE

bool HOTOVO2 = FALSE

while ( ! ( HOTOVO1 and HOTOVO2 ) )

F3(A,B)}

11/4/2020 vjj 10

F2 (X)

{ ...

X = výsledek

HOTOVO2 = TRUE

}

F1(A) F2(B)

Page 11: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

malé vylepšeníF1 (X)

{ ...

X = výsledek

HOTOVO1 = TRUE

}

main (. . . )

{ bool HOTOVO1 = FALSE

bool HOTOVO2 = FALSE

while ( ! ( HOTOVO1 and HOTOVO2 ) ) Sleep(...)

F3(A,B)}

11/4/2020 vjj 11

F2 (X)

{ ...

X = výsledek

HOTOVO2 = TRUE

}

F1(A) F2(B)

Page 12: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

round-robin

• Main, F1 a F2 se stále točí v Round-Robinu společně s ostatními vlákny, jen Main nespotřebovává pokaždé celé kvantum

11/4/2020 vjj 12

Page 13: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

ale jde to i jinakF1 (X)

{ ...

X = výsledek

SetEvent (HOTOVO1)

}

main (. . . )

{ event HOTOVO1 = CreateEvent (..., false, ...)

event HOTOVO2 = CreateEvent (..., false, ...)

Wait ( HOTOVO1, HOTOVO2 )

F3(A,B)}

11/4/2020 vjj 13

F2 (X)

{ ...

X = výsledek

SetEvent (HOTOVO2)

}

F1(A) F2(B)

Page 14: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

round-robin

• F1 a F2 se stále točí v Round-Robinu společně s ostatními vlákny, ale Main odpočívá mezi čekajícími vlákny

11/4/2020 vjj 14

Page 15: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

a ještě jinakF1 (X)

{

...

X = výsledek

}

main (. . . )

{myThread1 = CreateThread (. . . , F1, A, . . )

myThread2 = CreateThread (. . . , F2, B, . . )

Wait (myThread1, myThread2 )

F3(A,B)} ;

11/4/2020 vjj 15

F2 (X)

{

...

X = výsledek

}

Page 16: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

EventHANDLE CreateEvent

(LPSECURITY_ATTRIBUTES lpsa,BOOL bManualReset,BOOL InitialState,LPCTSTR lpszName) ;

HANDLE OpenEvent(DWORD fdwAccess,BOOL fInherit,LPCTSTR lpszName) ;

11/4/2020 vjj 16

Page 17: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

Event

• Wait...

• manuální - zůstane nastaven

• automatický - zruší se nastavení

BOOL SetEvent (hEvent) ;

BOOL ResetEvent (hEvent) ;

11/4/2020 vjj 17

Page 18: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

AutoResetEventstatic AutoResetEvent autoEv =

new AutoResetEvent (false) ;

• po zasignalizování propustí jedno vlákno a opět přejde do nesignalizovaného stavu

autoEv . Set () ; autoEv . WaitOne () ; autoEv . WaitOne (int ms, false) ;autoEv . Reset () ;

11/4/2020 vjj 18

Page 19: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

ManualResetEventstatic ManualResetEvent autoEv =

new ManualResetEvent (false) ;

• po zasignalizování propouští všechna vlákna dokud není explicitně resetován

autoEv . Set () ; autoEv . WaitOne () ;autoEv . WaitOne (int ms, false) ;autoEv . Reset () ;

11/4/2020 vjj 19

Page 20: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

Pulse

• Wait...

• manuální - všichni

• automatický - první

BOOL PulseEvent (hEvent) ;

11/4/2020 vjj 20

Page 21: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

synchronizace II.

11/4/2020 vjj 21

Page 22: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

kritické sekce• 1. proces / vlákno

. . .

práce na společném článku

. . .

• 2. proces / vlákno

. . .

práce na společném článku

. . .11/4/2020 vjj 22

Page 23: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

problém

main (. . . )

{

...

}

11/4/2020 vjj 23

F1() ; F2() ;

F1 ()

{

práce na společném článku

}

F2 ()

{

práce na společném článku

}

MAIN

F1 F2

Page 24: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

round-robin

• Main, F1 a F2 se stále točí v Round-Robinu společně s ostatními vlákny

11/4/2020 vjj 24

Page 25: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

kritické sekce• 1. proces / vlákno

Wait ... až nebude na článku pracovat nikdo jiný

práce na společném článku

Release . . .

• 2. proces / vlákno

Wait ... až nebude na článku pracovat nikdo jiný

práce na společném článku

Release . . .

11/4/2020 vjj 25

Page 26: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

binární semafor• Dijkstra

• proměnná typu integer

• hodnota 1 znamená volno/pokračuj

• hodnota 0 znamená obsazeno/čekej

• Wait(S) :if S = 0 (zavřeno) ... čekej ve frontě

if S = 1 (otevřeno) ... zavři za sebouS <- 0 ... a pokračuj dál

• Signal(S) :S <- 1 (otevři) … vzbuď (první) vlákno,

které čeká ve frontěpřed semaforem S

11/4/2020 vjj 26

Page 27: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

Wait

• co znamená "čekej ve frontě" ???

TryToGetThrough: if S = 0. . . . .goto TryToGetThrough

• kdyby to takhle jednoduše dělali i ostatní, nebyla by to (u)spořádaná fronta na semafor S, ale výběr podle nejlepšího postavení v RoundRobinu v okamžiku kdy je semafor S zvednutý (vadilo by to?)

while ( S = 0 ) { }

Page 28: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

WaitDWORD WaitForSingleObject

(HANDLE hObject,DWORD milisekundy) ;

• 0 . . . 0xFFFFFFFF = INFINITE

• WAIT_OBJECT_0WAIT_TIMEOUTWAIT_ABANDONEDWAIT_FAILED

DWORD WaitForSingleObjectEx(HANDLE hObject,DWORD milisekundy,BOOL fAlert) ;

11/4/2020 vjj 29

Page 29: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

WaitDWORD WaitForMultipleObjects

(DWORD počet,CONST HANDLE * lphObjects,BOOL fWaitAll,DWORD milisekundy) ;

• MAXIMUM_WAIT_OBJECTS• WAIT_OBJECT_0

WAIT_OBJECT_0 . . .. . . WAIT_OBJECT_0 + počet – 1

WAIT_TIMEOUTWAIT_ABANDONED_0WAIT_ABANDONED_0 . . .

. . . WAIT_ABANDONED_0 + počet – 1WAIT_FAILED

11/4/2020 vjj 30

Page 30: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

Čekání na "už mám čas"DWORD WaitForInputIdle

(HANDLE hProcess,DWORD milisekundy) ;

PostMessage (hWin2, WM_KEYDOWN, VK_MENU, 0);PostMessage (hWin2, WM_KEYDOWN, VK_F, 0);PostMessage (hWin2, WM_KEYUP, VK_F, 0);PostMessage (hWin2, WM_KEYUP, VK_MENU, 0);PostMessage (hWin2, WM_KEYDOWN, VK_O, 0);PostMessage (hWin2, WM_KEYUP, VK_O, 0);WaitForInputIdle (hProc2, 120000) ;

11/4/2020 vjj 31

Page 31: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

Kombinované čekáníDWORD MsgWaitForMultipleObjects

(DWORD počet,LPHANDLE pHandles,BOOL ČekejNaVšechny,DWORD Milisekundy,DWORD ZpůsobČekání);

• Jeden nebo všechny (v závislosti na třetím parametru) objekty signalizují konec

• Specifikovaný typ vstupu se nově objevil ve frontě vlákna

• Uplynul předepsaný interval11/4/2020 vjj 32

Page 32: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

Způsob čekání

• QS_ALLINPUTQS_HOTKEYQS_INPUTQS_KEYQS_MOUSEQS_MOUSEBUTTONQS_MOUSEMOVEQS_PAINTQS_POSTMESSAGEQS_SENDMESSAGEQS_TIMER

11/4/2020 vjj 33

Page 33: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

SemaforHANDLE hSemafor = CreateSemaphore

(LPSECURITY_ATTRIBUTES lpsa,LONG MaxValue,LPSTR lpszName) ;

HANDLE hSemafor = OpenSemaphore(DWORD Access,BOOL fInherit,LPCTSTR lpszName) ;

BOOL ReleaseSemaphore(HANDLE hSemaphore,LONG Počet,LPLONG PůvodníPočet) ;

11/4/2020 vjj 34

Page 34: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

parametr "access"

• 1. parametr funkce OpenSemaphor

• SEMAPHORE_ALL_ACCESS

• úplný přístup

• SEMAPHORE_MODIFY_STATE

• použití v ReleaseSemaphor

• SYNCHRONIZE

• použití v libovolné funkci Wait...

11/4/2020 vjj 35

Page 35: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

sdílení semaforu

• 1. proces / vlákno

HANDLE hSemafor ;hSemafor = CreateSemaphore (. . . , "myS") ;

• 2. proces / vlákno

HANDLE hSemafor ;hSemafor = CreateSemaphore (. . . , "myS") ;

if (GetLastError() == ERROR_ALREADY_EXISTS){ // je to sdílený semafor

11/4/2020 vjj 36

Page 36: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

MutexHANDLE CreateMutex

(LPSECURITY_ATTRIBUTES lpsa,BOOL InitialOwner,LPSTR lpszMutexName) ;

HANDLE OpenMutex(DWORD fdwAccess,BOOL fInherit,LPCTSTR lpszMutexName) ;

• MUTEX_ALL_ACCESS

• SYNCHRONIZE

BOOL ReleaseMutex (HANDLE mutex) ;

11/4/2020 vjj 37

Page 37: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

Mutexusing System . Threading ;static Mutex gM1 ;

gM1 . WaitOne () ;

gM1 . WaitOne (Timeout.Infinite, false) ;

gM1 . ReleaseMutex () ;

11/4/2020 vjj 38

Page 38: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

Mutexstatic Mutex gM2 ;static Mutex[] gMs = new Mutex[2] ; gMs[0] = gM1 ;gMs[1] = gM2 ;

Mutex . WaitAll (gMs) ;

Mutex . WaitAny (gMs) ;if (gM1.WaitOne (0, false))

11/4/2020 vjj 39

Page 39: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

Synchronizační objekty

• aplikace

• binární semafor

• vícehodnotový semafor

• mutex

• událost, event

• monitor

• system

• semaphor

• spin-lock

11/4/2020 vjj 40

Page 40: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

System• semaphor – omezený počet

• spinlock – test-and-set

• fronty čekajících vláken

• během práce Systému se semaforem a s frontami čekajících vláken nemusí být synchronizační data v konzistentním stavu

• nemůže v té době dojít k přerušení, k přepnutí kontextu a k jinému požadavku na změnu v synchronizaci, tj. k požadavku na práci s momentálně nekonzistentními daty?

• IRQL = "hardwarové priority" - režim procesoru

11/4/2020 vjj 41

Page 41: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

IRQL ≠ Windows Priority

11/4/2020 vjj 42

Page 42: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

už umíme synchronizovat

tak v čem je problém?

11/4/2020 vjj 43

Page 43: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

tak v čem je problém?

DEADLOCK

11/4/2020 vjj 44

Page 44: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

Dining philosophers

11/4/2020 vjj 55

Page 45: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

Dining philosophers problem

• It was originally formulated in 1965 by Edsger WybeDijkstra as a student exam exercise, presented in terms of computers competing for access to tape drive peripherals.

• Soon after, Tony Hoare gave the problem its present formulation.

11/4/2020 vjj 56

Page 46: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

Dining philosophers problem

11/4/2020 vjj 57

Plato

Confucius

Socrates

Voltaire

Descartes

Page 47: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

philosopher's algorithm

• think until the left fork is available; when it is, pick it up;

• think until the right fork is available; when it is, pick it up;

• when both forks are held, eat for a fixed amount of time;

• then, put the right fork down;

• then, put the left fork down;

• repeat from the beginning

11/4/2020 vjj 58

Page 48: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

thinking

get LEFT fork

thinking

get RIGHT fork

dining

release RIGHT forkrelease LEFT fork

Dining philosophers problem

P1

thinking

get LEFT fork

thinking

get RIGHT fork

dining

release RIGHT forkrelease LEFT fork

fork

P2

fork

LEFT

LEFT

RIGHT

RIGHT

Page 49: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

Dining philosophers problem

P1

F1

P2

thinking

Wait (F2)

thinking

Wait (F1)

dining

Release (F1)Release (F2)

F2

thinking

Wait (F1)

thinking

Wait (F2)

dining

Release (F1)Release (F2)

Page 50: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

start

P1

F1

P2

thinking

Wait (F2)

thinking

Wait (F1)

dining

Release (F1)Release (F2)

F2

thinking

Wait (F1)

thinking

Wait (F2)

dining

Release (F1)Release (F2)

Page 51: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

za chvíli

P1

F1

P2

thinking

Wait (F2)

thinking

Wait (F1)

dining

Release (F1)Release (F2)

F2

thinking

Wait (F1)

thinking

Wait (F2)

dining

Release (F1)Release (F2)

Page 52: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

a dále

P1

F1

P2

thinking

Wait (F2)

thinking

Wait (F1)

dining

Release (F1)Release (F2)

F2

thinking

Wait (F1)

thinking

Wait (F2)

dining

Release (F1)Release (F2)

Page 53: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

a dále

P1

F1

P2

thinking

Wait (F2)

thinking

Wait (F1)

dining

Release (F1)Release (F2)

F2

thinking

Wait (F1)

thinking

Wait (F2)

dining

Release (F1)Release (F2)

Page 54: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

a dále

P1

F1

P2

thinking

Wait (F2)

thinking

Wait (F1)

dining

Release (F1)Release (F2)

F2

thinking

Wait (F1)

thinking

Wait (F2)

dining

Release (F1)Release (F2)

Page 55: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

a dále

P1

F1

P2

thinking

Wait (F2)

thinking

Wait (F1)

dining

Release (F1)Release (F2)

F2

thinking

Wait (F1)

thinking

Wait (F2)

dining

Release (F1)Release (F2)

Page 56: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

a dále

P1

F1

P2

thinking

Wait (F2)

thinking

Wait (F1)

dining

Release (F1)Release (F2)

F2

thinking

Wait (F1)

thinking

Wait (F2)

dining

Release (F1)Release (F2)

Page 57: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

a dále

P1

F1

P2

thinking

Wait (F2)

thinking

Wait (F1)

dining

Release (F1)Release (F2)

F2

thinking

Wait (F1)

thinking

Wait (F2)

dining

Release (F1)Release (F2)

Page 58: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

a dale? - už nic - deadlock

P1

F1

P2

thinking

Wait (F2)

thinking

Wait (F1)

dining

Release (F1)Release (F2)

F2

thinking

Wait (F1)

thinking

Wait (F2)

dining

Release (F1)Release (F2)

Page 59: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

detekce deadlocku

• dynamický orientovaný graf

• kdo na co čeká (červené přerušované)

• co komu patří (obracené zelené)

• vznikne-li cyklus, nastal deadlock

• musíme změnit šipky z "kdo co má" (zelené plné) na "co komu patří" (opačně orientované červené)

11/4/2020 vjj 71

Page 60: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

cyklus

P1

F1

P2

thinking

Wait (F2)

thinking

Wait (F1)

dining

Release (F1)Release (F2)

F2

thinking

Wait (F1)

thinking

Wait (F2)

dining

Release (F1)Release (F2)

Page 61: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

deadlock

P1

F1

P2

thinking

Wait (F2)

thinking

Wait (F1)

dining

Release (F1)Release (F2)

F2

thinking

Wait (F1)

thinking

Wait (F2)

dining

Release (F1)Release (F2)

Page 62: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

podmínky vzniku deadlocku• Coffman conditions (pro binární semafory)

1. mutual exclusion – vzájemná vyloučenost – prostředek má v jeden okamžik vždy nejvýše jednoho (dočasného) uživatele/vlastníka (tj. nikdo jiný ho nesmí používat zároveň)

2. přidělování bez preempce (bez odebírání) – prostředek může uvolnit jen jeho (dočasný) majitel, tj. cyklické čekání nelze násilně ukončit nějakým externím správcem

3. hold and waito prostředky lze žádat postupně/jednotlivě (tj. mohu blokovat jeden prostředek a přitom čekat na jiný) a v libovolném pořadí

4. může dojít k cyklickému čekání11/4/2020 vjj 74

Page 63: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

deadlock

• aby mohlo dojít k deadlocku, musí "systém" splňovat všechny Coffmanovy podmínky najednou

• takže k tomu, aby byl "systém" bezpečný (tj. aby nemohlo dojít k deadlocku) stačí, aby v "systému" alespoň jedna z těchto podmínek neplatila

11/4/2020 vjj 75

Page 64: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

1. prevence deadlocku

– práce s virtuálními prostředky

– každý si myslí, že má žádaný prostředek sám pro sebe a taky se tak chová (např. tiskárny - Spooling)

– není nutné omezovat přístup k (virtuálním) prostředkům

– není zapotřebí prostředky jejich majitelům odebírat

11/4/2020 vjj 76

Page 65: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

virtuální vidličky (???)

P1

thinking

Wait (F1)Wait (F2)

dining

Release (F1)Release (F2)

F1

P2

thinking

Wait (F2)Wait (F1)

dining

Release (F1)Release (F2)

F2

F1

F2

fork

fork

Page 66: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

virtuální tiskárny

P1

thinking

Wait (F1)Wait (F2)

dining

Release (F1)Release (F2)

F1

P2

thinking

Wait (F2)Wait (F1)

dining

Release (F1)Release (F2)

F2

F1

F2

spooling for F1

spooling for F2

Page 67: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

2. ukončení deadlocku

• preempce

• jeden z procesů v cyklu je zavražděn (proč?)

• prostředky, které vlastnil, jsou opět volné

• násilné odebírání prostředků slouží jenk rozseknutí už vzniklého deadlocku

11/4/2020 vjj 79

Page 68: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

preempce

P1

F1

P2

thinking

Wait (F2)

thinking

Wait (F1)

dining

Release (F1)Release (F2)

F2

thinking

Wait (F1)

thinking

Wait (F2)

dining

Release (F1)Release (F2)

Page 69: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

preempce

P1

F1

P2

F2

thinking

Wait (F2)

thinking

Wait (F1)

dining

Release (F1)Release (F2)

thinking

Wait (F1)

thinking

Wait (F2)

dining

Release (F1)Release (F2)

Page 70: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

3. prevence deadlocku

a) povinnost žádat o všechny používané prostředky najednou

Wait (F1, F2)

dining

Signal (F1)

Signal (F2)

11/4/2020 vjj 82

Page 71: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

vše najednou

P1

thinking

Wait (F1, F2)

dining

Release (F2)Release (F1)

F1

P2

thinking

Wait (F1, F2)

dining

Release (F2)Release (F1)

F2

Page 72: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

4. prevence deadlocku

b) hierarchie prostředků – pokud proces potřebuje více prostředků najednou, musí o ně žádat v předepsaném pořadí

Wait (F1)Wait (F2)

dining

Signal (F2) Signal (F1)

11/4/2020 vjj 84

Page 73: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

předepsané pořadí

P1

thinking

Wait (F1)Wait (F2)

dining

Release (F2)Release (F1)

F1

P2

thinking

Wait (F1)Wait (F2)

dining

Release (F2)Release (F1)

F2

Page 74: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

5. prevence deadlockuzabránit vzniku cyklu – Bankéřův algoritmus

Bankéř průběžně financuje investiční projekty svých klientů - bezúročně (!?).

Klienti nemusí požadovat celou potřebnou sumu najednou

Při žádosti o schválení projektu musí ale každý klient předložit celkový plánfinancování.

Ihned po dokončení projektu klient všechny zapůjčené miliardy vrátí.

Nesmí se stát, aby bankéř neměl pro klienta prostředky na dokončení již započatého projektu.

Bankéř může vyplácet jednotlivé části půjčky s libovolně dlouhou prodlevou

11/4/2020 vjj 86

Page 75: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

Bankéřův algoritmus1) nový požadavek

2) simulace přidělení požadovaného prostředku

3) zrušení příznaku "skončil" u všech procesů

4) existuje proces, který ještě nemá nastaven příznak "skončil"?

a) ano:existuje proces na jehož dokončení má bankéř momentálně dost prostředků?a. ano: simuluj jeho dokončení, tj. nastav jeho příznak "skončil" a simuluj vrácení

všech jeho prostředků, potom se vrať do bodu 4) .b. ne: odmítni nový požadavek

b) ne: přiděl požadovaný prostředek

11/4/2020 vjj 87

Page 76: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

Bankéřův algoritmus

11/4/2020 vjj 88

nový požadavek simulace přidělení prostředku

zrušení příznaku "skončil" u všech procesů

existuje proces, který ještě nemá nastaven příznak "skončil" a který by za dané situace mohl skončit, tj. má

bankéř dost prostředků, aby mohl uspokojit jeho již dříve oznámené požadavky ?

simuluj jeho dokončení, tj. nastav jeho příznak "skončil" a simuluj vrácení

všech jeho prostředků

existuje proces, který ještě nemá nastaven

příznak "skončil"?

přiděl požadovaný prostředek odmítni požadavek

ne ano

ano ne

Page 77: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

příklad• bankéř:

celkem 12 mld, 10 půjčeno, 2 zbývají

• přišel požadavek na jednu miliardu s tím, že před jejím vrácením budou požadovány ještě tři další (1+3)

• zápis: x+y = klient si už vypůjčil x miliard, před jejich vrácením bude (postupně) požadovat ještě y dalších

11/4/2020 vjj 89

3+5

1+2

1+1

5+4

2

1+3

3+5

1+2

1+1

5+4

1

1+3

3+5

1+2

1+1

5+4

2

1+3

3+5

1+2

1+1

5+4

9

1+3

3+5

1+2

1+1

5+4

4

1+3

3+5

1+2

1+1

5+4

3

1+3

3+5

1+2

1+1

5+4

12

1+3

Page 78: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

bankéř• na začátku, tj. když má bankéř ještě všechno, se jedná

o tzv. bezpečný stav

• bezpečný stav - existuje alespoň jedna posloupnost postupného ukončování projektů (procesů), která skončí tím, že bankéř má zase všechno

• bankéř si vždy ověřuje, vznikne-li splněním nového požadavku opět bezpečný stav, jinak požadavek odmítne

• v předchozím příkladu se předpokládalo, že počáteční stav je bezpečný (taky že byl), a ověřilo se, že splněním požadavku "1+3" vznikne opět bezpečný stav (tím se dodatečně dokázalo, že i ten předchozí byl bezpečný)

11/4/2020 vjj 90

Page 79: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

příklad

• ze stejného bezpečného počátečního stavu by splněním požadavku "1+4" vzniknul nebezpečný stav

11/4/2020 vjj 91

3+5

1+2

1+1

5+4

2

1+4

3+5

1+2

1+1

5+4

1

1+4

3+5

1+2

1+1

5+4

2

1+4

3+5

1+2

1+1

5+4

3

1+4

dál to nejde, tj. splněním nového požadavku by

vzniknul nebezpečný stav, požadavek bude odmítnut

Page 80: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

kritická sekce

různá pgm řešení

11/4/2020 vjj 92

Page 81: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

11/4/2020 vjj 93

P1

thinking

Wait (F1)Wait (F2)

dining

Release (F1)Release (F2)

kritická sekce

Page 82: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

podmíněná kritická sekce

region Přístup when Plných<N do

send(X,F)

Plných = Plných + 1

• = semafor + podmínka

11/4/2020 vjj 94

Page 83: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

Kritická sekce - přípravaCRITICAL_SECTION myCritSect ;InitializeCriticalSection (&myCritSect) ;

HANDLE hThreads[2] ;hThread[0] = CreateThread ( , myThread, ) ;hThread[1] = CreateThread ( , myThread, ) ;

WaitForMultipleObjects(2, hThreads, TRUE, INFINITE) ;

CloseHandle (hThread[0]) ;CloseHandle (hThread[1]) ;

DeleteCriticalSection (&myCritSect) ;

11/4/2020 vjj 95

Page 84: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

kritická sekce - synchronizace

DWORD WINAPI myThread (LPVOID parm){

. . .EnterCriticalSection (&myCritSect) ;

. . . kritická sekce

LeaveCriticalSection (&myCritSect) ;. . .return (0) ;

}

• 2. a 3. vlákno

11/4/2020 vjj 96

Page 85: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

monitor• kritické sekce jsou soustředěny do objektu Monitor,

který hlídá jejich exkluzivní volání

monitor Přístup

function Zapiš(X) ...

function Přečti(X) ...

• producent

Přístup.Zapiš(X)

• klient

Přístup.Přečti(X)11/4/2020 vjj 97

Page 86: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

.NET Monitor• pro práci se sdílenými daty

static byte[] buffer = new byte[100] ;

static void myFce(){

Monitor.Enter( buffer ) ;. . .Monitor.Exit( buffer ) ;

}

• C#

lock( buffer ) { . . . }

11/4/2020 vjj 98

Page 87: Principy Počítačů a operační systémy · podmínky vzniku deadlocku •Coffman conditions (pro binární semafory) 1. mutual exclusion –vzájemná vyloučenost–prostředek

.NET Monitor

Monitor . Wait (buffer) ;

Monitor . Pulse (buffer) ;

Monitor . PulseAll (buffer) ;

11/4/2020 vjj 99