Chapter 6: Synchronization. 6.2 Silberschatz, Galvin and Gagne ©2005 Operating System Principles...

21
Chapter 6: Synchronization Chapter 6: Synchronization
  • date post

    21-Dec-2015
  • Category

    Documents

  • view

    219
  • download

    2

Transcript of Chapter 6: Synchronization. 6.2 Silberschatz, Galvin and Gagne ©2005 Operating System Principles...

Page 1: Chapter 6: Synchronization. 6.2 Silberschatz, Galvin and Gagne ©2005 Operating System Principles Module 6: Synchronization 6.1 Background 6.2 The Critical-Section.

Chapter 6: SynchronizationChapter 6: Synchronization

Page 2: Chapter 6: Synchronization. 6.2 Silberschatz, Galvin and Gagne ©2005 Operating System Principles Module 6: Synchronization 6.1 Background 6.2 The Critical-Section.

6.2 Silberschatz, Galvin and Gagne ©2005Operating System Principles

Module 6: SynchronizationModule 6: Synchronization

6.1 Background 6.2 The Critical-Section Problem 6.3 Peterson’s Solution 6.4 Synchronization Hardware 6.5 Semaphores 6.6 Classic Problems of Synchronization 6.7 Monitors 6.8 Synchronization Examples 6.9 Atomic Transactions

Page 3: Chapter 6: Synchronization. 6.2 Silberschatz, Galvin and Gagne ©2005 Operating System Principles Module 6: Synchronization 6.1 Background 6.2 The Critical-Section.

6.3 Silberschatz, Galvin and Gagne ©2005Operating System Principles

Independent process cannot affect or be affected by the execution of another process

Cooperating process can affect or be affected by the execution of another process

Advantages of process cooperation Information sharing

Computation speed-up

Modularity

Convenience

Review 3.4.1 Interproces CommunicationReview 3.4.1 Interproces Communication

Page 4: Chapter 6: Synchronization. 6.2 Silberschatz, Galvin and Gagne ©2005 Operating System Principles Module 6: Synchronization 6.1 Background 6.2 The Critical-Section.

6.4 Silberschatz, Galvin and Gagne ©2005Operating System Principles

Communications Models Communications Models

Message passing Shared memory

Page 5: Chapter 6: Synchronization. 6.2 Silberschatz, Galvin and Gagne ©2005 Operating System Principles Module 6: Synchronization 6.1 Background 6.2 The Critical-Section.

6.5 Silberschatz, Galvin and Gagne ©2005Operating System Principles

Producer-Consumer ProblemProducer-Consumer Problem Paradigm for cooperating processes, producer

process produces information that is consumed by a consumer process unbounded-buffer places no practical limit on the size of the

buffer bounded-buffer assumes that there is a fixed buffer size

Shared-Memory Solution : Shared data

#define BUFFER_SIZE 10

Typedef struct {

. . .

} item;

item buffer[BUFFER_SIZE];

int in = 0;

int out = 0;

Page 6: Chapter 6: Synchronization. 6.2 Silberschatz, Galvin and Gagne ©2005 Operating System Principles Module 6: Synchronization 6.1 Background 6.2 The Critical-Section.

6.6 Silberschatz, Galvin and Gagne ©2005Operating System Principles

Bounded-Buffer – Producer() MethodBounded-Buffer – Producer() Method

while (true) { /* produce an item in nextProduced*/

while (( (in + 1) % BUFFER_SIZE) == out)

; /* do nothing -- no free buffers */

buffer[in] = nextProduced;

in = (in + 1) % BUFFER_SIZE;

}

Solution is correct,

but can only use

BUFFER_SIZE-1 elementsBounded-Buffer – Consumer() MethodBounded-Buffer – Consumer() Method

while (true) {

while (in == out)

; // do nothing -- nothing to consume

nextConsumed = buffer[out];

out = (out + 1) % BUFFER SIZE;

/* consume the item in nextConsumed */;

}

Page 7: Chapter 6: Synchronization. 6.2 Silberschatz, Galvin and Gagne ©2005 Operating System Principles Module 6: Synchronization 6.1 Background 6.2 The Critical-Section.

