目录
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操作的对比。