silberschatz and galvin 1999 6.1 operating system concepts chapter 6: process synchronization 6.1...

61
Operating System Concepts Silberschatz and Galvin1999 6.1 Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临临临6.3 Synchronization Hardware 6.4 Semaphores 临临临6.5 Classical Problems of Synchronization 临临临临临临6.6 Critical Regions 临临临6.7 Monitors 临临6.8 Synchronization in Solaris 2 6.9 Atomic Transactions 临临临临临临

Upload: clifford-sims

Post on 18-Jan-2016

230 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.1

Chapter 6: Process Synchronization

• 6.1 Background

• 6.2 The Critical-Section Problem( 临界区)

• 6.3 Synchronization Hardware

• 6.4 Semaphores (信号量)

• 6.5 Classical Problems of Synchronization (经典同步问题)

• 6.6 Critical Regions (临界区)

• 6.7 Monitors (管程)

• 6.8 Synchronization in Solaris 2

• 6.9 Atomic Transactions (原子事务处理)

Page 2: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.2

6.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.

• Shared-memory solution to bounded-butter problem (Chapter 4) allows at most n – 1 items in buffer at the same time. A solution, where all N buffers are used is not simple.

– Suppose that we modify the producer-consumer code by adding a variable counter, initialized to 0 and incremented each time a new item is added to the buffer

Page 3: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

********************

.

.

in

out

buffer

producer

Repeat:

Produce a item

item-->(in)?

Repeat:..

(out)-->x?

consume x

consumer

Paradigm for Producer-Consumer

Page 4: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.4

Bounded-Buffer

• Shared data type item = … ;

var buffer array [0..n-1] of item;

in, out: 0..n-1;

• Producer process

repeat

produce an item in nextp

while ( in+1 mod n = out ) do no-op;

buffer [in] := nextp;

in := in + 1 mod n;

;

until false;

两进程都要访问in, out?

Page 5: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.5

Bounded-Buffer

• Shared data type item = … ;

var buffer array [0..n-1] of item;

in, out: 0..n-1;

counter: 0..n;

in, out, counter := 0;

• Producer process

repeat

produce an item in nextp

while counter = n do no-op;

buffer [in] := nextp;

in := in + 1 mod n;

counter := counter +1;

until false;

假设有 N 个生产者呢?

Page 6: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.6

Bounded-Buffer (Cont.)

• Consumer process

repeat

while counter = 0 do no-op;

nextc := buffer [out];

out := out + 1 mod n;

counter := counter – 1;

consume the item in nextc

until false;

• The statements:– counter := counter + 1;– counter := counter - 1;

must be executed atomically.

P: C:X=counter; y=counterx:=x+1; y=y+1;counter=x; counter=y;

Page 7: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.7

y=balance;if(y>=100)y=y-100;

balance=y;

x=balance;if(x>=100)x=x-100;

balance=x;

Balance=100ATM1: ATM2:

Balance=??

银行自动取款例

Page 8: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Silberschatz and Galvin1999 6.8Operating System Concepts

并发进程之间的基本关系:按相互感知程度分类

相互感知的程度 交互关系 一个进程对其他进程的影响

潜在的控制问题

相互不感知 竞争(competition)

一个进程的操作对其他进程的结果无影响

间接感知(双方都与第三方交互,如共享资源)

通过共享进行协作

一个进程的结果依赖于共享资源的访问顺序

互斥,死锁(可释放的资源),饥饿,数据一致性

直接感知(双方直接交互,如通信)

通过通信进行协作

一个进程的结果依赖于从其他进程获得的信息

同步,死锁,饥饿

同步:逻辑上合作的进程,执行速度相互制约;互斥:多个进程不能同时使用同一个资源;死锁:多个进程互不相让,彼此都永远得不到足够的资源;饥饿:一个进程长期得不到资源(其它进程轮流占用资源)饿死:一个进程永远得不到资源。

Page 9: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.9

6.2 The Critical-Section( 临界区 ) Problem

• n processes all competing to use some shared data

• 定义 :Each process has a code segment, called critical section, in which the shared data is accessed.

