ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:38.96KB ,
资源ID:12702879      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12702879.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(同步互斥word文档良心出品.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

同步互斥word文档良心出品.docx

1、同步互斥word文档良心出品同步与互斥学习指导:互斥与同步是操作系统与并发程序设计的核心问题,为此操作系统必须提供用于实现同步的机制。从本质上来说,同步工具就是能用于进程(线程)等待或唤醒的机制,目前实现的同步机制各有特点。学习这一部分不仅需要确切地理解并牢固地记住各种同步机制的定义,更重要的是学会使用各种同步机制去解决实际同步问题。如何使用同步机制解决各种同步问题,需要通过典型例子分析和学习,并通过一定数量的练习提高解题技巧。习题解答:1. 何谓与时间有关的错误? 举例说明之。答:并发进程的执行实际上是进程活动的某种交叉,某些交叉次序可能得到错误结果。由于具体交叉的形成与进程的推进速度有关,

2、而速度是时间的函数,因而将这种错误称为与时间有关的错误。例如,两个并发进程的程序如下:int n=0;main( )创建进程A;创建进程B;A( )while(1) n+;B( )while(1)睡眠一段时间;printf(“%d”,n);n=0;假设进程A被部署在公园入口的终端上,用来记录一段时间内进入公园的人数,进程B被部署在公园的控制中心,用来输出一段时间内进入公园的总人数。进程A和进程B共享全局变量n,n表示记录下的人数。如果在进程B执行完打印语句后被进程A打断,进程A执行了若干次变量自增语句,之后进程B接着执行清0语句,那么进程A对n的累加丢失了,相当于进程B被打断的这段时间内进入公

3、园的人没有被记录下来。发生与时间有关的错误。2. 有人说,假设两个进程之间没有共享内存,则二者之间没有公共变量,这种说法准确吗? 说明原因。答:如果只从用户空间考虑,这种说法是正确的。但从操作系统的角度来说并不准确。两个没有公共内存的用户进程可能同时(宏观)进入操作系统,并访问操作系统空间中的公共变量。3. 何谓忙式等待? 是否还有其它方式的等待? 比较它们之间的联系和差别。答:不进入等待状态的等待称为忙式等待。另一种等待方式是阻塞式等待,进程得不到共享资源时将进入阻塞状态,让出CPU给其他进程使用。忙等待和阻塞式等待的相同之处在于进程都不具备继续向前推进的条件,不同之处在于处于忙等待的进程不

4、主动放弃CPU,尽管CPU可能被剥夺,因而是低效的;而处于阻塞状态的进程主动放弃CPU,因而是高效的。4. 下列进程互斥方法哪些存在忙式等待问题?(1) 软件: 面包店算法 (2) 硬件: TS指令 (3) 关中断指令答:(1)、(2)存在忙等待问题。5. 为何开关中断进程互斥方法仅在单CPU系统中是有效的?答:关中断方法不适用于多CPU系统,因为关中断只能保证CPU不由一个进程切换到另外一个进程,从而防止多个进程并发地进入公共临界区域。但即使关中断后,不同进程仍可以在不同CPU上并行执行关于同一组共享变量的临界区代码。6. 在多处理机系统中,软件互斥方法是否有效?为什么?答:依然有效。多处理

5、机并行与单处理并发之间的差别在于程序交叉的粒度,单处理机机环境中进程交叉发生在指令之间,多处理机环境中进程交叉发生在指令周期之间。由于纯软件互斥算法并不依赖特殊的硬件指令(如test_and_set),指令之间的交叉与指令周期之间的交叉结果相同。7. 试分析临界区域的大小与系统并发性之间的关系。答:关于同一组变量的临界区域是不能并发执行的代码,临界区越大,并发性越差,因而编写并发程序应尽量缩小临界区域范围。8. 设CR1是关于一组共享变量SV1的临界区域,CR2是关于另外一组共享变量SV2的临界区域,当进程P1进入CR1时,进程P2是否可以进入CR2? 为什么?答:可以。因为互斥是在变量级别上

6、的,多个进程同时进入关于不同变量的临界区不会引起与时间有关的错误。9. Lamport面包店互斥算法是否会出现饿死情况?不会,该算法是公平的。假定系统中共有n个进程,每个想要进入临界区域的进程(线程)在最坏的情况下需要等待其它n-1个进程进入并离开临界区域之后即可获得进入临界区域的机会,因而存在(忙式)等待的上界。10. 试用信号灯和PV操作实现临界区语句: region do 变量类型 答:semaphore s=1;P(s);V(s);11. 由V操作唤醒的进程是否一定能够直接进入运行状态? 举例说明之。答:否。一般来说,唤醒是将进程状态由等待状态变成就绪状态,而就绪进程何时获得处理机则是

7、由系统的处理机调度策略确定的。如果采用抢占式优先级调度算法,并且被唤醒的进程是当前系统中优先级最高的进程,那么该进程将被调度执行,其状态变成运行态。如果该进程不是系统中优先级最高的进程或系统采用其它调度算法,那么该进程不会被调度执行,其状态将维持在就绪态。12. 设S1和S2为两个信号灯变量,下列八组P、V操作哪些可以同时进行? 哪些不能同时进行? 为什么?(1) P(S1),P(S2) (2) P(S1),V(S2)(3) V(S1),P(S2) (4) V(S1),V(S2)(5) P(S1),P(S1) (6) P(S2),V(S2)(7) V(S1),P(S1) (8) V(S2),V

8、(S2)答:能同时进行的包括:(1)、(2)、(3)、(4)。这些操作涉及不同信号灯变量,属于关于不同组共享变量的临界区。不能同时进行的包括:(5)、(6)、(7)、(8)。这些操作涉及相同的信号灯变量,属于关于同一组共享变量的临界区。13. 对于生产者消费者问题,假设缓冲区是无界的,试用信号灯与PV操作给出解法。答:由于是无界缓冲区,所以生产者不会因得不到缓冲区而被阻塞,不需要对空缓冲区进行管理,可以去掉在有界缓冲区中用来管理空缓冲区的信号量及其PV操作。semaphore mutex_in=1;semaphore mutex_out=1;semaphore empty=0;int in=0

9、,out=0;生产者活动:while(1)produce next product;P(mutex_in);add the product to bufferin;in+;v(mutex_in);V(empty); 消费者活动:while(1)P(empty);P(mutex_out);take the product from bufferout;out+;V(mutex_out);14. 设有一个可以装A、B两种物品的仓库,其容量无限大,但要求仓库中A、B两种物品的数量满足下述不等式:-MA物品数量B物品数量N其中M和N为正整数。 试用信号灯和PV操作描述A、B两种物品的入库过程。答:已知

10、条件 -MA物品数量B物品数量N 可以拆成两个不等式,即A物品数量B物品数量N,B物品数量A物品数量M。这两个不等式的含义是:仓库中A物品可以比B物品多,但不能超过N个;物品可以比A物品多,但不能超过M个。semaphore a=n;semaphore b=m;void main()createprocess(A,);createprocess(B,);A物品入库:void A()while(1) P(a); A物品入库; V(b); B物品入库:void B() while(1) P(b); B物品入库; V(a); 15. 试用信号灯与PV操作实现司机与售票员之间的同步问题。设公共汽车上有

11、一个司机和一个售票员,其活动如下图所示。为了安全起见,显然要求: (1)关车门后方能启动车辆;(2)到站停车后方能开车门。亦即“启动车辆”这一活动应当在“关车门”这一活动之后,“开车门”这一活动应当在“到站停车”这一活动之后。解:如果进程P2尚未推进到处时,进程P1已经推进到处,则P1应等待直到P2推进到处为止;同样,如果进程P1尚未推进到处时,进程P2已经推进到处,则P2应等待直到P1推进到处为止。如果进程P1在处发生了等待,则当进程P2执行到处时应将P1唤醒;同样,如果进程P2在处发生了等待,则当进程P2执行到处时应将P1唤醒。用信号量和P、V操作解决这一问题,需要定义两个信号量,一个信号

12、量start表示是否允许司机启动车辆,另一个信号量open表示是否允许售票员开车门。初始状态是车停在始发站,车门开着,等待乘客上车。因此,两个信号量的初值都是0。semaphore start=0;semaphore open=0;司机的活动:P1: do P(start); 启动车辆; 正常行车; 到站停车; V(open); while (1); 售票员的活动:P2: do 关车门;V(start); 售 票; P(open); 开车门; while (1);16. 设有A、B、C三组进程,它们互斥地使用某一独占型资源R,使用前申请,使用后释放。资源分配原则如下: (1) 当只有一组申请进

13、程时,该组申请进程依次获得R; (2) 当有两组申请进程时,各组申请进程交替获得R,组内申请进程依次获得R; (3) 当有三组申请进程时,各组申请进程轮流获得R,组内申请进程依次获得R。试用信号灯和PV操作分别给出各组进程的申请活动程序段和释放活动程序段。解:int free=1; /设备状态标志semaphore mutex=1;semaphore qa=qb=qc=0; /各组等待队列int counta=countb=countc=0; /等待队列长度A组申请:P(mutex);if(free=1)free=0;V(mutex);elsecounta+;V(mutex);P(qa);A组

14、释放:P(mutex);if(countb0)countb-;V(qb);else if(countc0) countc-; V(qc); else if(counta0) counta- V(qa); else free=1; 仿A组进程活动可以给出B组和C组进程活动。17. 设自行车生产线上有一只箱子,其中有N个位置(N3),每个位置可存放一个车架或一个车轮; 又设有三个工人,其活动分别为:工人1活动:do 加工一个车架;车架放入箱中;while(1)工人2活动:do 加工一个车轮;车轮放入箱中;while(1)工人3活动:do 箱中取一车架;箱中取二车轮;组装为一台车;while(1)试

15、分别用信号灯与PV操作、管程、会合实现三个工人的合作,要求解中不含死锁。解:用信号灯与PV操作实现三个工人的合作,管程与会合解法可仿照给出。首先不考虑死锁问题,工人1与工人3、工人2与工人3构成生产者与消费者关系,这两对生产/消费关系通过共同的缓冲区相联系。从资源的角度来看,箱子中的空位置相当于工人1和工人2的资源,而车架和车轮相当于工人3的资源。定义三个信号灯如下:semaphore empty=N; /空位置semaphore wheel=0; /车轮semaphore frame=0; /车架三位工人的活动分别为:工人1活动:do 加工一个车架;P(empty);车架放入箱中;V(fra

16、me);while(1)工人2活动:do 加工一个车轮;P(empty);车轮放入箱中;V(wheel);while(1)工人3活动:do P(frame);箱中取一车架;V(empty);P(wheel);P(wheel);箱中取二车轮;V(empty);V(empty);组装为一台车;while(1)分析上述解法易见,当工人1推进速度较快时,箱中空位置可能完全被车架占满或只留有一个存放车轮的位置,而当此时工人3同时取2个车轮时将无法得到,而工人2又无法将新加工的车轮放入箱中;当工人2推进速度较快时,箱中空位置可能完全被车轮占满,而当此时工人3取车架时将无法得到,而工人1又无法将新加工的车架

17、放入箱中。上述两种情况都意味着死锁。为防止死锁的发生,箱中车架的数量不可超过N-2,车轮的数量不可超过N-1,这些限制可以用两个信号灯来表达。semaphore s1=N-2;semaphore s2=N-1;如此,可以给出不含死锁的完整解法如下:工人1活动:do 加工一个车架;P(s1);P(empty);车架放入箱中;V(frame);while(1)工人2活动:do 加工一个车轮;P(s2);P(empty);车轮放入箱中;V(wheel);while(1)工人3活动:do P(frame);箱中取一车架;V(empty);V(s1);P(wheel);P(wheel);箱中取二车轮;V

18、(empty);V(empty);V(s2);V(s2);组装为一台车;while(1)详细描述还应考虑对箱子单元的描述以及访问互斥问题。建议车架放在箱子的一端,车轮放在箱子的另一端,车架与车轮都采用后进先出的管理方式。18. 一座小桥(最多只能承重两个人)横跨南北两岸,任意时刻同一方向只允许一人过桥,南侧桥段和北侧桥段较窄只能通过一人,桥中央一处宽敞,允许两个人通过或歇息。试用信号灯和PV操作写出南、北两岸过桥的同步算法。解:桥上可能没有人,也可能有一人,也可能有两人。桥上有两人时的情形如下:北岸北岸北岸桥中间 南岸南岸南岸(a) 两人同时过桥 (b) 两人都到中间 (c) 南(北)来者到北

19、(南)段共需要三个信号量,load用来控制桥上人数,初值为2,表示桥上最多有2人;north用来控制北段桥的使用,初值为1,用于对北段桥互斥;south用来控制南段桥的使用,初值为1,用于对南段桥互斥。semaphore load=2;semaphore north=1;semaphore south=1;tosouth()P(load);P(north);过北段桥;到桥中间;V(north);P(south);过南段桥;到达南岸V(south);V(load);tonorth()P(load);P(south);过南段桥;到桥中间V(south);P(north);过北段桥;到达北岸V(no

20、rth);V(load);19. 某寺庙,有小和尚、老和尚若干庙内有一水缸,由小和尚提水入缸,供老和尚饮用。水缸可容纳 30 桶水,每次入水、取水仅为1桶,不可同时进行。水取自同一井中,水井径窄,每次只能容纳一个水桶取水。设水桶个数为5个,试用信号灯和PV操作给出老和尚和小和尚的活动。semaphore empty=30; / 表示缸中目前还能装多少桶水,初始时能装30桶水semaphore full=0; / 表示缸中有多少桶水,初始时缸中没有水semaphore buckets=5; / 表示有多少只空桶可用,初始时有5只桶可用semaphore mutex_well=1; / 用于实现对

21、井的互斥操作semaphore mutex_bigjar=1; / 用于实现对缸的互斥操作young_monk()while(1)P(empty);P(buckets);go to the well;P(mutex_well);get water;V(mutex_well);go to the temple;P(mutex_bigjar);pure the water into the big jar;V(mutex_bigjar);V(buckets);V(full);old_monk()while()P(full);P(buckets);P(mutex_bigjar);get water;

22、V(mutex_bigjar);drink water;V(buckets);V(empty);20. 设系统中有5台类型相同的打印机,依次编号为15。 又设系统中有n个使用打印机的进程,使用前申请,使用后释放。 每个进程有一个进程标识,用于区别不同的进程。 每个进程还有一个优先数,不同进程的优先数各异。当有多个进程同时申请时,按照进程优先数由高到低的次序实施分配。 试用信号灯和PV操作实现对于打印机资源的管理,即要求编写如下函数和过程:(1) 函数 require(pid,pri): 申请一台打印机。参数pid为进程标识,其值为1到n的整数; pri为进程优先数,其值为正整数; 函数返回值为所申请到打印机的编号,其值为1到5的整数;(2) 过程 return(prnt): 释放一台打印机。参数prnt为所释放打印机的编号,其值为1到5的整数。解:#define N 5bool flagN+1; /flag0表示可用打印机数,/flagi表示第i号打印机的状态(1=i0) flag0-;for(int i=1;i accept start_read do read_count:=read_count+1; end start_read or when read_count0 = accept finish_re

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

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