6.5 Semaphore Can only be accessed via two indivisible (atomic) operations wait (S) { while S
-
Upload
shawn-robertson -
Category
Documents
-
view
217 -
download
4
Transcript of 6.5 Semaphore Can only be accessed via two indivisible (atomic) operations wait (S) { while S
![Page 1: 6.5 Semaphore Can only be accessed via two indivisible (atomic) operations wait (S) { while S](https://reader038.fdocuments.net/reader038/viewer/2022110321/56649cf75503460f949c6c26/html5/thumbnails/1.jpg)
6.5 Semaphore
Can only be accessed via two indivisible (atomic) operations
wait (S) { while S <= 0 ; // no-op S--;}
signal (S) { S++;}
![Page 2: 6.5 Semaphore Can only be accessed via two indivisible (atomic) operations wait (S) { while S](https://reader038.fdocuments.net/reader038/viewer/2022110321/56649cf75503460f949c6c26/html5/thumbnails/2.jpg)
6.5 Semaphore
Binary semaphore –integer value can range only between 0 and 1; can be simpler to implement
Counting semaphore –integer value can range over an unrestricted domain
![Page 3: 6.5 Semaphore Can only be accessed via two indivisible (atomic) operations wait (S) { while S](https://reader038.fdocuments.net/reader038/viewer/2022110321/56649cf75503460f949c6c26/html5/thumbnails/3.jpg)
6.5 Semaphore
The main disadvantage of the semaphore is that it requires busy waiting, which wastes CPU cycle that some other process might be able to use productively
This type of semaphore is also called a spinlock because the process “spins” while waiting for the lock
![Page 4: 6.5 Semaphore Can only be accessed via two indivisible (atomic) operations wait (S) { while S](https://reader038.fdocuments.net/reader038/viewer/2022110321/56649cf75503460f949c6c26/html5/thumbnails/4.jpg)
6.5 Semaphore
To overcome the busy waiting problem, we create two more operations:
block–place the process invoking the operation on the appropriate waiting queue.
wakeup –remove one of processes in the waiting queue and place it in the ready queue.
![Page 5: 6.5 Semaphore Can only be accessed via two indivisible (atomic) operations wait (S) { while S](https://reader038.fdocuments.net/reader038/viewer/2022110321/56649cf75503460f949c6c26/html5/thumbnails/5.jpg)
6.6 Classical Problems of Synchronization
Bounded-Buffer Problem Readers and Writers Problem Dining-Philosophers Problem
![Page 6: 6.5 Semaphore Can only be accessed via two indivisible (atomic) operations wait (S) { while S](https://reader038.fdocuments.net/reader038/viewer/2022110321/56649cf75503460f949c6c26/html5/thumbnails/6.jpg)
6.6 Classical Problems of Synchronization
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 7: 6.5 Semaphore Can only be accessed via two indivisible (atomic) operations wait (S) { while S](https://reader038.fdocuments.net/reader038/viewer/2022110321/56649cf75503460f949c6c26/html5/thumbnails/7.jpg)
Bounded Buffer Problem
![Page 8: 6.5 Semaphore Can only be accessed via two indivisible (atomic) operations wait (S) { while S](https://reader038.fdocuments.net/reader038/viewer/2022110321/56649cf75503460f949c6c26/html5/thumbnails/8.jpg)
Bounded Buffer Problem
![Page 9: 6.5 Semaphore Can only be accessed via two indivisible (atomic) operations wait (S) { while S](https://reader038.fdocuments.net/reader038/viewer/2022110321/56649cf75503460f949c6c26/html5/thumbnails/9.jpg)
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.
First readers-writers problem: requires that no reader will be kept waiting unless a writer has already obtained permission to use the shared object
![Page 10: 6.5 Semaphore Can only be accessed via two indivisible (atomic) operations wait (S) { while S](https://reader038.fdocuments.net/reader038/viewer/2022110321/56649cf75503460f949c6c26/html5/thumbnails/10.jpg)
Readers-Writers Problem
Shared Data Data set Semaphore mutex initialized to 1. Semaphore wrt initialized to 1. Integer read count initialized to 0.
![Page 11: 6.5 Semaphore Can only be accessed via two indivisible (atomic) operations wait (S) { while S](https://reader038.fdocuments.net/reader038/viewer/2022110321/56649cf75503460f949c6c26/html5/thumbnails/11.jpg)
Readers Readers-Writers Problem
![Page 12: 6.5 Semaphore Can only be accessed via two indivisible (atomic) operations wait (S) { while S](https://reader038.fdocuments.net/reader038/viewer/2022110321/56649cf75503460f949c6c26/html5/thumbnails/12.jpg)
Readers Readers-Writers Problem
![Page 13: 6.5 Semaphore Can only be accessed via two indivisible (atomic) operations wait (S) { while S](https://reader038.fdocuments.net/reader038/viewer/2022110321/56649cf75503460f949c6c26/html5/thumbnails/13.jpg)
Dining-Philosophers Problem The philosophers share a circular table
surrounded by five chairs, each belonging to one philosopher
In the center of table is a bowl of rice, and the table is laid with 5 single chopsticks
From time to time, a philosopher gets hungry and tries to pick up the two chopsticks that are closest to her
When a hungry philosopher has both her chopsticks at the same time, she eats without releasing her chopsticks
When she is finished eating, she puts down both her chopsticks and starts thinking
![Page 14: 6.5 Semaphore Can only be accessed via two indivisible (atomic) operations wait (S) { while S](https://reader038.fdocuments.net/reader038/viewer/2022110321/56649cf75503460f949c6c26/html5/thumbnails/14.jpg)
Dining-Philosophers Problem
![Page 15: 6.5 Semaphore Can only be accessed via two indivisible (atomic) operations wait (S) { while S](https://reader038.fdocuments.net/reader038/viewer/2022110321/56649cf75503460f949c6c26/html5/thumbnails/15.jpg)
Dining-Philosophers Problem
![Page 16: 6.5 Semaphore Can only be accessed via two indivisible (atomic) operations wait (S) { while S](https://reader038.fdocuments.net/reader038/viewer/2022110321/56649cf75503460f949c6c26/html5/thumbnails/16.jpg)
Dining-Philosophers Problem
Methods to avoid deadlock: Allow at most four philosophers to
be sitting simultaneously Allow a philosopher to pick up her
chopsticks only if both chopsticks are available (pick them up is a critical section)
![Page 17: 6.5 Semaphore Can only be accessed via two indivisible (atomic) operations wait (S) { while S](https://reader038.fdocuments.net/reader038/viewer/2022110321/56649cf75503460f949c6c26/html5/thumbnails/17.jpg)
Problems with Semaphores
signal (mutex) //violate mutual exclusive critical sectionwait (mutex)
wait (mutex) //deadlock occurs critical sectionwait (mutex)
Omitting of wait (mutex) or signal (mutex) (or both)
![Page 18: 6.5 Semaphore Can only be accessed via two indivisible (atomic) operations wait (S) { while S](https://reader038.fdocuments.net/reader038/viewer/2022110321/56649cf75503460f949c6c26/html5/thumbnails/18.jpg)
Monitors
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
![Page 19: 6.5 Semaphore Can only be accessed via two indivisible (atomic) operations wait (S) { while S](https://reader038.fdocuments.net/reader038/viewer/2022110321/56649cf75503460f949c6c26/html5/thumbnails/19.jpg)
Syntax of Monitor
monitor monitor-name{ // shared variable declarations procedure P1 (…) { …. } … procedure Pn(…) {……} Initialization code ( ….) { …} …}
![Page 20: 6.5 Semaphore Can only be accessed via two indivisible (atomic) operations wait (S) { while S](https://reader038.fdocuments.net/reader038/viewer/2022110321/56649cf75503460f949c6c26/html5/thumbnails/20.jpg)
Monitor
![Page 21: 6.5 Semaphore Can only be accessed via two indivisible (atomic) operations wait (S) { while S](https://reader038.fdocuments.net/reader038/viewer/2022110321/56649cf75503460f949c6c26/html5/thumbnails/21.jpg)
Condition Variables However, the monitor construct, as defined so
far, is not powerful enough We need to define one or more variables of
type condition: condition x, y;
Two operations on a condition variable:
x.wait() –a process that invokes the operation is suspended.
x.signal() –resumes one of processes (if any) that invoked x.wait()
![Page 22: 6.5 Semaphore Can only be accessed via two indivisible (atomic) operations wait (S) { while S](https://reader038.fdocuments.net/reader038/viewer/2022110321/56649cf75503460f949c6c26/html5/thumbnails/22.jpg)
Monitor with Condition Variables
![Page 23: 6.5 Semaphore Can only be accessed via two indivisible (atomic) operations wait (S) { while S](https://reader038.fdocuments.net/reader038/viewer/2022110321/56649cf75503460f949c6c26/html5/thumbnails/23.jpg)
Syntax of Monitor
monitor monitor-name{ // shared variable declarations procedure P1 (…) { …. } … procedure Pn(…) {……} Initialization code ( ….) { …} …}
![Page 24: 6.5 Semaphore Can only be accessed via two indivisible (atomic) operations wait (S) { while S](https://reader038.fdocuments.net/reader038/viewer/2022110321/56649cf75503460f949c6c26/html5/thumbnails/24.jpg)
Solution to Dining Philosophers
![Page 25: 6.5 Semaphore Can only be accessed via two indivisible (atomic) operations wait (S) { while S](https://reader038.fdocuments.net/reader038/viewer/2022110321/56649cf75503460f949c6c26/html5/thumbnails/25.jpg)
Solution to Dining Philosophers
![Page 26: 6.5 Semaphore Can only be accessed via two indivisible (atomic) operations wait (S) { while S](https://reader038.fdocuments.net/reader038/viewer/2022110321/56649cf75503460f949c6c26/html5/thumbnails/26.jpg)
Solution to Dining Philosophers
Each philosopher I invokes the operations pickup() and putdown() in the following sequence:
dp.pickup(i) EATdp.putdown(i)
![Page 27: 6.5 Semaphore Can only be accessed via two indivisible (atomic) operations wait (S) { while S](https://reader038.fdocuments.net/reader038/viewer/2022110321/56649cf75503460f949c6c26/html5/thumbnails/27.jpg)
Monitor Implementation Using Semaphores
![Page 28: 6.5 Semaphore Can only be accessed via two indivisible (atomic) operations wait (S) { while S](https://reader038.fdocuments.net/reader038/viewer/2022110321/56649cf75503460f949c6c26/html5/thumbnails/28.jpg)
Monitor Implementation Using Semaphores
![Page 29: 6.5 Semaphore Can only be accessed via two indivisible (atomic) operations wait (S) { while S](https://reader038.fdocuments.net/reader038/viewer/2022110321/56649cf75503460f949c6c26/html5/thumbnails/29.jpg)
Monitor Implementation Using Semaphores