• Problem – ensure that when one process is executing in its critical section, no other process is allowed to execute in its critical section.

• Structure of process Pi : .....

entry section

critical section

exit section

reminder section

Page 10: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.10

…...Request printer

print..Print..

Request plotterprintplotprintplot

free plotterprint

free printer….

…...Request plotter

plot..Plot..

Request printerprintplotprintplot

free printerplot

free plotter

….

P1 P2

CS 指那一段?

P1, P2 若不制约,会出

现什么问题?

临界区例

Page 11: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.11

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 there exist some processes that wish to enter their critical section, then the selection of the processes that will enter the critical section next 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.

Page 12: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.12

Initial Attempts to Solve Problem

• Only 2 processes, P0 and P1

• General structure of process Pi (other process Pj)

repeat

entry section

critical section

exit section

reminder section

until false;

• Processes may share some common variables to synchronize their actions.

Page 13: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.13

Algorithm 1

• Shared variables: – var turn: (0..1);

initially turn = 0

– turn = i Pi can enter its critical section

• Process Pi : ………….

while turn i do no-op;

critical section

turn := j;

reminder section

三准则都满足吗 ?

Satisfies mutual exclusion, but not progress

Page 14: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.14

Algorithm 2

• Shared variables– var flag: array [0..1] of boolean;

initially flag [0] = flag [1] = false.

– flag [ i ] = true Pi ready to enter its critical section

• Process Pi: ……….

flag[ i ] := true;while flag[ j ] do no-op;

critical section

flag [ i ] := false;

remainder sectionSatisfies mutual exclusion, but not progress quirement.

Page 15: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.15

Algorithm 3

• Combined shared variables of algorithms 1 and 2.

• Process Pi: ……….

flag [i] := true;turn := j;while (flag [j] and turn = j) do no-op;

critical section

flag [i] := false;

remainder section

多个进程行吗 ?

Meets all three requirements; solves the critical-section

problem for two processes.

Page 16: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.16

Bakery Algorithm

• Before entering its critical section, process receives a number. Holder of the smallest number enters the critical section.

• If processes Pi and Pj receive the same number, if i < j, then Pi is served first; else Pj is served first.

• The numbering scheme always generates numbers in increasing order of enumeration; i.e., 1,2,3,3,3,3,4,5...

Critical section for n processes

Page 17: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.17

Bakery Algorithm (Cont.)

