18
Silberschatz, Galvin and Gagne 2002 Modified for CSCI 399, Royden, 2005 7.1 Operating System Concepts Operating Systems Lecture 22 Semaphores Classic Synchronization Problems

Operating Systems Lecture 22 Semaphores Classic Synchronization Problems

Embed Size (px)

DESCRIPTION

Operating Systems Lecture 22 Semaphores Classic Synchronization Problems. Semaphores. Synchronization tool that does not require busy waiting. Semaphore S – integer variable - PowerPoint PPT Presentation

Citation preview

Page 1: Operating Systems Lecture 22 Semaphores Classic Synchronization Problems

Silberschatz, Galvin and Gagne 2002Modified for CSCI 399, Royden, 2005

7.1Operating System Concepts

Operating Systems

Lecture 22Semaphores

Classic Synchronization Problems

Page 2: Operating Systems Lecture 22 Semaphores Classic Synchronization Problems

Silberschatz, Galvin and Gagne 2002Modified for CSCI 399, Royden, 2005

7.2Operating System Concepts

Semaphores

Synchronization tool that does not require busy waiting. Semaphore S – integer variable can only be accessed via two indivisible (atomic) operations

(Note: order of wait instructions corrected from last set of slides).

wait (S) {

S--;

if (S < 0) then block(P);

}

signal (S) {

S++;

if (S <= 0) then wakeup(P);

}

Page 3: Operating Systems Lecture 22 Semaphores Classic Synchronization Problems

Silberschatz, Galvin and Gagne 2002Modified for CSCI 399, Royden, 2005

7.3Operating System Concepts

Critical Section of n Processes

Shared data: semaphore mutex; //initially mutex = 1

Process Pi:

do { wait(mutex); critical section

signal(mutex); remainder section} while (1);

Page 4: Operating Systems Lecture 22 Semaphores Classic Synchronization Problems

Silberschatz, Galvin and Gagne 2002Modified for CSCI 399, Royden, 2005

7.4Operating System Concepts

Questions about Semaphore

Suppose mutex is initialized to 1.

What does mutex == 1 mean?

What does mutex == 0 mean?

What does mutex < 0 mean?

When should mutex be initialized to value > 1?

Page 5: Operating Systems Lecture 22 Semaphores Classic Synchronization Problems

Silberschatz, Galvin and Gagne 2002Modified for CSCI 399, Royden, 2005

7.5Operating System Concepts

Semaphore Implementation

Define a semaphore as a record

typedef 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 6: Operating Systems Lecture 22 Semaphores Classic Synchronization Problems

Silberschatz, Galvin and Gagne 2002Modified for CSCI 399, Royden, 2005

7.6Operating System Concepts

Implementation

Semaphore operations now defined as void wait(semaphore S) {

S.value--;if (S.value < 0) {

add this process to S.L;block( );

}}void signal(semaphore S) {

S.value++;if (S.value <= 0) {

remove a process P from S.L;wakeup(P);

}}

Page 7: Operating Systems Lecture 22 Semaphores Classic Synchronization Problems

Silberschatz, Galvin and Gagne 2002Modified for CSCI 399, Royden, 2005

7.7Operating System Concepts

Notes on Implementation

If the semaphore has a negative value, the magnitude of the value indicates the number of processes waiting on that semaphore.

One can use a FIFO queue to ensure bounded waiting. (A LIFO queue can lead to starvation).

The wait and signal must be executed atomically. In a single processor environment, can disable

interrupts during the wait and signal function calls. In a multiprocessor environment, can use a solution

to the critical section problem discussed earlier. Either a hardware solution (e.g. TestAndSet) if available, or a software solution.

Page 8: Operating Systems Lecture 22 Semaphores Classic Synchronization Problems

Silberschatz, Galvin and Gagne 2002Modified for CSCI 399, Royden, 2005

7.8Operating System Concepts

What is the Problem here?

. Let S and Q be two semaphores initialized to 1

P0 P1

