第七章课后答案
从B中取出数据X;
V(SF); 打印输出;
9、、两个并发进程的程序如下:
GOTO L3; } W2
{L4:P(S3);
从B中取出数据Y;
V(SF);
打印输出;
GOTO L4; }
begin
end;
N: integer; N:=3; cobegin PROCESS A begin
L1:N:=N+5; goto L1 end;
PROCESS B begin
L2:print(N); N:=0; goto L2 end; coend;
若PROCESS A先执行了三个循环后,PROCESS A和PROCESS B又并发执行了一个循环,写出可能出现的打印值。正确的打印值应该是多少?请用PV操作进行管理,使它们并发执行时不出现与时间有关的错误。
解: 可能出现的打印值为18或23。因为N的初始值为3,当进程A执行三个循环后,N的值为18,此时Process A和ProcessB并发执行,如果正巧是B先进入CPU执行的话,打印值就是18,打印时A进程为N增加的值就没有被记录下来。正确的打印值应该是23。PV操作的管理程序如下:
begin
N: integer; N:=3;
S:SEmaphore; S:=1 cobegin PROCESS A begin L1:P(S); N:=N+5; V(S); goto L1 end; PROCESS B begin L2:P(S);
第 31 页 共 36 页
第七章课后答案
end; coend; end;
print(N); N:=0; V(S); goto L2
10、在公共汽车上,司机和售票员的工作流程如下图所示。为保证乘客的安全,司机和售票员应密切配合协调工作。
请用PV操作来实现司机与售票员之间的同步。
解:在这个问题中,有两组进程,一组是司机启动车辆,行车和停车的进程,另一组是售票员售票、开车门和关车门的进程,两组进程的制约关系为启动车辆->行驶-停车->开车门->(旅客上车)关车门->启动车辆。关键在于开门应在停车之后,启动车辆应在关门之后。设有两个信号用于司机和售票员之间通信,一个是Run,另一个是Open,Run等于1表示可以开车,Open等于1表示可以开门。 过程如下:
begin
Buffer:integer; Run,Open:Semapore; Run:=1;Open:=0; cobegin PROCESS Busman; //司机进程 begin L1:P(Run) //检查是否可以启动车辆 start; //启动车辆 driving; //行驶 stop; //停车 V(Open); //允许开门 goto L1 end; RPOCESS Conductor; //售票员进程 begin L2: selling tickets;//售票 P(Open);//检查是否可以打开车门 Open the door;//开车门让乘客上车 Close the door; //关门 V(Run); //允许开车 goto L2; end; coend; end;
第 32 页 共 36 页
第七章课后答案
11、设置信号量S1,S2,S3用于进程间的同步 ;
设置信号量M用于进程间对盘子使用的互斥。程序如下: cobegin
S1=2;S2=0;s3=0;m=1 producefather producemother consumerson {l0:取苹果; {l1:取桔子; {l2:p(s3); P(S1); P(S1); p(m); p(m); p(m); 把桔子从盘子取出; 把苹果放入盘子; 把桔子放入盘子; v(m);
v(m); v(m); v(s1); V(S2); V(S3); 吃桔子; GOTO L0;} GOTO L1;} GOTO L2;}
12、 13、 14、 15、 16、
17、采用多线程技术有什么优点?
consumerdauther
{l3:p(s2); p(m);
把苹果从盘子取出;
v(m); v(s1); 吃苹果; GOTO L3;}
答:
1) 创建线程无须另外分配资源,速度快,开销小。
2) 线程间的通信在同一地址空间进行,无须额外的通信机制,通信简便,传送速度快。 3) 线程能独立执行,充分利用了处理器与外设的并行工作能力。 补充:请用进程通信的办法解决生产消费者问题。
解:设生产者的与消费者之间进行直接通信,在message中说明可用产品的信息。
begin Process M; //生产者进程: begin L1:{生产物品}; send (B,message);//发送一条消息给B进程 goto L1; end; Process B; 消费者进程: begin L2:recieve(M,message); //取出信箱信件,如有信件则可以消费 {取出物品消费}; goto L2; end; end;
第 33 页 共 36 页
第八章课后答案
第八章复习题
1、什么叫死锁?什么原因会引起死锁?(201007)
答:若系统中存在一组进程(两个或多个进程),它们中的每一个进程都占用了某种资源而又都在等待其中另一个进程所占用的资源,这种等待永远不能结束,则说系统出现了“死锁”。
死锁产生的原因:与资源的分配策略有关,当系统中若干进程需求资源的总数大于系统能提供的资源数时,进程间会出现竞争资源,如果对进程竞争的资源分配不当就会引起死锁。
死锁的出现也与并发进程的执行速度有关,并发进程的执行速度是不可预知的。因此可能形成死锁。
2、有哪些策略可防止和避免死锁?
防止死锁的策略:破坏死锁的四个必要条件的一个条件即可:资源的静态分配、可抢夺资源、资源的按序分配;
避免死锁的策略:银行家算法。
3、某系统有输入机和打印机各一台,今有两个进程都要同时使用它们,采用PV操作实现请求使用和归还释放后,还会产生死锁吗?若否,说明理由;若会产生死锁则给出一种防止死锁的方法。
答:这两个进程采用PV操作,可能不产生死锁,也可能产生死锁。如果PV操作对两个资源进行按序分配,则不会产生死锁,反之,则于进行的并发性,其执行速度无法预知,当一个进程得到输入机另一进程得到打印机时,PV操作虽然实现互斥访问,但两个进程进入循环等待而死锁。
以下是根据按序分配的策略写成的PV操作控制方法:
begin S1,S2:semaphore; S1=1;S2=1; cobegin PROCESS P1 begin P(S1); //先申请S1再申请S2 P(S2); 操作 V(S1); V(S2); end; PROCESS P2 begin P(S1); //先申请S1再申请S2 P(S2); 操作 V(S1); V(S2); end; end;
可见其会类似于哲学家一样而产生死锁。(如进程R1占用了打印机,请求输入设备,而R2占用
输入设备,请求打印机)。解决的方法是同时申请这两个资源,一起使用。
4、现有同类资源12个供4个进程共享,假定进程所需资源和已占资源的情况如下表所示。回答:
第 34 页 共 36 页
第八章课后答案 进程 P1 P2 P3 P4 已占资源数 2 3 4 1 最大需求数 4 6 7 4 (1)目前系统是否处于安全状态?为什么? (2).4个进程在执行中又都提出申请一个资源的要求,则在什么情况下会引起死锁?为什么? 答:(1).处于安全状态。
在当前状态下,尚余2个资源可供分配,如果先满足进程P1的要求,把其中2个资源分配给P1进程,P1进程可执行完毕归还系统4个资源,则系统剩余资源为4个,可满足P2,P3,P4中的一个。因此可以找到一个安全序列P1,P2,P3,P4.所以系统是安全的。
(2).根据目前的资源占用情况,若先满足P2,或P3,或P4的一个资源要求,则系统只剩下1个资源,不能满足任何一个的资源需求,从而使系统处于死锁状态。
5、某系统有A,B,C,D这4类资源供5个进程共享,进程对资源的需求和分配情况如下表所示。现在系统还剩资源A类1个,B类5个,C类2个和D类0个,请按银行家算法回答下面问题:
进程 P1 P2 P3 P4 P5 已占资源数 A B C D 0 0 1 2 1 0 0 0 1 3 5 4 0 6 3 2 0 0 1 4 最大需求数 A B C D 0 0 1 2 1 7 5 0 2 3 5 6 0 6 5 2 0 6 5 6 a.现在系统是否处于安全状态? b.如果现在进程P2提出需要(0,4,2,0)个资源的要求,系统能否满足它的请求?
答:a.在这里,进程P1已经拥有足够资源,在执行行后可归还C和D资源,,同时,进程P3可以得到足够的资源完成执行,其后,P2,P4、P5可以依次得到足够的资源来完成,因此,用银行家算法分配资源时,系统处于安全状态。
b.系统可满足进程P2的资源要求。根据银行家算法,P2进程首次申请B类资源4个,不大于其所需的最大资源数(7个),也不大于系统尚存可用资源数(5个),同样对于C类资源也是可以满足的,因此系统按其当前申请数分配给P2进程。系统仍能按前面所述的资源分配序列P1,P3,P2,P4,P5来完成运行,系统处于安全状态。
6、某系统有同类资源m个供n个进程共享,如果每个进程最多申请x个资源(1≤x≤m)且各进程的最大需求量之和小于(m+n),证明该系统不会发生死锁。 证明:因为每个进程最多申请x个资源,最坏情况下n个进程各已申请了x-1 个资源。所以现在还剩下的资源是m-n(x-1),又因为各进程的最大需求量之和小于(m+n),因此有n(x-1)<m
(即每个进程至少还差一个资源才能得到满足)。所以剩余资源m-n(x-1)≥1,这样,系统至少还有一个资源可使其中一个进程得到所需的全部资源,在它执行结束后,归还的资源可供其他进程使用,因而不可能发生死锁。
7、有3个进程P1,P2和P3并发执行,进程P1需使用资源S3和S1,进程P2需使用资源S1和S2,进程P3需使用资源S2和S1,回答:
a.若对资源分配不加限制,会发生什么情况?为什么?
b.为保证进程能执行到结束,应采用怎样的资源根本策略?
第 35 页 共 36 页
第八章课后答案
答:a.若对资源分配不加限制,可能出现死锁情况:如下表 进程名 P1 P2 P3 已占资源 S3 S1 S2 申请资源 S1 S2 S1 三个进程都不能得到自己所需的另一个资源,从而产生死锁。 b. 有几种方法可以避免死锁产生:
(1)采用静态分配策略,每一个进程在开始执行前申请到所需的全部资源后,该进程才能开始执行,只要一个资源不能满足,系统就不分配任何资源给该进程使其等待。
? (2)采用释放已占资源策略,即当进程申请新的资源时必须先释放已经占用的资源才可以给予
分配资源。
? (3)采用按序分配策略,如给S1,S2,S3资源确定编号,进程在申请资源时必须从小到大的编
号进行申请,即P1按S1,S3的顺序,P2按S1,S2的顺序,P3按S1,S2的顺序申请,这样的话,只要S1被任何一个进程申请到,别的进程就不可以申请到任何资源,从而保证了系统的安全。
8、当前某系统有同类资源10个,进程P1,P2,P3所需资源总数分别为8,4,9。它们向系统申请资源的次序和数量如下表所示。回答:
a.系统采用银行家算法分配资源,请你写出系统完成第6次分配后各进程的状态及所占资源量。 b.在以后各次的申请中,哪次的申请要求可先得到满足? 次序 1 2 3 4 5 进程 P3 P1 P2 P1 P3 申请量 次序 进程 P2 P3 P1 P3 申请量 2 3 2 3 2 6 4 7 2 8 2 9 1 进程状态 等待 运行 等待 P3 2 2 2 2 2 2 系统剩余资源数 8 4 2 2 2 0 0 答:系统完成第6次分配后各进程状态如下: 进程 已分配资源数 P1 P2 P3 次序 1 2 3 4 5 6 4 4 2 P1 0 4 4 4 4 4 尚需资源数 4 0 7 P2 0 0 2 2 2 4 系统剩余资源数 附:按银行家算法进行的各进程的资源分配状态变化如下: b.进程P2运行结束后,第7次申请不能得到满足,因为归还的4个资源不足P3进程的剩余需求量,而第8次申请则可以使P1进程完成任务,因此第8次申请将先得到满足。
第 36 页 共 36 页