操作系统课件第6章-进程同步-教案提纲.docx

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第6章进程互斥与同步

多道程序系统中进程是并发执行的,这些进程之间存在着不同的相互制约关系,为了协调进程之间的相互制约关系,就需要实现进程的同步。

而互斥则是同步的一种特殊情况。

6.1进程互斥

1 •临界资源与临界区

(1)临界资源:把一次仅允许一个进程使用的资源称为临界资源。

许多物理设备都属于临界资源,如打印机,绘图机等。

述有许多共享变量,共享数据等也屈于临界资源。

(2)临界区:在每个进程中,访问临界资源的那段程序称为临界区。

2.互斥

在操作系统中,当一个进程进入临界区使用临界资源时,另一个进程必须等

待,当占用临界资源的进程退出临界区后,另一个进程才允许进入它的临界区

去访问此临界资源。

互斥:进程间的这种相互制约关系称为互斥。

为禁止两个进程同时进入临界区,可采用软件解决办法或者一个同步机构来协

调它们。

不论是软件还是同步机构都应遵循下述准则:

•当有若干个进程欲进入它的临界区时,应在有限时间内使进程进入临界区。

换言之,它们不应该相互阻塞而致使彼此都不能进入临界区;

•每次至多有一个进程处于临界区;

•进程在临界区内仅停留有限时间。

3.互斥的实现方法

(1)利用“锁”机制实现互斥

在同步机构屮,常用一个变量来代表临界资源的状态,并称它为锁。

通常用0表示资源可用,用1表示资源己被占用。

进程在使用临界资源之前,必须完成下列动作(即关锁操作):

(R考察锁位的值(是0还是1);

(b)如果原来的值为0,将锁值置成1 (表示占用资源);

(c)如果原来的值为1 (即资源己被占用),则返回(°)再考察。

当进程使用完资源后,应将锁值置成0,即称为开锁操作。

注:在测试锁的值和置锁的值为1这两步之间,锁值不得被其他进程所改变, 这是应该绝对保证的。

系统可提供在一个锁w 上的两个原语操作lock (w)和unlock (w)o 其算法描述如下:

算法lock 输入:锁变量w 输出:无

test : if (w= = l) goto test ; else w= 1 ;

算法unlock

输入:锁变量w 输出:无 {

w 二 0;

利用上锁原语和开锁原语,可以解决并发进程对临界资源访问的互斥问题。 下面给岀并发进程pl 和p2互斥使用临界资源的描述:

进程pl

进程p2

lock (w) 临界区 uniock(w) (2)利用P 、V 操作实现互斥

信号量的概念

♦信号量是一个确定的二元组(s, q);

♦其中S 是一个具有非负初值的整形变量,q 是一个初始状态为空的队 列; ♦整形变量s 表示系统中某类资源的数目:

•当其值大于0时,表示系统中当前可用资源的数目;

•当其值小于0时,其绝对值表示系统中因请求该类资源而被阻塞 的进程

数目。

♦除信号量的初值外,信号量的值仅能由P 操作和V 操作改变,操作 系统利用它

的状态对进程和资源进行管理。

P 、V 操作(有的书上叫Wait 操作与Signal 操作)

P 、V 操作为两条原语,信号量的值仅能由这两条原语来改变。 P 、V 操作成对出现。

lock(w) 临

界区

uniock(w)

p 、V 操作的定义:

P 操作:P 操作记为p (S),其中S 为一信号量,它执行时,主要完成以 下动作:

■ s=s -i ;

■若S20,则进程继续执行;

■否则若S 〈0,则进程被阻塞,并将该进程插入到信号量S 的等待

队列中。

说明:实际上,P 操作可以理解为分配资源的计数器;

或是使进程处于等待状态的控制指令。

V 操作:V 操作记为V (S),其中S 为一信号量,它执行时,主耍完成以 下动作:

■ S = S+1;

■ 若S>0,则进程继续执行;

■若SWO,则从信号量S 的等待队列屮移出第一个进程, 使其变为

就绪状态,然后返回原进程继续执行。

说明:实际上,V 操作可以理解为归还资源的计数器;

或是唤醒进程使其处于就绪状态的控制指令。

利用信号量及其P 、V 操作能方便地实现进程互斥。

设S 为一互斥信号量,其初值=1,表示某临界资源未被占用。利用信 号量实现并发进程Pl 、P2互斥访问临界区的描述如下:

进程p2

P(S) 临界区 V(S)

例:假如系统中有2台打印机可用,现有4个进程Pl, P2, P3, P4都在 不同时间里以不同数量申请该设备。下表列出使用P 、V 操作使这4 个进程互斥工作的

过程。

S 初值=2,表示共有2台打印机可用。

Pl 、P2、P3、P4为并发进程,本例假设第1个被调度的为P2。

进程pl P(S) 临

界区

V(S)

并发进程Pi工作序列0数字表示运行顺序当前处于

运行态进

所执行的

操作(P/V)

信号量s

的值 (初

值=2)

被唤醒

的进程

信号量s的

等待队列

并发执

行顺序

P1P2 P3 P4

■■•

•P2P1空(1)

(2) P(S)■(1)

P(S)

P(S)

(5)

P(S)

Pl P0空(2)

P3P-1P3(3)

■(6)

(4)

(7)

■P2P-2P3—P2(4)

V⑸■P(S)

V(S)

V(S)

P4P-3P3-*P2-*P4(5)

■■

(8)

P(S)

■Pl V-2P3P2—P4(6) ⑼

V(s)

P3V-1P2P4(7)

•P3p-2P4—P3(8) QD

V(S)

V(S)

P2V-1P4P3(9)

P4V0P3空(10) ■

■P2V1空(11)

P3V2空(12)

6.2进程同步

1.同步概念

进程同步是指多个相关进程在执行次序上的协调,这些进程相互合作,在一些关键点上可能需要相互等待,或互通消息。

例如:计算进程Calculate与打印进程Print公用一个缓冲区B;当B空

时,Calculate将计算结果不断送入B,直到B满,Calculate 等待B空;

当B满时,Print从B中取数据并打印输出,直到B空,Print等待B满;

如此循环,不断计算,不断打印。

使用P、V操作实现这一过程的同步: int Empty=l; AEmpty=l表示缓冲区

空,需要被计算进程填满*/ int Full = O; /*Full二1表示缓冲区满,需

要被打卬进程取空*/

/*初始化置Empth二1而Full二0就是要先计算再打印*/ main () { cobegin

calculate (); print ();

coe nd

}

calculatcO

{ while . T. do /*无限循环*/

{ P (Empty);

计算,将结果送入buffer,直到buffer满;V(Full);

相关文档
最新文档