6.7 Silberschatz, Galvin and Gagne ©2005Operating System Principles

BUFFER_SIZE solutionBUFFER_SIZE solutionOne more shared memory variable: counter

Page 8: Chapter 6: Synchronization. 6.2 Silberschatz, Galvin and Gagne ©2005 Operating System Principles Module 6: Synchronization 6.1 Background 6.2 The Critical-Section.

6.8 Silberschatz, Galvin and Gagne ©2005Operating System Principles

Still Have ProblemsStill Have Problems

Page 9: Chapter 6: Synchronization. 6.2 Silberschatz, Galvin and Gagne ©2005 Operating System Principles Module 6: Synchronization 6.1 Background 6.2 The Critical-Section.

6.9 Silberschatz, Galvin and Gagne ©2005Operating System Principles

6.1 Background6.1 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 (Section 3.4.1) 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.

Page 10: Chapter 6: Synchronization. 6.2 Silberschatz, Galvin and Gagne ©2005 Operating System Principles Module 6: Synchronization 6.1 Background 6.2 The Critical-Section.

6.10 Silberschatz, Galvin and Gagne ©2005Operating System Principles

Producer Producer

while (true) {

/* produce an item and put in nextProduced */

while (counter == BUFFER_SIZE)

; // do nothing

buffer [in] = nextProduced;

in = (in + 1) % BUFFER_SIZE;

counter++;

}

