CH3讲义讲解.docx

上传人:b****3 文档编号:2945142 上传时间:2022-11-16 格式:DOCX 页数:33 大小:109.06KB
下载 相关 举报
CH3讲义讲解.docx_第1页
第1页 / 共33页
CH3讲义讲解.docx_第2页
第2页 / 共33页
CH3讲义讲解.docx_第3页
第3页 / 共33页
CH3讲义讲解.docx_第4页
第4页 / 共33页
CH3讲义讲解.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

CH3讲义讲解.docx

《CH3讲义讲解.docx》由会员分享,可在线阅读,更多相关《CH3讲义讲解.docx(33页珍藏版)》请在冰豆网上搜索。

CH3讲义讲解.docx

CH3讲义讲解

本章知识点:

1、进程的顺序性和并发性

2、分析与时间有关的错误。

(★)

3、进程同步与互斥的概念。

4、临界区及其调度。

(★)

5、记录型信号量与PV操作。

(★★★)

6、条件变量和管程。

(★★)

7、进程通信种类

8、消息传递的两种方式及其原语。

(★)

本章思考题:

1.叙述顺序程序设计的特点以及采用顺序程序设计的优缺点。

2.程序并发执行为什么会失去封闭性和结果可再现性?

3.叙述并发程序设计的特点以及采用并发程序设计的优缺点。

4.解释并发进程的无关性和交往性。

5.并发进程的执行可能产生与时间有关的错误,试各举一例来说明与时间有关错误的两种表现形式。

6.解释进程的竞争关系和协作关系。

7.试说明进程的互斥和同步两个概念之间的区别。

8.什么是临界区和临界资源?

对临界区管理的基本原则是什么?

9.哪些硬件设施可以实现临界区管理?

10.什么是信号量?

如何对它进行分类。

11.为什么PV操作均为不可分割的原语操作?

12.从信号量和PV操作的定义,可以获得哪些推论?

13.叙述AND型信号量机制的特点

14.叙述一般信量机制的特点

15.有三个并发进程:

R负责从输入设备读入信息,M负责对信号加工处理;P负责打印输出。

今提供;

1)一个缓冲区,可放置K个信息;

2)二个缓冲区,每个可放置K个信息;

3)试用PV操作写出三个进程正确工作的流程

16.没有n个进程共享一个互斥段,如果:

1)每次只允许一个进程进入互斥段;

2)每次最多允许m个进程(m≤n)同时进入互斥段。

试问:

所采用的互斥信号量初值是否相同?

信号量值的变化范围如何?

17.三个进程并发活动,其算法描述如下,试分析是否有错,如有则指出原因并改正。

Begin

S:

=-1;

Cobegin

P1:

Begin

……

V(S);

End

P2:

Begin

……

V(S)

End;

P3:

Begin

P(S)

……

End

Cobegin

End

18.何谓管程?

它有哪些属性?

管程中的过程在执行中能被中断吗?

为什么?

19.试比较Hanson和Hoare两种管程实现方法。

20.已经有PV操作可用作同步工具,为什么还要有消息传递机制。

21.叙述信件,信箱和间接通信原语。

22.简述消息缓冲通信机制的实现思想。

23.什么是管道(pipeline)?

如何通过管道机制实现进程间通信?

24.有一阅览室,读者进入时必须先在一张登记表上登记,该表为每一座位列出一个表目,包括座号、姓名读者离开时要批销登记信息;假如阅览室共有100个座位。

试用:

1)信号量和P.V标作;2)管程;来实现用户进程的同步算法

25.在一个盒子里,混装了数量相等的黑白围棋子。

现在用自动分拣系统把黑子、白子分开,设分拣系统有二个进程P1和P2,其中P1拣白子;P2拣黑子。

规定每个进程每次拣一子;当一个进程在拣时,不允许另一个进程去拣;当一个进程拣了一子时,必须让另一个进程去拣。

