shared memory model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-shared-memory-new.pdf · 14...
TRANSCRIPT
![Page 1: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/1.jpg)
Shared Memory Model
Alessio [email protected]
Dip. di Ingegneria dell’InformazioneUniversità di Pisa
Based on original slides by Silberschatz, Galvin, and GagneOperating System Concepts, IX edition
![Page 2: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/2.jpg)
2
Overview
■ The Critical-Section Problem■ Software Solutions■ Synchronization Hardware■ Semaphores■ Monitors■ Synchronization Examples
![Page 3: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/3.jpg)
3
Overview
■ The Critical-Section Problem■ Software Solutions■ Synchronization Hardware■ Semaphores■ Monitors■ Synchronization Examples
![Page 4: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/4.jpg)
4
Objectives
■ To introduce the critical-section problem, whose solutions can be used to ensure the consistency of shared data
■ To present both software and hardware solutions of the critical-section problem
![Page 5: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/5.jpg)
5
Producer-Consumer Problem
■ The Producer process produces data that must processed by the Consumer process
■ The inter-process communication occurs through a shared buffer (shared memory)
■ Bounded Buffer Size● The Producer process cannot insert a new item if the buffer is full● The Consumer process cannot extract an item if the buffer is
empty
![Page 6: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/6.jpg)
6
Producer-Consumer Problem
■ Shared data
#define BUFFER_SIZE 10typedef struct {
. . .} item;item buffer[BUFFER_SIZE];int in = 0;int out = 0;int counter = 0;
![Page 7: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/7.jpg)
7
Producer-Consumer Problem■ Producer process
item nextProduced;
while (1) {while (counter == BUFFER_SIZE); /* do nothing */buffer[in] = nextProduced;in = (in + 1) % BUFFER_SIZE;counter++;
}
![Page 8: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/8.jpg)
8
Producer-Consumer Problem■ Consumer process
item nextConsumed;
while (1) {while (counter == 0); /* do nothing */nextConsumed = buffer[out];out = (out + 1) % BUFFER_SIZE;counter--;
}
![Page 9: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/9.jpg)
9
Producer-Consumer Problem
■ The statements
counter++;counter--;
must be performed atomically.
■ Atomic operation means an operation that completes in its entirety without interruption.
![Page 10: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/10.jpg)
10
Producer-Consumer Problem
■ The statement “counter++” may be implemented in machine language as:
register1 = counterregister1 = register1 – 1counter = register1
■ The statement “counter—” may be implemented as:
register2 = counterregister2 = register2 – 1counter = register2
![Page 11: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/11.jpg)
11
Producer-Consumer Problem
■ If both the producer and consumer attempt to update the buffer concurrently, the assembly language statements may get interleaved.
■ Interleaving depends upon how the producer and consumer processes are scheduled.
![Page 12: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/12.jpg)
12
Race Condition
■ Assume counter is initially 5. One interleaving of statements is:
producer: register1 = counter (register1 = 5)producer: register1 = register1 + 1 (register1 = 6)
consumer: register2 = counter (register2 = 5)consumer: register2 = register2 – 1 (register2 = 4)
producer: counter = register1 (counter = 6)consumer: counter = register2 (counter = 4)
■ The value of count may be either 4 or 6, where the correct result should be 5.
![Page 13: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/13.jpg)
13
Race Condition
■ Race condition● The situation where several processes access and manipulate
shared data concurrently.● The final value of the shared data depends upon how
instructions are interleaved.
■ Show example about balance and num.Ops.
■ To prevent race conditions, concurrent processes must be synchronized.
![Page 14: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/14.jpg)
14
Critical Section Problem
■ Consider system of n processes {p0, p1, … pn-1}■ Each process has critical section segment of code
● Process may be changing common variables, updating table, writing file, etc
● When one process in critical section, no other may be in its critical section
■ Critical section problem is to design protocol to solve this■ Each process must ask permission to enter critical section in
entry section, may follow critical section with exit section, then remainder section
![Page 15: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/15.jpg)
15
Solution to Critical-Section Problem
■ 1 - Mutual Exclusion ● If process Pi is executing in its critical section, then no other processes
can be executing in their critical sections.■ 2 - Progress
● If no process is executing in its critical section and there exist some processes that wish to enter their critical section, then the selection of the processes that will enter the critical section next cannot be postponed indefinitely.
■ 3 - Bounded Waiting.● A bound must exist on the number of times that other processes are
allowed to enter their critical sections after a process has made a request to enter its critical section and before that request is granted.
■ Assume that each process executes at a nonzero speed■ No assumption concerning relative speed of the n processes.
![Page 16: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/16.jpg)
16
General Process Structure
■ General structure of process Pi
do {entry sectioncritical sectionexit sectionreminder section
} while (TRUE)
![Page 17: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/17.jpg)
17
Possible Solutions
■ Software approaches■ Hardware solutions
● Interrupt disabling● Special machine instructions
■ Operating System Support● Semaphores
■ Programming language Support● Monitor● …
![Page 18: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/18.jpg)
18
Overview
■ The Critical-Section Problem■ Software Solutions■ Synchronization Hardware■ Semaphores■ Monitors■ Synchronization Examples
![Page 19: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/19.jpg)
19
A Software Solution
Boolean lock=FALSE;Process Pi {
do {while (lock); // do nothinglock=TRUE;critical sectionlock=FALSE;remainder section
} while (TRUE);}
Does it work?
![Page 20: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/20.jpg)
20
Peterson’s Solution
■ Two process solution■ Assume that the LOAD and STORE instructions are atomic■ The two processes share two variables:
● int turn;● Boolean flag[2];
■ The variable turn indicates whose turn it is to enter the critical section.
■ The flag array is used to indicate if a process is ready to enter the critical section● flag[i] = true implies that process Pi is ready!
![Page 21: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/21.jpg)
21
Algorithm for Process Pi
do {flag[i] = TRUE;turn = j;while (flag[j] && turn == j);critical sectionflag[i] = FALSE;remainder section
} while (TRUE);}
![Page 22: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/22.jpg)
22
Solution to Critical-section Problem Using Locks
do {acquire lockcritical sectionrelease lockremainder section
} while (TRUE);
![Page 23: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/23.jpg)
23
Overview
■ The Critical-Section Problem■ Software Solutions■ Synchronization Hardware■ Semaphores■ Monitors■ Synchronization Examples
![Page 24: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/24.jpg)
24
Synchronization Hardware
■ Many systems provide hardware support for implementing the critical section code.
■ All solutions below based on idea of locking● Protecting critical regions via locks
■ Uniprocessors – could disable interrupts● Currently running code would execute without preemption● Generally too inefficient on multiprocessor systems
4 Operating systems using this not broadly scalable■ Modern machines provide special atomic hardware instructions
4 Atomic = non-interruptible● Either test memory word and set value● Or swap contents of two memory words
![Page 25: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/25.jpg)
25
Interrupt Disabling
do {disable interrupt;critical sectionenable interrupt;remainder section
} while (1);
![Page 26: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/26.jpg)
26
Previous Solution
do {while (lock); // do nothinglock=TRUE;critical sectionlock=FALSE;remainder section
} while (1);
The solution does not guaranteed the mutual exclusion because the test and set on lock are not atomic
![Page 27: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/27.jpg)
27
Test-And-Set Instruction
■ Definition:
boolean TestAndSet (boolean *target) {boolean rv = *target;*target = TRUE;return rv;
}
![Page 28: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/28.jpg)
28
Solution using Test-And-Set
boolean lock=FALSE;
do {while (TestAndSet (&lock )); // do nothingcritical sectionlock = FALSE;remainder section
} while (TRUE);
![Page 29: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/29.jpg)
29
Swap Instruction
void Swap (boolean *a, boolean *b) {boolean temp = *a;*a = *b;*b = temp:
}
![Page 30: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/30.jpg)
30
Solution using Swap
Shared boolean variable lock initialized to FALSEEach process has a local boolean variable key
do {key = TRUE;while ( key == TRUE) Swap (&lock, &key );critical sectionlock = FALSE;remainder section
} while (TRUE);
This solution guarantees mutual exclusion but not bounded waiting
![Page 31: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/31.jpg)
31
Bounded-waiting Mutual Exclusion with TestAndSet()
do {waiting[i] = TRUE;key = TRUE;while (waiting[i] && key) key = TestAndSet(&lock);waiting[i] = FALSE;// critical sectionj = (i + 1) % n;while ((j != i) && !waiting[j]) j = (j + 1) % n;if (j == i) lock = FALSE;else waiting[j] = FALSE;// remainder section
} while (TRUE);
![Page 32: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/32.jpg)
32
Overview
■ The Critical-Section Problem■ Software Solutions■ Synchronization Hardware■ Semaphores■ Monitors■ Synchronization Examples
![Page 33: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/33.jpg)
33
Semaphore
■ Synchronization tool that does not require busy waiting■ Semaphore S – integer variable■ Can only be accessed via two indivisible (atomic) operations
● wait() and signal()● Originally called P() and V()
![Page 34: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/34.jpg)
34
Semaphore
wait (S) {while (S <= 0); // busy waitS--;
}
signal (S) {S++;
}wait() and signal() must be atomic
![Page 35: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/35.jpg)
35
Semaphore as General Synchronization Tool
■ Counting semaphore● integer value can range over an unrestricted domain
■ Binary semaphore● integer value can range only between 0 and 1; can be simpler to
implement● Also known as mutex locks
■ Can implement a counting semaphore S as a binary semaphore
![Page 36: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/36.jpg)
36
Semaphore as Mutex Tool
■ Shared data:semaphore mutex=1;
■ Process Pi:
do { wait (mutex); // Critical Section signal (mutex); // Remainder section} while (TRUE);
![Page 37: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/37.jpg)
37
Semaphore Implementation
■ Must guarantee that no two processes can execute wait() and signal() on the same semaphore at the same time
■ Could have busy waiting (spinlock)● Busy waiting wastes CPU cycles● But avoids context switches● May be useful when the critical section is short and/or rarely
occupied■ However applications may spend lots of time in critical sections and
therefore, generally, this is not a good solution.
![Page 38: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/38.jpg)
38
Semaphore Implementation
■ Define a semaphore as a recordtypedef struct {
int value;struct process *L;
} semaphore;
■ Assume two simple operations:● block() suspends the process that invokes it.● wakeup(P) resumes the execution of a blocked process P.
![Page 39: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/39.jpg)
39
Implementationwait (semaphore *S) {
S->value--;if (S->value < 0) {
add this process to S->list;block();
}}
signal (semaphore *S) {S->value++;if (S->value <= 0) {
remove a process P from S->list;wakeup(P);
}}
![Page 40: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/40.jpg)
40
Semaphore as a Synchronization Tool■ Execute B in Pj only after A executed in Pi
■ Use semaphore flag initialized to 0■ Code:
Pi Pj! !
A wait(flag)signal(flag) B
![Page 41: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/41.jpg)
41
Deadlock and Starvation■ Deadlocktwo or more processes are waiting indefinitely for an event that can be caused by only one of the waiting processes.Let S and Q be two semaphores initialized to 1
P0 P1wait(S); wait(Q);wait(Q); wait(S);! !
signal(S); signal(Q);signal(Q); signal(S);
■ Starvation – indefinite blocking. A process may never be removed from the semaphore queue in which it is suspended.
![Page 42: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/42.jpg)
42
Classical Problems of Synchronization
■ Bounded-Buffer Problem■ Readers and Writers Problem■ Dining-Philosophers Problem
![Page 43: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/43.jpg)
43
Bounded-Buffer Problem
■ N buffers, each can hold one item■ Semaphore mutex initialized to the value 1■ Semaphore full initialized to the value 0■ Semaphore empty initialized to the value N.
![Page 44: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/44.jpg)
44
Bounded-Buffer Problem
Producer Process
do {…<produce an item in
nextp>…wait(empty);wait(mutex);…<add nextp to buffer>…signal(mutex);signal(full);
} while (1);
Consumer Process
do {wait(full)wait(mutex);…<remove item from buffer to
nextc>…signal(mutex);signal(empty);…<consume item in nextc>…
} while (1);
![Page 45: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/45.jpg)
45
Readers-Writers Problem
■ A data set is shared among a number of concurrent processes● Readers – only read the data set; they do not perform any updates● Writers – can both read and write
■ Problem● Allow multiple readers to read at the same time. ● Only one single writer can access the shared data at the same time
■ Variants● No new reader must wait when a writer is waiting for data access● No new reader can start reading when a writer is waiting for data
access
![Page 46: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/46.jpg)
46
Readers-Writers Problem
■ Shared Data● Data set● Integer readcount initialized to 0● Semaphore mutex initialized to 1
4Mutual exclusion on readcount● Semaphore wrt initialized to 1
4Mutual exclusion on the data set by writers
![Page 47: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/47.jpg)
47
Readers-Writers Problem
■ The structure of a writer process
do {wait (wrt) ;// writing is performedsignal (wrt) ;
} while (TRUE);
![Page 48: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/48.jpg)
48
Readers-Writers Problem
■ The structure of a reader process
do {wait (mutex) ;readcount ++ ;if (readcount == 1) wait (wrt) ;signal (mutex) ;// reading is performedwait (mutex) ;readcount - - ;if (readcount == 0) signal (wrt) ;signal (mutex) ;
} while (TRUE);
![Page 49: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/49.jpg)
49
Dining-Philosophers Problem
■ Shared data● Bowl of rice (data set)● Semaphore chopstick [5] initialized to 1
![Page 50: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/50.jpg)
50
Dining-Philosophers Problem
■ The structure of Philosopher i:
do { wait (chopstick[i]); wait (chopStick[ (i + 1) % 5] ); // eat signal (chopstick[i]); signal (chopstick[ (i + 1) % 5] ); // think} while (TRUE);
![Page 51: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/51.jpg)
51
Dining-Philosophers Problem
■ Deadlock● A deadlock occurs if all philosophers start eating simultaneously
■ Possible solutions to avoid deadlocks● Only 4 philosophers can sit around the table● A philosopher can take his/her chopsticks only if they both are
free● An odd philosopher takes the chopstick on its left first, and then
the one on its right; an even philosopher takes the opposite approach.
■ Starvation● Any solution must avoid that a philosopher may starve
![Page 52: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/52.jpg)
52
Problems with Semaphores
■ Incorrect use of semaphore operations:
● wait (mutex) … wait (mutex)
● signal (mutex) …. wait (mutex)
● Omitting of wait (mutex) or signal (mutex) (or both)
![Page 53: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/53.jpg)
53
Overview
■ The Critical-Section Problem■ Software Solutions■ Synchronization Hardware■ Semaphores■ Monitors■ Synchronization Examples
![Page 54: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/54.jpg)
54
Monitor
■ A high-level abstraction that provides a convenient and effective mechanism for process synchronization
![Page 55: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/55.jpg)
55
Monitor■ A high-level abstraction that provides a convenient and effective
mechanism for process synchronization■ Only one process may be active within the monitor at a time
monitor monitor-name { // shared variable declarations procedure P1 (…) { …. } … procedure Pn (…) {……}
Initialization code ( ….) { … }}
![Page 56: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/56.jpg)
56
Basic Monitor
![Page 57: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/57.jpg)
57
Monitor with Condition Variables
![Page 58: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/58.jpg)
58
Condition Variables
■ condition x, y;
■ Two operations on a condition variable:● x.wait() – a process that invokes the operation is (always)
suspended.● x.signal() – resumes one of processes (if any) that
invoked x.wait().
■ Variants (P executes x.signal() and Q was blocked on x)● Signal and wait: P waits for Q leaving the monitor – or blocking on
another condition variable – before proceedings on● Signal and proceed: Q waits for P leaving the monitor – or blocking on
another condition variable – before proceedings on● Signal and Leave: P executes signal and leaves the monitor
(Concurrent Pascal)
![Page 59: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/59.jpg)
59
Solution to Dining Philosophers
■ Based on monitors■ The solution assumes that
● A philosopher can take his/her chopsticks only when are both free
■ The proposed solution is deadlock-free
![Page 60: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/60.jpg)
60
Solution to Dining Philosophersmonitor DP {
enum { THINKING; HUNGRY, EATING) state [5] ;condition self [5];
void pickup (int i) {state[i] = HUNGRY;test(i);if (state[i] != EATING) self [i].wait();
}
void putdown (int i) {state[i] = THINKING;
// test left and right neighborstest((i + 4) % 5);test((i + 1) % 5);
}
![Page 61: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/61.jpg)
61
Solution to Dining Philosophers
void test (int i) {if ((state[(i + 4) % 5] != EATING) &&
(state[i] == HUNGRY) &&(state[(i + 1) % 5] != EATING) ) {
state[i] = EATING ;self[i].signal() ;
}}
initialization_code() {for (int i = 0; i < 5; i++)state[i] = THINKING;
}}
![Page 62: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/62.jpg)
62
Solution to Dining Philosophers
■ Each philosopher p invokes the operations pickup() and putdown()in the following sequence:
while (1) {Think;DP.pickup (p);Eat;DP.putdown (p);
}
![Page 63: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/63.jpg)
63
Overview
■ The Critical-Section Problem■ Software Solutions■ Synchronization Hardware■ Semaphores■ Monitors■ Synchronization Examples
![Page 64: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/64.jpg)
64
Synchronization Examples
■ Solaris■ Windows XP■ Linux■ Pthreads
![Page 65: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/65.jpg)
65
Solaris Synchronization
■ Implements a variety of mechanisms to support multitasking, multithreading (including real-time threads), and multiprocessing
■ Adaptive mutexes for efficiency when protecting data from short code segments
■ Uses semaphores, condition variables and readers-writers lockswhen longer sections of code need access to data
![Page 66: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/66.jpg)
66
Windows XP Synchronization
■ Uses interrupt masks to protect access to global resources from kernel threads on uniprocessor systems
■ Uses spinlocks on multiprocessor systems■ For out-of-kernel synch provides dispatcher objects
● may act as either mutexes and semaphores■ Dispatcher objects may also provide events
● An event acts much like a condition variable
![Page 67: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/67.jpg)
67
Linux Synchronization
■ Linux:● Prior Version 2.6, non-preemptive kernel
4A task executed in system mode cannot be interrupted, even by a higher-priority thread
● Version 2.6 and later, fully preemptive■ Linux provides:
4semaphores4spin locks
■ Linux kernel● Multi-processor
4Enable/disable spinlocks (active only for short times)● Single-processor
4Disable/Enable preemption
![Page 68: Shared Memory Model - unipi.itvecchio.iet.unipi.it/se/files/2017/02/04-Shared-Memory-new.pdf · 14 Critical Section Problem Consider system of nprocesses {p 0, p 1, … p n-1} Each](https://reader033.vdocuments.us/reader033/viewer/2022042413/5f2ce0d7791353778547ef1d/html5/thumbnails/68.jpg)
68
Pthreads Synchronization
■ Pthreads API is OS-independent■ It provides:
● mutex locks● condition variables
■ Non-portable extensions include:● read-write locks● spin locks