while (true) {

while (counter == 0)

; // do nothing

nextConsumed = buffer[out];

out = (out + 1) % BUFFER_SIZE;

counter--;

/* consume the item in nextConsumed

}

ConsumerConsumer

Page 11: Chapter 6: Synchronization. 6.2 Silberschatz, Galvin and Gagne ©2005 Operating System Principles Module 6: Synchronization 6.1 Background 6.2 The Critical-Section.

6.11 Silberschatz, Galvin and Gagne ©2005Operating System Principles

Race ConditionRace 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

Page 12: Chapter 6: Synchronization. 6.2 Silberschatz, Galvin and Gagne ©2005 Operating System Principles Module 6: Synchronization 6.1 Background 6.2 The Critical-Section.

6.12 Silberschatz, Galvin and Gagne ©2005Operating System Principles

Race ConditionRace Condition

Consider this execution interleaving with “counter = 5” initially:

T0: producer execute register1 = counter {register1 = 5}T1: producer execute register1 = register1 + 1 {register1 = 6} T2: consumer execute register2 = counter {register2 = 5} T3: consumer execute register2 = register2 - 1 {register2 = 4} T4: producer execute counter = register1 {count = 6 } T5: consumer execute counter = register2 {count = 4}

If the order T4 and T5 is reversed, then the final state is count = 6

Page 13: Chapter 6: Synchronization. 6.2 Silberschatz, Galvin and Gagne ©2005 Operating System Principles Module 6: Synchronization 6.1 Background 6.2 The Critical-Section.

6.13 Silberschatz, Galvin and Gagne ©2005Operating System Principles

6.2 Solution to Critical-Section Problem6.2 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 some processes wish to enter their critical sections, then only those processes that are not executing in their remainder sections can participate in the decision on which will enter its critical section next, and this selection 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 14: Chapter 6: Synchronization. 6.2 Silberschatz, Galvin and Gagne ©2005 Operating System Principles Module 6: Synchronization 6.1 Background 6.2 The Critical-Section.

6.14 Silberschatz, Galvin and Gagne ©2005Operating System Principles

6.2 Solution to Critical-Section ProblemSolution to Critical-Section Problem

Example kernel data structure that is subject to race conditions: List of open files in the OS

Data structure for free/allocated memory

Process lists

Data structure for interrupts handling

Approaches in handling critical sections in OS: Preemptive kernels

Nonpreemptive kernels

A preemptive kernel is more suitable for real-time programming, more responsive

訂正: p190 倒數第 3 列第 2 個字應為 preemptive

Page 15: Chapter 6: Synchronization. 6.2 Silberschatz, Galvin and Gagne ©2005 Operating System Principles Module 6: Synchronization 6.1 Background 6.2 The Critical-Section.

6.15 Silberschatz, Galvin and Gagne ©2005Operating System Principles

6.3 Peterson’s Solution6.3 Peterson’s Solution

Two process solution Assume that the LOAD and STORE instructions are atomic; that

is, cannot be interrupted.

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 16: Chapter 6: Synchronization. 6.2 Silberschatz, Galvin and Gagne ©2005 Operating System Principles Module 6: Synchronization 6.1 Background 6.2 The Critical-Section.

6.16 Silberschatz, Galvin and Gagne ©2005Operating System Principles

Algorithm for Process Algorithm for Process PPii

while (true) {

flag[i] = TRUE;

turn = j; // j is i -1

while ( flag[j] && turn == j);

CRITICAL SECTION

flag[i] = FALSE;

REMAINDER SECTION

}

entry section(acquire lock)

exit section(release lock)

Page 17: Chapter 6: Synchronization. 6.2 Silberschatz, Galvin and Gagne ©2005 Operating System Principles Module 6: Synchronization 6.1 Background 6.2 The Critical-Section.

6.17 Silberschatz, Galvin and Gagne ©2005Operating System Principles

To prove Peterson’s solution is correct: Mutual exclusion is preserved

The progress requirement is satisfied

The bounded-waiting requirement is met

Page 18: Chapter 6: Synchronization. 6.2 Silberschatz, Galvin and Gagne ©2005 Operating System Principles Module 6: Synchronization 6.1 Background 6.2 The Critical-Section.

6.18 Silberschatz, Galvin and Gagne ©2005Operating System Principles

6.4 Synchronization Hardware6.4 Synchronization Hardware

Many systems provide hardware support for critical section code

Uniprocessors – could disable interrupts Currently running code would execute without preemption Generally too inefficient on multiprocessor systems

Operating systems using this not broadly scalable

Modern machines provide special atomic hardware instructions

Atomic = non-interruptable

Either test memory word and set value Or swap contents of two memory words

Page 19: Chapter 6: Synchronization. 6.2 Silberschatz, Galvin and Gagne ©2005 Operating System Principles Module 6: Synchronization 6.1 Background 6.2 The Critical-Section.

6.19 Silberschatz, Galvin and Gagne ©2005Operating System Principles

TestAndndSet Instruction TestAndndSet Instruction

Definition:

boolean TestAndSet (boolean *target)

{

boolean rv = *target;

*target = TRUE;

return rv:

}

Shared boolean variable lock initialized to false.

Solution using TestandSet:

while (true) {

while ( TestAndSet (&lock ))

; // do nothing

// critical section

lock = FALSE;

// remainder section

}

Page 20: Chapter 6: Synchronization. 6.2 Silberschatz, Galvin and Gagne ©2005 Operating System Principles Module 6: Synchronization 6.1 Background 6.2 The Critical-Section.

6.20 Silberschatz, Galvin and Gagne ©2005Operating System Principles

Swap InstructionSwap Instruction

Definition:

void Swap (boolean *a, boolean *b)

{

boolean temp = *a;

*a = *b;

*b = temp:

}

Shared boolean variable lock initialized to FALSE; Each process has a local boolean variable key.

Solution using Swap:

while (true) {

key = TRUE;

while ( key == TRUE)

Swap (&lock, &key );

// critical section

lock = FALSE;

// remainder section

}

Does not satisfy bounded-waiting

Page 21: Chapter 6: Synchronization. 6.2 Silberschatz, Galvin and Gagne ©2005 Operating System Principles Module 6: Synchronization 6.1 Background 6.2 The Critical-Section.

6.21 Silberschatz, Galvin and Gagne ©2005Operating System Principles

Common data structure: boolean waiting[n] and boolean lock; Solution using TestandSet: while (true) {

waiting[i] = TRUE;

key = TRUE;

while ( waiting[i] && key)

key = TestAndSet(&lock);

waiting[i] = FALSE;

// critical section

j = (i+1) %n;

while ( ( j != i) && !waiting[j] )

j = (j + 1) %n;

if (j == i)

lock = FALSE;

else

waiting[j] = FALSE;

// remainder section

}

Bounded-waiting mutual exclusion with TestAndSet()