操作系统:互斥、同步与通信

发布于:2024-12-18 ⋅ 阅读:(73) ⋅ 点赞:(0)

目录

1、并发进程

顺序程序及其特性

并行程序及其特性

并发程序执行的条件(Bernstein条件)

 与时间有关的错误

2、进程互斥

共享变量(shared variable)

临界区(critical region)

进程互斥

 进程互斥原则

Eisenberg/Mcguire算法(不考)

3、进程同步 

概念:

信号量与PV操作机制(重点):

​编辑 例子:借书系统(revisited)

例子:司机-售票员问题

例子:生成者消费者 

 例子:哲学家进食问题

管程机制(不考)


1、并发进程

顺序程序及其特性

        程序执行的指令是按顺序封闭执行的,不受其他程序影响。它具有连续性,封闭性,(结果)可再现性

并行程序及其特性

        程序执行的指令是并不是封闭的受其他程序指令的影响。它具有间断性、非封闭性、以及不可再现性。

并发程序执行的条件(Bernstein条件)

        两个程序的读集和写集相互不冲突,且二者写集也不相互冲突。

 与时间有关的错误

        终端1执行1时,判断有书执行,借书操作,此时终端2也判断有书,二者一起借,但借同一本书,导致终端一借到书,而终端二发生错误。 

        发生错误的原因:其一进程执行交叉(interleave),因其交叉次序不同而导致执行结果不同,其二涉及公共变量(x)。

        竞争条件:多个进程在访问变量时,因实际交叉次序不同而导致执行结果不同,这种现象称为竞争条件。 

2、进程互斥

共享变量(shared variable)

定义:多个进程均需访问的变量

符号表示:  shared <一组变量>

临界区(critical region)

定义:访问共享变量的程序段

符号表示:  region <一组变量> do <语句>

例如:

shared  B:array[0,..,n-1]of integer;
region B do              
 begin                        
   …… (访问B)     
 end;                      

进程互斥

定义:两个或两个以上的进程不能同时进入关于同一组共享变量的(相同或不同)的临时区,否则可能发生与时间有关的错误。

 进程互斥原则

三大原则:

互斥性原则:任意时刻只能有一个进程处于同一组共享变量的临界区中。

进展性原则:临界区空闲,应只允许其他需要访问临界区的进程进入。

有限等待性原则:请求进入临界区的进程,应在有限的等待时间内获得进入临界区的机会。

其次还应该满足以下调度原则:

        空闲让进,忙则等待,有限等待,离开让权。

进程互斥的软件实现:

 面包店算法:

        设置一个发号者,按0,1,2,…, 发号。想进入临界区的进程抓号,抓到号之后按由小到大的次序依次进入。

Eisenberg/Mcguire算法(不考)

3、进程同步 

概念:

 定义:一组进程,为协调其推进速度,在某些关键点处需要相互等待与相互唤醒,进程之间这种相互制约的关系称为进程同步。

信号量与PV操作机制(重点):

信号灯:用于传递信号,是P操作和V操作的共享变量。

P操作:等待事件的发生。

 V操作:唤醒被P操作阻塞的事件。

 例子:借书系统(revisited)

mutex的初值为1. 

例子:司机-售票员问题

S1的初值为0.

S2的初值为0.

例子:生成者消费者 

S1.value:=k; S2.value:=0; mutex.value:=1;

 例子:哲学家进食问题

        这里两个PV操作,第一组PV是尝试获取叉子,第二组PV是尝试放下叉子。

管程机制(不考)

以下是管程和PV操作的对比。