• Notation < lexicographical order (ticket #, process id #)

– (a,b) <( c,d) if a < c or if a = c and b < d

– max (a0,…, an-1) is a number, k, such that k ai for i = 0, …, n – 1

• Shared data

var choosing: array [0..n – 1] of boolean;

number: array [0..n – 1] of integer,

Data structures are initialized to false and 0 respectively

Page 18: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.18

Bakery Algorithm (Cont.)

repeatchoosing[ i] := true;number[ i] := max(number[0], number[1], …, number [n – 1])+1;choosing[ i] := false;for j := 0 to n – 1

do begin while choosing[ j] do no-op; while number[ j] 0

and (number[ j ], j ) < (number[ i], i) do no-op; end;critical section

number[ i] := 0; remainder section

until false;

Pj 正在获取 number

Page 19: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.19

6.3 Synchronization Hardware

• Test and modify the content of a word atomically.

function Test-and-Set (var target: boolean): boolean;

begin

Test-and-Set := target;target := true;

end;

尤其是适于多处理机系统

Page 20: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.20

Mutual Exclusion with Test-and-Set

• Shared data: var lock: boolean (initially false)

• Process Pi

repeat

while Test-and-Set (lock) do no-op;

critical section

lock := false;

remainder section

until false;

Page 21: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.21

6.4 Semaphore

• 引入: Synchronization tool that does not require busy waiting.

• 定义 :

–Semaphore S – integer variable

–can only be accessed via two indivisible (atomic) operations

wait (S): while S 0 do no-op;S := S – 1;

signal (S): S := S + 1;

Page 22: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.22

Example: Critical Section of n Processes

• Shared variables– var mutex : semaphore– initially mutex = 1

• Process Pi: repeat

wait(mutex);

critical section

signal(mutex);

remainder section

until false;

Page 23: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.23

Semaphore Implementation

• Define a semaphore as a record

type semaphore = record

value: integer

L: list of process;

end;

• Assume two simple operations:– block suspends the process that invokes it.– wakeup(P) resumes the execution of a blocked

process P.

Page 24: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.24

Implementation (Cont.)

• Semaphore operations now defined as

wait(S): S.value := S.value – 1;

P(S) if (S.value < 0) then

begin add this process to S.L;block;

end;

signal(S): S.value := S.value + 1;

V(S) if (S.value 0) then

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

end;

Page 25: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Silberschatz and Galvin1999 6.25Operating System Concepts

利用信号量实现互斥例

• 为临界资源设置一个互斥信号量 mutex(MUTual Exclusion) ,其初值为1 ;在每个进程中将临界区代码置于 P(mutex)和 V(mutex) 原语之间

• 必须成对使用 P和 V 原语:遗漏 P 原语则不能保证互斥访问,遗漏 V 原语则不能在使用临界资源之后将其释放(给其他等待的进程); P、 V原语不能次序错误、重复或遗漏

……P(mutex)

CS1V(mutex)

……...

p1

……P(mutex)

CS2V(mutex)

……...

p2

…...

……P(mutex)

CSnV(mutex)

……...

pn

Mutex 初值 = ?

Page 26: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.26

Semaphore as General Synchronization Tool

• Execute B in Pj only after A executed in Pi

• Use semaphore flag initialized to 0

• Code:

Pi Pj

A wait(flag)

signal(flag) B

Page 27: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.27

请写上你的名字并回答下列问题

1 。 你喜欢 OS 用英文教材还是中文教材?

2 。你觉得使用这种多媒体教学是否效果好?

3 。你对老师讲课有什么意见和建议?

4 。你是否喜欢学习 OS?( 抛开考研因素)

5 。你觉得学习 OS 有用吗?

Page 28: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.28

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.

Page 29: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.29

…...Request printer

print..Print..

Request plotterprintplotprintplot

free plotterprint

free printer….

…...Request plotter

plot..Plot..

Request printerprintplotprintplot

free printerplot

free plotter

….

P1 P2

临界区例

P=printer=1

Q=plotter=1--

>P(P)

->P(Q)

-->V(Q)

-->V(P)

P(Q)<-

P(P)<-

V(Q)<-

V(P)<-

Page 30: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.30

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 31: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.31

6.6 Classical Problems of Synchronization

•Bounded-Buffer Problem

•Readers and Writers Problem

•Dining-Philosophers Problem

Page 32: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.32

1.Bounded-Buffer Problem

• Shared datatype item = …var buffer = …[0 …n-1];

full, empty, mutex: semaphore;nextp, nextc: item;full :=0; empty := n; mutex :=1;

Page 33: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.33

Bounded-Buffer Problem (Cont.)

• Producer processrepeat

…produce an item in nextp;

…wait(empty);wait(mutex);

….

put nextp into buffer; ….

signal(mutex);signal(full);

until false;

Page 34: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.34

Bounded-Buffer Problem (Cont.)

• Consumer processrepeat

wait(full)wait(mutex); …

remove an item from buffer to nextc …signal(mutex);signal(empty); …consume the item in nextc …

until false;

Page 35: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.35

Bounded-Buffer Problem (Cont.)

• Producer and consumer 几种特殊情况:

1. Many producer and consumer ,producer use pointer in and consumer use pointer out. 应许一个生产者和一个消费者同时进入缓冲区,但不能两个以上的生产者(消费者)同时进入缓冲区。

2. When buffer is Infinitely

Page 36: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.36

Bounded-Buffer Problem (Cont.)

• Producer i (i=1,2,…k): consumer j (j=1,2,…m):repeat repeat ….. …..

produce an item; wait(full); wait(empty); wait(mutex); wait(mutex); item=(out); (in)=item; out=(out+1)mod n;

in=(in+1)mod n; signal(mutex); signal(mutex); signal(empty); signal(full); consume the item;

until false; until false;

有什么问题?

wait(mutex1);

signal(mutex1);

wait(mutex2);

signal(mutex2);

Page 37: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.37

Bounded-Buffer Problem (Cont.)

• Producer i (i=1,2,…k): consumer process:repeat repeat ….. …..

produce an item; wait(full); wait(empty); wait(mutex); wait(mutex); item=(out); (in)=item; out=(out+1)mod n;

in=(in+1)mod n; signal(mutex); signal(mutex); signal(empty); signal(full); consume the item;

until false; until false;

当缓冲区无限大时

Page 38: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.38

2.Readers-Writers Problem

• 问题的提出: 1. 写着不能同时写 ; 2. 读者可以同时读 ; 3. 读者读时写者不能写 , 写者写时读者不能读 .

Page 39: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.39

Readers-Writers Problem(cont.)

• Shared datavar mutex, wrt: semaphore (=1);

readcount : integer (=0);

• Writer processwait(wrt);

…writing is performed

…signal(wrt);

Page 40: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.40

Readers-Writers Problem (Cont.)

• Reader processwait(mutex);readcount := readcount +1;if readcount = 1 then wait(wrt);signal(mutex); …reading is performed …wait(mutex);readcount := readcount – 1;if readcount = 0 then signal(wrt);

signal(mutex):

Page 41: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.41

3. Dining-Philosophers Problem

• Shared data

var chopstick: array [0..4] of semaphore; (=1 initially)

Page 42: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.42

Dining-Philosophers Problem (Cont.)

• Philosopher i:repeat

wait(chopstick[i])wait(chopstick[i+1 mod 5]) …eat …signal(chopstick[i]);signal(chopstick[i+1 mod 5]); …think …until false;

Page 43: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.43

作业:用信号量解决如下几道问题

• 1. 202页 6.7 题 ,“The sleeping-Barber probmlem”.

• 2. 203页 6.8 题 ,“The Cigarette-Smokers Problem”.

• 3. 在一条宽阔的河中,有一条独木桥,只应许人们从一个方向过河,否则将会发生死锁。试写出不会产生死锁的河两岸人们的过河算法。

• 4. 在一个容量为 100的阅览室中 , 有一个入口 , 读者在进入阅览室时 , 要在入口处的一张登记表中注册 , 出阅览室时要在同一张表中注销 .试写出读者在阅览室中阅读的全过程 .

Page 44: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.44

6.6 Critical Regions

• High-level synchronization construct

• A shared variable v of type T, is declared as:

var v: shared T

• Variable v accessed only inside statement

region v when B do S

where B is a Boolean expression.While statement S is being executed, no other process can access variable v.

Page 45: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.45

Critical Regions (Cont.)

• Regions referring to the same shared variable exclude each other in time.

• When a process tries to execute the region statement, the Boolean expression B is evaluated. If B is true, statement S is executed. If it is false, the process is delayed until B becomes true and no other process is in the region associated with v.

Page 46: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.46

Example – Bounded Buffer

• Shared variables:

var buffer: shared record

pool: array [0..n–1] of item;count,in,out: integer

end;

• Producer process inserts nextp into the shared buffer

region buffer when count < ndo begin

pool[in] := nextp;in:= in+1 mod n;count := count + 1;

end;

Page 47: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.47

• High-level synchronization construct that allows the safe sharing of an abstract data type among concurrent processes.

• 引入:信号量分布在各进程中,程序阅读难,有错误操作和遗漏操作,修改难,但效率高。

• 定义:将共享资源和与共享资源有关的操作集中在一个模块中,可单独编译。即管程对共享资源进行了封装,将信号量及其操作原语封装在一个对象内部。进程只能互斥进入管程,在一个管程中,不能同时有两个活动的进程。

• 。特点:安全,易读,易修改。效率低。

6.7 Monitors6.7 Monitors

Page 48: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.48

type monitor-name = monitorvariable declarationsprocedure entry P1 :(…);

begin … end;procedure entry P2(…);

begin … end;

procedure entry Pn (…);begin…end;

begininitialization code

end

Monitors( cont.)Monitors( cont.)

Page 49: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.49

• To allow a process to wait within the monitor, a condition variable must be declared, as

var x, y: condition

• Condition variable can only be used with the operations wait and signal.

– The operation

x.wait;means that the process invoking this opeation is suspended until another process invokes

x.signal;– The x.signal operation resumes exactly one

suspended process. If no process is suspended, then the signal operation has no effect.

Monitors (Cont.)Monitors (Cont.)

Page 50: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.50

Schematic view of a monitorSchematic view of a monitor

Page 51: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.51

Monitor with condition variablesMonitor with condition variables

Page 52: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.52

type dining-philosophers = monitorvar state : array [0..4] of :(thinking, hungry, eating);var self : array [0..4] of condition;procedure entry pickup (i: 0..4);

beginstate[ i ] := hungry,test (i);if state[i] eating then self[i], wait,

end;

Dining Philosophers Example Dining Philosophers Example

Page 53: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.53

type dining-philosophers = monitorvar state : array [0..4] of :(thinking, hungry, eating);var self : array [0..4] of condition; procedure entry putdown (i: 0..4); begin

state[i] := thinking;test (i+4 mod 5);test (i+1 mod 5);

end;

Dining Philosophers Example Dining Philosophers Example

Page 54: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.54

procedure test(k: 0..4);begin

if state[k+4 mod 5] eatingand state[k] = hungryand state[k+1 mod 5] ] eatingthen begin

