Module 2B.pptx 3
Module 2B.pptx 3
Synchronization
Operating System Concepts – 8th Edition Silberschatz, Galvin and Gagne ©2009
Outline
Introduction to Process – Scheduling – Operations-Interprocess Communication. Synchronization: Critical
Section-Hardware- Mutex- Semaphore –Monitors. Threads: Multithreading Models- Thread Library- Issues
● Background
● The Critical-Section Problem
● Peterson’s Solution
● Synchronization Hardware
● Semaphores
● Classic Problems of Synchronization
● Monitors
Operating System Concepts – 8th Edition 2 Silberschatz, Galvin and Gagne ©2009
Objectives
To introduce the critical-section problem, whose solutions can be used to ensure the consistency of shared
data
To introduce the concept of an atomic transaction and describe mechanisms to ensure atomicity
Operating System Concepts – 8th Edition 3 Silberschatz, Galvin and Gagne ©2009
Background
● Concurrent access to shared data may result in data inconsistency
● Maintaining data consistency requires mechanisms to ensure the orderly execution of cooperating
processes
● Suppose that we wanted to provide a solution to the consumer-producer problem that fills all the buffers.
We can do so by having an integer count that keeps track of the number of full buffers. Initially, count is
set to 0. It is incremented by the producer after it produces a new buffer and is decremented by the
consumer after it consumes a buffer.
Operating System Concepts – 8th Edition 4 Silberschatz, Galvin and Gagne ©2009
Producer
while (true) {
Operating System Concepts – 8th Edition 5 Silberschatz, Galvin and Gagne ©2009
Consumer
while (true) {
while (counter == 0)
; // do nothing
nextConsumed = buffer[out];
out = (out + 1) % BUFFER_SIZE;
counter--;
Operating System Concepts – 8th Edition 6 Silberschatz, Galvin and Gagne ©2009
Race Condition
Race Condition is a situation that occurs when two or more threads or processes access a
shared resource, such as a file or a variable, at the same time.
Ex
counter++ could be implemented as
register1 = counter
register1 = register1 + 1
counter = register1
Operating System Concepts – 8th Edition 7 Silberschatz, Galvin and Gagne ©2009
Cont…
The following race condition occurs:
App A reads the current balance, which is ₹1000
App A adds ₹200 to ₹1000 and gets ₹1200 as the final balance
Meanwhile, app B fetches the current balance, which is still ₹1000, as app A has not executed step 3
App B adds ₹500 to ₹1000 and gets ₹1500 as the final balance
App B updates the account balance to ₹1500
App A updates the account balance to ₹1200
Thus the final balance is ₹1200 instead of ₹1700
Operating System Concepts – 8th Edition Silberschatz, Galvin and Gagne ©2009
Operating System Concepts – 8th Edition 9 Silberschatz, Galvin and Gagne ©2009
Critical Section
General structure of process pi is
Operating System Concepts – 8th Edition 1 Silberschatz, Galvin and Gagne ©2009
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. This should not lead to the problem of Starvation.
Assume that each process executes at a nonzero speed
No assumption concerning relative speed of the n processes
4. No assumption related to Hardware and Speed- Execute solution must be universal ie easily flexible and
portable.
Operating System Concepts – 8th Edition 11 Silberschatz, Galvin and Gagne ©2009
1. Mutual Exclusion- Not Satisfied as instruction 1 and 2 can have preemption in between
2. Progress
3. Bounded Waiting
4. Portability
Operating System Concepts – 8th Edition 12 Silberschatz, Galvin and Gagne ©2009
Operating System Concepts – 8th Edition 13 Silberschatz, Galvin and Gagne ©2009
Cont…
● It is an instruction that returns the old value of a memory location and sets the memory location
value to 1 as a single atomic operation.
● If one process is currently executing a test-and-set, no other process is allowed to begin another
test-and-set until the first process test-and-set is finished.
Characteristics of this synchronization mechanism are-
● It ensures mutual exclusion.
● It is deadlock free, progress is achieved
● It does not guarantee bounded waiting and may cause starvation.
● It is not architectural neutral since it requires the operating system to support test-and-set instruction.
Operating System Concepts – 8th Edition Silberschatz, Galvin and Gagne ©2009
Cont..
● Initially, turn value is set to 0.
○ Turn value = 0 means it is the turn of process P0 to enter the critical section.
○ Turn value = 1 means it is the turn of process P1 to enter the critical section.
P0 sets Flag[0]=True
3. Bounded Waiting
4. Portability
Operating System Concepts – 8th Edition 18 Silberschatz, Galvin and Gagne ©2009
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!
Operating System Concepts – 8th Edition 19 Silberschatz, Galvin and Gagne ©2009
do {
flag[i] = TRUE;
turn = j;
while (flag[j] && turn == j);
critical section
flag[i] = FALSE;
remainder section
} while (TRUE);
Provable that
Operating System Concepts – 8th Edition 20 Silberschatz, Galvin and Gagne ©2009
Multi-process Solution-Bakery
Algorithm ● Algorithm to solve Critical Section for Multi-processes or N processes
● The Bakery algorithm is one of the simplest known solutions to the mutual exclusion problem for the general case
of N process.
● The algorithm preserves the first come first serve property.
How it works?
● In the Bakery Algorithm, each process is assigned a number (a ticket) in a lexicographical order. Before entering the
critical section, a process receives a ticket number, and the process with the smallest ticket number enters the
critical section. If two processes receive the same ticket number, the process with the lower process ID is given
priority.
○ Before entering its critical section, the process receives a number. Holder of the smallest number enters the
critical section.
○ If processes Pi and Pj receive the same number, then
■ if i < j
■ Pi is served first;
■ else
■ Pj is served first.
Operating System Concepts – 8th Edition Silberschatz, Galvin and Gagne ©2009
Cont…
Condition for lexicographical order (ticket #, process id #)
-Firstly the ticket number is compared. If same then the process ID is compared next
– (a, b) < (c, d) if a < c or if a = c and b < d
– max(a [0], . . ., a [n-1]) is a number, k, such that k >= a[i] for i = 0, . . ., n - 1
Operating System Concepts – 8th Edition Silberschatz, Galvin and Gagne ©2009
Psuedocode
do {
choosing[i] := True;
for j := 0 to n - 1
begin
end;
// Critical section
number[i] := 0;
remainder section
} while(True);
Operating System Concepts – 8th Edition Silberschatz, Galvin and Gagne ©2009
Cont..
Mutual Exclusion- Satisfied
If P1 is in CS and P2 trying to enter, on the second while if condition become True, it loops
until P1 leaves CS
Progress is also there as Process enter in FCFS
Bounded waiting is there as process before leaving sets number[i]=0 and
choosing [i]=False
No hardware dependency
Operating System Concepts – 8th Edition Silberschatz, Galvin and Gagne ©2009
Semaphore
● Synchronization tool used to avoid race condition in concurrent processes
● It that does not require busy waiting
Operating System Concepts – 8th Edition 25 Silberschatz, Galvin and Gagne ©2009
Semaphore
● Two standard operations modify S: wait() and signal()
○ Originally called P() and V()
○ Also known as Down() and Up()
● Less complicated
● Semaphore S – integer variable initialized to 1 ● Can only be
accessed via two indivisible (atomic) operations
wait (S) {
while S <= 0
; // no-op
S--;
}
signal (S) {
S++;
}
Operating System Concepts – 8th Edition 26 Silberschatz, Galvin and Gagne ©2009
Semaphore as
General Synchronization Tool
Semaphore Implementation
● Must guarantee that no two processes can execute wait () and signal () on the same
semaphore at the same time
● Thus, implementation becomes the critical section problem where the wait and signal code
are placed in the critical section
● Could now have busy waiting in critical section implementation
○ Busy waiting is defined as the process where the process or task continuously
the processor and waits for the condition to be satisfied. This leads to wastage
of CPU cycles that some other process will be able to use productively
○ But implementation code is short
○ Little busy waiting if critical section rarely occupied
● Note that applications may spend lots of time in critical sections and therefore this is not a
good solution
Operating System Concepts – 8th Edition 28 Silberschatz, Galvin and Gagne ©2009
Semaphore Implementation
with no Busy waiting
Operating System Concepts – 8th Edition 29 Silberschatz, Galvin and Gagne ©2009
Implementation of wait:
wait(semaphore *S) {
S->value--;
if (S->value < 0) {
add this process to S->list; // Add process to suspended/block list
block();
}
}
Implementation of signal:
signal(semaphore *S) {
S->value++;
if (S->value <= 0) // Indicates some process in suspended list
{
remove a process P from S->list;
wakeup(P);
}
}
Operating System Concepts – 8th Edition 30 Silberschatz, Galvin and Gagne ©2009
Operating System Concepts – 8th Edition 31 Silberschatz, Galvin and Gagne ©2009
Classical Problems of
Synchronization Classical problems used to test newly-proposed synchronization
schemes
● Bounded-Buffer Problem
Operating System Concepts – 8th Edition 32 Silberschatz, Galvin and Gagne ©2009
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
wait(S){
while(S<=0); // busy waiting
S--;
}
signal(S){
S++;
}
Operating System Concepts – 8th Edition 33 Silberschatz, Galvin and Gagne ©2009
signal (mutex);
signal (full);
} while (TRUE);
Operating System Concepts – 8th Edition 34 Silberschatz, Galvin and Gagne ©2009
signal (mutex);
signal (empty);
} while (TRUE);
Operating System Concepts – 8th Edition 35 Silberschatz, Galvin and Gagne ©2009
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
Several variations of how readers and writers are treated – all involve priorities
Shared Data
Data set
Semaphore mutex initialized to 1
Semaphore wrt initialized to 1
Integer readcount initialized to 0
Operating System Concepts – 8th Edition 36 Silberschatz, Galvin and Gagne ©2009
// writing is performed
signal (wrt) ;
} while (TRUE);
Operating System Concepts – 8th Edition 37 Silberschatz, Galvin and Gagne ©2009
do {
wait (mutex) ;
readcount ++ ;
if (readcount == 1)
wait (wrt) ;
signal (mutex)
// reading is performed
wait (mutex) ;
readcount - - ;
if (readcount == 0)
signal (wrt) ;
signal (mutex) ;
} while (TRUE);
Operating System Concepts – 8th Edition 38 Silberschatz, Galvin and Gagne ©2009
Readers-Writers Problem
Variations First variation – no reader kept waiting unless writer has permission to use shared
object
Second variation – once writer is ready, it performs write asap
Dining-Philosophers Problem
Philosophers spend their lives thinking and eating
Don’t interact with their neighbors, occasionally try to pick up 2 chopsticks (one at a time) to eat from bowl
Need both to eat, then release both when done
In the case of 5 philosophers
Shared data
Bowl of rice (data set)
Semaphore chopstick [5] initialized to 1
Operating System Concepts – 8th Edition 40 Silberschatz, Galvin and Gagne ©2009
// eat
signal ( chopstick[i] );
signal (chopstick[ (i + 1) % 5] );
// think
} while (TRUE);
Operating System Concepts – 8th Edition 41 Silberschatz, Galvin and Gagne ©2009
Operating System Concepts – 8th Edition 42 Silberschatz, Galvin and Gagne ©2009
Solutions to avoid deadlock
- Allow N-1 persons to sit simultaneously, so one Process i can get access to both
chopsticks and start eating. After eating, releases fork so Process j can start eating -
Allow Philosopher to pick up chopsticks if both are available
- Use a asymmetric solution where Odd Philosopher picks up left chopstick first ,
then Right and even Philosopher did vice versa
Operating System Concepts – 8th Edition Silberschatz, Galvin and Gagne ©2009
Monitors
● A high-level abstraction that provides a convenient and effective mechanism
for process synchronization
● Abstract data type, internal variables only accessible by code within the procedure
● Only one process may be active within the monitor at a time ● But not
powerful enough to model some synchronization schemes
monitor monitor-name
{
// shared variable declarations
procedure P1 (…) { …. }// Procedures that can be performed on shared
variables
Operating System Concepts – 8th Edition 46 Silberschatz, Galvin and Gagne ©2009
Options include
Signal and wait – P waits until Q leaves monitor or waits for another condition
Signal and continue – Q waits until P leaves the monitor or waits for another condition
initialization_code() {
for (int i = 0; i < 5; i++)
state[i] = THINKING;
}
}
Operating System Concepts – 8th Edition 50 Silberschatz, Galvin and Gagne ©2009
DiningPhilosophers.pickup (i);
EAT
DiningPhilosophers.putdown (i);
wait(mutex);
…
body of F;
…
if (next_count > 0)
signal(next)
else
signal(mutex);
Operating System Concepts – 8th Edition 52 Silberschatz, Galvin and Gagne ©2009
x-count++;
if (next_count > 0)
signal(next);
else
signal(mutex);
wait(x_sem);
x-count--;
Operating System Concepts – 8th Edition 53 Silberschatz, Galvin and Gagne ©2009
Operating System Concepts – 8th Edition 56 Silberschatz, Galvin and Gagne ©2009
Linux
Pthreads
Operating System Concepts – 8th Edition 57 Silberschatz, Galvin and Gagne ©2009
Uses turnstiles to order the list of threads waiting to acquire either an adaptive mutex or reader-writer lock
Turnstiles are per-lock-holding-thread, not per-object
Priority-inheritance per-turnstile gives the running thread the highest of the priorities of the threads in its turnstile
Operating System Concepts – 8th Edition 58 Silberschatz, Galvin and Gagne ©2009
Also provides dispatcher objects user-land which may act mutexes, semaphores, events, and timers
Events
An event acts much like a condition variable
Timers notify one or more thread when time expired
Dispatcher objects either signaled-state (object available) or non-signaled state (thread will block)
Operating System Concepts – 8th Edition 59 Silberschatz, Galvin and Gagne ©2009
Linux Synchronization
Linux:
Prior to kernel Version 2.6, disables interrupts to implement short critical sections
Version 2.6 and later, fully preemptive
Linux provides:
semaphores
spinlocks
reader-writer versions of both
Operating System Concepts – 8th Edition 60 Silberschatz, Galvin and Gagne ©2009
Pthreads Synchronization
Pthreads API is OS-independent
It provides:
mutex locks
condition variables
Non-portable extensions include:
read-write locks
spinlocks
Operating System Concepts – 8th Edition 61 Silberschatz, Galvin and Gagne ©2009
End of Module 2B
Operating System Concepts – 8th Edition Silberschatz, Galvin and Gagne ©2009