试写出两进程P1和P2能并发正确执行的程序。

26.管程的同步机制使用条件变量和Wait及Signal,尝试为管程设计一种仅仅使用一个操作的同步机制。

27.一个快餐厅有4种职员:

(1)领班:

接受顾客点菜;

(2)厨师:

准备顾客的饭菜;(3)打包工:

将做好的饭菜打包;(4)出纳员-收款并提交食品。

每个职员可被看作一个进程,试写出能让四类职员正确并发运行的程序。

28.在信号量S上作P.V操作时,S的值发生变化,当S>0、S=0、S〈0时,它们的物理意义是什么?

29.二个并发进程并发执行,其中,A、B、C、D、E是原语,试给出可能的并发执行路径。

ProcessPProcessQ

beginbegin

A;C;

B;D;

C;end;

end;

是否在任何情况下,‘忙式等待’都比‘阻塞等待’方法的效率低?

试解释之。

30.证明信号量与管程的功能是等价的:

(1)用信号量实现管程;

(2)用管程实现信号量。

31.面包房(BakeryAlgorithm)算法,解决互斥问题的另一个算法:

Varchoosing:

array[0…n-1]ofboolean;

number:

array[0…n-1]ofinteger;

Repeat

Choosing[i]:

=True;

Number[i]:

=1+max(number[0],…nuber[n-1]);

Choosing[i]:

=false;

forj:

=0ton-1do

begin

whilechoosing[j]do{nothing};

whilenumber[j]≠0∧(number[j],j)<(number[i],i)

do{nothing};

end;

{criticalsection};

number[i]:

=0;

{remaider};

forever

其中,choosing和Number的初值分别为false和0,每个数值中的第三个元素只能由进程I进行读和写,而其它进程只能读。

(a,b)<(c,d)的定义为:

(a<c)or(a=c∧b<d)试回答:

(1)用自然语言描述该算法

(2)该算法能否实现互斥,为什么?

CH3进程同步与通信

3.1进程的同步与互斥

3.1.1临界区与临界资源

临界区的概念是由Dijkstra在1965年首先提出的。

一次仅允许一个进程使用的资源称为临界资源。

许多物理设备都属于临界资源,如打印机,绘图机;另外,还有许多变量和数据可以被多个进程共享,也属于临界资源。

访问临界资源的代码成为临界区。

为了保证正确使用资源,可以把对临界资源的访问分为四部分:

进入区、临界区、退出区和剩余区。

对若干个进程共享一个变量的相关的临界区,有三个调度原则:

● 一次至多一个进程能够在它的临界区内;

●不能让一个进程无限地留在它的临界区内;

●不能强迫一个进程无限地等待进入它的临界区。

特别,进入临界区的任一进程不能妨碍正等待进入的其它进程的进展;

我们可把临界区的调度原则总结成四句话:

空闲让进、忙则等待、有限等待、让权等待。

临界区是允许嵌套的,例如

regionxdobegin…regionydo…end

但是粗心的嵌套可能导致进程无限地留在它的临界区内,例如,如果又有一个进程执行:

regionydobegin…regionxdo…end

这样,当两个进程在大约差不多的时间进入了外层的临界区后,将发现它们每个都被排斥在内层临界区之外,造成无限地等待进入临界区。

3.1.2同步与互斥的概念

在多道程序设计系统中,同一时刻可能有许多进程,这些进程之间存在两种基本关系:

竞争关系和协作关系。

第一种是竞争关系,系统中的多个进程之间彼此无关,它们并不知道其他进程的存在。

例如,批处理系统中建立的多个用户进程,分时系统中建立的多个终端进程。

由于这些进程共用了一套计算机系统资源,因而,必然要出现多个进程竞争资源的问题。

当多个进程竞争共享硬设备、变量、表格、链表、文件等资源时,可能导致处理出错。