state[k] := eating;self[k].signal;

end;end;

beginfor i := 0 to 4

do state[i] := thinking;end.

Dining Philosophers (Cont.)Dining Philosophers (Cont.)

Page 55: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.55

Dining Philosophers (Cont.)

• dp= New dining-philosophers;

• 对第 i个哲学家,有:

………

thinking ;

………

dp.pickup(i);

eating;

dp.putdown(i);

Page 56: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.56

• Variables var mutex: semaphore (init = 1)

next: semaphore (init = 0)next-count: integer (init = 0)

• Each external procedure F will be replaced bywait(mutex); … body of F; …if next-count > 0

then signal(next)else signal(mutex);

• Mutual exclusion within a monitor is ensured.

Monitor Implementation Using SemaphoresMonitor Implementation Using Semaphores

Page 57: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.57

• For each condition variable x, we have:var x-sem: semaphore (init = 0)

x-count: integer (init = 0)

• The operation x.wait can be implemented as:

x-count := x-count + 1;if next-count >0

then signal(next)else signal(mutex);

wait(x-sem);x-count := x-count – 1;

Monitor Implementation (Cont.)Monitor Implementation (Cont.)

Page 58: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.58

• The operation x.signal can be implemented as:if x-count > 0

then beginnext-count := next-count + 1;signal(x-sem);wait(next);next-count := next-count – 1;