wait(S); wait(Q);

wait(Q); wait(S);

signal(S); signal(Q);

signal(Q) signal(S);

Page 9: Operating Systems Lecture 22 Semaphores Classic Synchronization Problems

Silberschatz, Galvin and Gagne 2002Modified for CSCI 399, Royden, 2005

7.9Operating System Concepts

Two Types of Semaphores

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.

Can implement a counting semaphore S as a binary semaphore.

Page 10: Operating Systems Lecture 22 Semaphores Classic Synchronization Problems

Silberschatz, Galvin and Gagne 2002Modified for CSCI 399, Royden, 2005

7.10Operating System Concepts

Implementing S as a Binary Semaphore

Data structures:binary-semaphore S1, S2;int C:

Initialization:S1 = 1S2 = 0C = initial value of semaphore

S

Page 11: Operating Systems Lecture 22 Semaphores Classic Synchronization Problems

Silberschatz, Galvin and Gagne 2002Modified for CSCI 399, Royden, 2005

7.11Operating System Concepts

Implementing S wait operation

wait (S) {wait(S1);C--;if (C < 0) {

signal(S1);wait(S2);

}signal(S1);

} signal operation

signal (S) {wait(S1);C ++;if (C <= 0)

signal(S2);else

signal(S1); }

Page 12: Operating Systems Lecture 22 Semaphores Classic Synchronization Problems

Silberschatz, Galvin and Gagne 2002Modified for CSCI 399, Royden, 2005

7.12Operating System Concepts

Bounded-Buffer Problem

Assume n buffer slots for data

Shared data

semaphore full, empty, mutex;

Initially:

full = 0, empty = n, mutex = 1

Page 13: Operating Systems Lecture 22 Semaphores Classic Synchronization Problems

Silberschatz, Galvin and Gagne 2002Modified for CSCI 399, Royden, 2005

7.13Operating System Concepts

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);

Page 14: Operating Systems Lecture 22 Semaphores Classic Synchronization Problems

Silberschatz, Galvin and Gagne 2002Modified for CSCI 399, Royden, 2005

7.14Operating System Concepts

Bounded-Buffer Problem Consumer Process

do { wait(full)wait(mutex);

…remove an item from buffer to nextc

…signal(mutex);signal(empty);

…consume the item in nextc

…} while (1);

Page 15: Operating Systems Lecture 22 Semaphores Classic Synchronization Problems

Silberschatz, Galvin and Gagne 2002Modified for CSCI 399, Royden, 2005

7.15Operating System Concepts

Readers-Writers Problem

Shared datasemaphore mutex, wrt;int readcount

Initiallymutex = 1, wrt = 1, readcount = 0

Writer's code:wait(wrt);

…writing is performed

…signal(wrt);

Page 16: Operating Systems Lecture 22 Semaphores Classic Synchronization Problems

Silberschatz, Galvin and Gagne 2002Modified for CSCI 399, Royden, 2005

7.16Operating System Concepts

Readers-Writers Problem Reader Process

wait(mutex);readcount++;if (readcount == 1)

wait(wrt);signal(mutex);

…reading is performed

…wait(mutex);readcount--;if (readcount == 0)

signal(wrt);signal(mutex):

Page 17: Operating Systems Lecture 22 Semaphores Classic Synchronization Problems

Silberschatz, Galvin and Gagne 2002Modified for CSCI 399, Royden, 2005

7.17Operating System Concepts

Dining-Philosophers Problem

Shared data

semaphore chopstick[5];

Initially all values are 1

Page 18: Operating Systems Lecture 22 Semaphores Classic Synchronization Problems

Silberschatz, Galvin and Gagne 2002Modified for CSCI 399, Royden, 2005

7.18Operating System Concepts

Dining-Philosophers Problem

Philosopher i:do {

wait(chopstick[i])wait(chopstick[(i+1) % 5])

…eat …

signal(chopstick[i]);signal(chopstick[(i+1) % 5]);

…think …

} while (1);