由于相互竞争资源时进程间并不交换信息,但是一个进程的执行可能影响到同其竞争的进程,如果两个进程要访问同一资源,那么,一个进程通过操作系统分配得到该资源,另一个将不得不等待。

在极端的情况下,被阻塞进程永远得不到访问权,从而不能成功地终止。

所以,资源竞争出现了两个控制问题:

一个是死锁(Deadlock)问题,一组进程如果都获得了部分资源,还想要得到其他进程所占有的资源,最终所有的进程将陷入死锁。

另一个是饥饿(Starvation)问题,例如,三个进程p1、p2、p3均要周期性访问资源R。

若p1占有资源,p2和p3等待资源。

当p1离开临界区时,p3获得了资源R。

如果p3退出临界区之前,p1又申请并得到资源R,如此重复造成p2老是得不到资源R。

尽管这里没有产生死锁,但出现了饥饿。

对于临界资源,操作系统需要保证诸进程能互斥地访问这些资源,既要解决饥饿问题,又要解决死锁问题。

进程的互斥(MutualExclusion)是解决进程间竞争关系的手段。

指若干个进程要使用同一共享资源时,任何时刻最多允许一个进程去使用,其它要使用该资源的进程必须等待,直到占有资源的进程释放该资源。

临界区管理可以解决进程互斥问题,本章第二节将详细介绍临界区的解决方案。

第二种是协作关系,某些进程为完成同一任务需要分工协作。

我们在前面给出了一个例子,input、process、和output三个进程分工协作完成读入数据、加工处理和打印输出任务,这是一种典型的协作关系,各自都知道对方的存在。

这时操作系统要确保诸进程在执行次序上协调一致,没有输入完一块数据之前不能加工处理,没有加工处理完一块数据之前不能打印输出等等,每个进程都要接收到它进程完成一次处理的消息后,才能进行下一步工作。

进程间的协作可以是双方不知道对方名字的间接协作,例如通过共享访问一个缓冲区进行松散式协作;也可以是双方知道对方名字,直接通过通信进行紧密协作。

进程的同步(Synchronization)是解决进程间协作关系的手段。

指一个进程的执行依赖于另一个进程的消息,当一个进程没有得到来自于另一个进程的消息时则等待,直到消息到达才被唤醒。

不难看出,进程互斥关系是一种特殊的进程同步关系,即逐次使用互斥共享资源。

3.2互斥的实现方法

3.2.1互斥算法

3.2.1.1Dekker算法

荷兰数学家T.Dekker算法能保证进程互斥地进入临界区,这是最早提出的一个不需轮换的软件互斥方法,此方法用一个指示器turn来指示应该哪一个进程进入临界区。

若turn=0则进程P0可以进入临界区;若turn=1则进程P1可以进入临界区。

Dekker算法的程序如下:

 

varinside:

array[0..1]ofBoolean;

Turn:

integer;

turn:

=0or1;

inside[0]:

=false;

inside[1]:

=false;

cobegin

processP0

begin

inside[0]:

=true;

whileinside[1]doifturn=1then

begin

inside[0]:

=false;

whileturn=1dobeginend;

inside[0]:

=true;

end

临界区;

turn=1;

inside[0]:

=false;

end;

processP1

begin

inside[1]:

=true;

whileinside[0]doifturn=0then

begin

inside[1]:

=false;

whileturn=0dobeginend;

inside[1]:

=true;

end

临界区;

turn=0;

inside[1]:

=false;

end;

coend

这种方法显然能保证互斥进入临界区的要求,这是因为仅当tum=i(i=0,1)时进程Pi(i=0,1)才能进入其临界区。

因此,一次只有一个进程能进入临界区,且在一个进程退出临界区之前,turn的值是不会改变的,保证不会有另一个进程进入相关临界区。

同时,因为turn的值不是0就是1,故不可能同时出现两个进程均在while语句中等待而进不了临界区,但是不能解决“空闲让进”问题。

3.2.1.2 Peterson算法

在1981年,G

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1