end;

Monitor Implementation (Cont.)Monitor Implementation (Cont.)

Page 59: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.59

• Conditional-wait construct: x.wait(c);– c – integer expression evaluated when the wait opertion

is executed.– value of c (priority number) stored with the name of the

process that is suspended.– when x.signal is executed, process with smallest

associated priority number is resumed next.

• Check tow conditions to establish correctness of system: – User processes must always make their calls on the

monitor in a correct sequence.– Must ensure that an uncooperative process does not

ignore the mutual-exclusion gateway provided by the monitor, and try to access the shared resource directly, without using the access protocols.

Monitor Implementation (Cont.)Monitor Implementation (Cont.)

Page 60: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.60

• Implements a variety of locks to support multitasking, multithreading (including real-time threads), and multiprocessing.

• Uses adaptive mutexes for efficiency when protecting data from short code segments.

• Uses condition variables and readers-writers locks when longer sections of code need access to data.

Solaris 2 Operating SystemSolaris 2 Operating System

Page 61: Silberschatz and Galvin  1999 6.1 Operating System Concepts Chapter 6: Process Synchronization 6.1 Background 6.2 The Critical-Section Problem( 临界区)

Operating System Concepts Silberschatz and Galvin1999 6.61

Summary

•概念:临界区,信号量,原语, P操作, V操作,管程

• 临界区的三准则。

• 用信号量实现进程之间的互斥和同步。