Professional Documents
Culture Documents
perating System Concepts – 7th Edition, Feb 8, 2005 6.2 Silberschatz, Galvin and Gagne
Example: Consumer-Producer
Problem
Suppose that we wanted
Producer adds items to provide a solution to
and increments counter the consumer-producer
problem with a shared
buffer
We can do so by having
an integer counter that
Shared buffer keeps track of the
number of items in the
buffer
Initially, counter is set
to 0
The counter is
counter incremented by the
items producer after it
produces a new item
The counter is
Consumer takes items decremented by the
and decrements counter consumer after it
consumes an item
perating System Concepts – 7th Edition, Feb 8, 2005 6.3 Silberschatz, Galvin and Gagne
Producer
while (true) {
perating System Concepts – 7th Edition, Feb 8, 2005 6.4 Silberschatz, Galvin and Gagne
Consumer
while (true) {
while (counter == 0)
; /* buffer is empty: do nothing */
nextConsumed = buffer[out];
out = (out + 1) % BUFFER_SIZE;
counter--;
/* consume the item in nextConsumed */
}
perating System Concepts – 7th Edition, Feb 8, 2005 6.5 Silberschatz, Galvin and Gagne
Race Condition
counter++ could be implemented as
register1 = counter
register1 = register1 + 1
counter = register1
counter-- could be implemented as
register2 = counter
register2 = register2 - 1
counter = register2
Consider this execution interleaving with “counter = 5” initially:
T0: producer execute register1 = counter {register1 = 5}
T1: producer execute register1 = register1 + 1 {register1 = 6}
perating System Concepts – 7th Edition, Feb 8, 2005 6.6 Silberschatz, Galvin and Gagne
Critical Section Problem
n processes all competing to use some shared data
perating System Concepts – 7th Edition, Feb 8, 2005 6.7 Silberschatz, Galvin and Gagne
Mutual Exclusion
perating System Concepts – 7th Edition, Feb 8, 2005 6.8 Silberschatz, Galvin and Gagne
C
S
5
7
1
perating System Concepts – 7th Edition, Feb 8, 2005 6.10 Silberschatz, Galvin and Gagne
Algorithm for Process Pi
while (true) {
flag[i] = true;
turn = j;
while (flag[j] && turn == j)
; // no-op
CRITICAL SECTION
flag[i] = false;
REMAINDER SECTION
perating System Concepts – 7th Edition, Feb 8, 2005 6.11 Silberschatz, Galvin and Gagne
Synchronization
Solution to critical-
do { section problem requires
a lock
Many systems provide
acquire lock
hardware support for
implementing locks
CRITICAL SECTION
Uniprocessors – could
simply disable interrupts
release lock
Currently running
locking code would
REMAINDER
execute without
SECTION preemption
Generally too
} while (true) inefficient on
multiprocessor
systems
Operating systems
using this not
broadly scalable
perating System Concepts – 7th Edition, Feb 8, 2005 6.12 Silberschatz, Galvin and Gagne
Synchronization Hardware
Software locks are inefficient (and tricky to
implement correctly)
Modern machines provide special atomic (=
uninterruptible) hardware instructions
TestAndSet: test memory word and set value
Swap: exchange contents of two memory
words
These atomic instructions can be efficiently
used to implement critical section code
perating System Concepts – 7th Edition, Feb 8, 2005 6.13 Silberschatz, Galvin and Gagne
Atomic TestAndSet Instruction
Definition:
perating System Concepts – 7th Edition, Feb 8, 2005 6.14 Silberschatz, Galvin and Gagne
CS Solution using TestAndSet
while (true) {
while (TestAndSet(&lock))
; /* do nothing */
/* CRITICAL SECTION */
lock = false;
/* REMAINDER SECTION */
perating System Concepts – 7th Edition, Feb 8, 2005 6.15 Silberschatz, Galvin and Gagne
Atomic Swap Instruction
Definition:
perating System Concepts – 7th Edition, Feb 8, 2005 6.16 Silberschatz, Galvin and Gagne
CS Solution using Swap
Shared boolean variable lock initialized to false;
Each process has a local boolean variable key
Solution:
while (true) {
key = true;
while (key == true)
Swap(&lock, &key);
/* CRITICAL SECTION */
lock = false;
/* REMAINDER SECTION */
perating System Concepts – 7th Edition, Feb 8, 2005 6.17 Silberschatz, Galvin and Gagne
Semaphore
Semaphore S – an integer variable
Two standard operations modify S: wait() and signal()
Originally called P() (Dutch proberen) and V() (Dutch
verhogen)
Can only be accessed via two indivisible (atomic)
operations:
wait (S) {
while (S <= 0)
; // no-op
S--;
}
signal (S) {
S++;
}
perating System Concepts – 7th Edition, Feb 8, 2005 6.18 Silberschatz, Galvin and Gagne
Semaphore as General Synchronization
Tool
perating System Concepts – 7th Edition, Feb 8, 2005 6.19 Silberschatz, Galvin and Gagne
Semaphore Implementation
perating System Concepts – 7th Edition, Feb 8, 2005 6.20 Silberschatz, Galvin and Gagne
Semaphore Implementation with no Busy
Waiting
perating System Concepts – 7th Edition, Feb 8, 2005 6.21 Silberschatz, Galvin and Gagne
Semaphore Implementation with no Busy waiting
(Cont.)
Implementation of wait:
wait (Semaphore *S) {
S->value--;
if (value < 0) {
add this process to S->list
block();
}
}
Implementation of signal:
signal (Semaphore *S) {
S->value++;
if (value <= 0) {
remove a process P from S->list
wakeup(P);
}
}
perating System Concepts – 7th Edition, Feb 8, 2005 6.22 Silberschatz, Galvin and Gagne
Deadlock and Starvation
Deadlock – two 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 P1
wait (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
perating System Concepts – 7th Edition, Feb 8, 2005 6.23 Silberschatz, Galvin and Gagne
Classical Problems of
Synchronization
Bounded-Buffer Problem
Dining-Philosophers Problem
perating System Concepts – 7th Edition, Feb 8, 2005 6.24 Silberschatz, Galvin and Gagne
Bounded-Buffer Problem
perating System Concepts – 7th Edition, Feb 8, 2005 6.25 Silberschatz, Galvin and Gagne
Bounded Buffer Problem (Cont.)
The producer process:
while (true) {
// produce an item
wait (empty);
wait (mutex);
signal (mutex);
signal (full);
}
perating System Concepts – 7th Edition, Feb 8, 2005 6.26 Silberschatz, Galvin and Gagne
Bounded Buffer Problem (Cont.)
The consumer process:
while (true) {
wait (full);
wait (mutex);
signal (mutex);
signal (empty);
perating System Concepts – 7th Edition, Feb 8, 2005 6.27 Silberschatz, Galvin and Gagne
Readers-Writers Problem
perating System Concepts – 7th Edition, Feb 8, 2005 6.28 Silberschatz, Galvin and Gagne
Readers-Writers Problem (Cont.)
The writer process:
while (true) {
wait (wrt);
// writing is performed
signal (wrt);
}
perating System Concepts – 7th Edition, Feb 8, 2005 6.29 Silberschatz, Galvin and Gagne
Readers-Writers Problem (Cont.)
The reader process:
while (true) {
wait (mutex);
readcount++;
if (readcount == 1) wait (wrt);
signal (mutex);
// reading is performed
wait (mutex);
readcount--;
if (readcount == 0) signal (wrt);
signal (mutex);
}
perating System Concepts – 7th Edition, Feb 8, 2005 6.30 Silberschatz, Galvin and Gagne
Dining-Philosophers Problem
Shared data
Bowl of rice (data set)
Each philosopher needs two chopsticks to eat rice
Five semaphores chopstick [5] ; all initialized to 1
perating System Concepts – 7th Edition, Feb 8, 2005 6.31 Silberschatz, Galvin and Gagne
Dining-Philosophers Problem
(Cont.)
The structure of Philosopher i:
while (true) {
wait (chopstick[i] );
wait (chopstick[(i + 1) % 5]);
// eat
signal (chopstick[i]);
signal (chopstick[(i + 1) % 5]);
// think
perating System Concepts – 7th Edition, Feb 8, 2005 6.32 Silberschatz, Galvin and Gagne
Problems with Semaphores
perating System Concepts – 7th Edition, Feb 8, 2005 6.33 Silberschatz, Galvin and Gagne
Monitors
A high-level abstraction that provides a convenient
and effective mechanism for process synchronization
monitor monitor-name
{
// shared variable declarations
procedure P1 (…) { … }
…
procedure Pn (…) { … }
perating System Concepts – 7th Edition, Feb 8, 2005 6.34 Silberschatz, Galvin and Gagne
Schematic view of a Monitor
perating System Concepts – 7th Edition, Feb 8, 2005 6.35 Silberschatz, Galvin and Gagne
Condition Variables
perating System Concepts – 7th Edition, Feb 8, 2005 6.36 Silberschatz, Galvin and Gagne
Monitor with Condition Variables
perating System Concepts – 7th Edition, Feb 8, 2005 6.37 Silberschatz, Galvin and Gagne
Solution to Dining Philosophers
monitor DP
{
enum {THINKING, HUNGRY, EATING} state[5];
condition self[5];
perating System Concepts – 7th Edition, Feb 8, 2005 6.38 Silberschatz, Galvin and Gagne
Solution to Dining Philosophers (cont)
initialization_code() {
for (int i = 0; i < 5; i++)
state[i] = THINKING;
}
} // end of monitor DP
perating System Concepts – 7th Edition, Feb 8, 2005 6.39 Silberschatz, Galvin and Gagne
Solution to Dining Philosophers (cont)
dp.pickup (i);
EAT
dp.putdown (i);
perating System Concepts – 7th Edition, Feb 8, 2005 6.40 Silberschatz, Galvin and Gagne
Monitor Implementation Using
Semaphores
Variables
semaphore mutex; // initially = 1
semaphore next; // initially = 0
int next_count = 0;
Each procedure F will be replaced by
wait(mutex);
…
body of F
…
if (next_count > 0)
signal(next);
else
signal(mutex);
Mutual exclusion within a monitor is ensured
perating System Concepts – 7th Edition, Feb 8, 2005 6.41 Silberschatz, Galvin and Gagne
Monitor Implementation
For each condition variable x, we have:
semaphore x_sem; // initially = 0
int x_count = 0;
perating System Concepts – 7th Edition, Feb 8, 2005 6.42 Silberschatz, Galvin and Gagne
Monitor Implementation
if (x_count > 0) {
next_count++;
signal(x_sem);
wait(next);
next_count--;
}
perating System Concepts – 7th Edition, Feb 8, 2005 6.43 Silberschatz, Galvin and Gagne
Synchronization Examples
Solaris
Windows XP
Linux
Pthreads
perating System Concepts – 7th Edition, Feb 8, 2005 6.44 Silberschatz, Galvin and Gagne
Solaris Synchronization
perating System Concepts – 7th Edition, Feb 8, 2005 6.45 Silberschatz, Galvin and Gagne
Windows XP Synchronization
perating System Concepts – 7th Edition, Feb 8, 2005 6.46 Silberschatz, Galvin and Gagne
Linux Synchronization
Linux provides:
Semaphores
Spinlocks
perating System Concepts – 7th Edition, Feb 8, 2005 6.47 Silberschatz, Galvin and Gagne
Pthreads Synchronization
perating System Concepts – 7th Edition, Feb 8, 2005 6.48 Silberschatz, Galvin and Gagne
Atomic Transactions
System Model
Log-based Recovery
Checkpoints
perating System Concepts – 7th Edition, Feb 8, 2005 6.49 Silberschatz, Galvin and Gagne
System Model
perating System Concepts – 7th Edition, Feb 8, 2005 6.50 Silberschatz, Galvin and Gagne
Types of Storage Media
perating System Concepts – 7th Edition, Feb 8, 2005 6.51 Silberschatz, Galvin and Gagne
Log-Based Recovery
Record to stable storage information about all
modifications by a transaction
Most common is write-ahead logging
Log on stable storage, each log record describes
single transaction write operation, including
Transaction name
Data item name
Old value
New value
<Ti starts> written to log when transaction Ti
starts
<Ti commits> written when Ti commits
Log entry must reach stable storage before
operation on data occurs
perating System Concepts – 7th Edition, Feb 8, 2005 6.52 Silberschatz, Galvin and Gagne
Log-Based Recovery Algorithm
Using the log, system can handle any volatile memory
errors
undo(Ti) restores value of all data updated by Ti
redo(Ti) sets values of all data in transaction Ti to
new values
Undo(Ti) and redo(Ti) must be idempotent
Multiple executions must have the same result as
one execution
If system fails, restore state of all updated data via log
If log contains <Ti starts> without <Ti commits>,
undo(Ti)
If log contains <Ti starts> and <Ti commits>, redo(Ti)
perating System Concepts – 7th Edition, Feb 8, 2005 6.53 Silberschatz, Galvin and Gagne
Checkpoints
perating System Concepts – 7th Edition, Feb 8, 2005 6.54 Silberschatz, Galvin and Gagne
Concurrent Transactions
perating System Concepts – 7th Edition, Feb 8, 2005 6.55 Silberschatz, Galvin and Gagne
Serializability
perating System Concepts – 7th Edition, Feb 8, 2005 6.56 Silberschatz, Galvin and Gagne
Schedule 1: T0 then T1
perating System Concepts – 7th Edition, Feb 8, 2005 6.57 Silberschatz, Galvin and Gagne
Nonserial Schedule
perating System Concepts – 7th Edition, Feb 8, 2005 6.58 Silberschatz, Galvin and Gagne
Schedule 2: Concurrent Serializable
Schedule
perating System Concepts – 7th Edition, Feb 8, 2005 6.59 Silberschatz, Galvin and Gagne
Locking Protocol
perating System Concepts – 7th Edition, Feb 8, 2005 6.60 Silberschatz, Galvin and Gagne
Two-phase Locking Protocol
perating System Concepts – 7th Edition, Feb 8, 2005 6.61 Silberschatz, Galvin and Gagne
Timestamp-based Protocols
perating System Concepts – 7th Edition, Feb 8, 2005 6.62 Silberschatz, Galvin and Gagne
Timestamp-based Protocol
Implementation
perating System Concepts – 7th Edition, Feb 8, 2005 6.63 Silberschatz, Galvin and Gagne
Timestamp-ordering Protocol
Suppose T executes write(Q)
i
If TS(Ti) < R-timestamp(Q), value Q produced
by Ti was needed previously and Ti assumed it
would never be produced
write operation rejected, Ti rolled back
If TS(Ti) < W-tiimestamp(Q), Ti attempting to
write obsolete value of Q
write operation rejected and Ti rolled back
Otherwise, write executed
Any rolled back transaction T is assigned new
i
timestamp and restarted
Algorithm ensures conflict serializability and
freedom from deadlock
perating System Concepts – 7th Edition, Feb 8, 2005 6.64 Silberschatz, Galvin and Gagne
Schedule Possible Under Timestamp
Protocol
perating System Concepts – 7th Edition, Feb 8, 2005 6.65 Silberschatz, Galvin and Gagne
End of Chapter 6