操作系统复习资料例题 2.docx
- 文档编号:23079616
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:26
- 大小:90.68KB
操作系统复习资料例题 2.docx
《操作系统复习资料例题 2.docx》由会员分享,可在线阅读,更多相关《操作系统复习资料例题 2.docx(26页珍藏版)》请在冰豆网上搜索。
操作系统复习资料例题2
例3.1一个单CPU的操作系统共有n个进程,不考虑进程状态过度情况:
(1)给出运行进程的个数。
(2)给出就绪进程的个数。
(3)给出等待进程的个数。
解
(1)一个运行进程
(2)m个就绪进程(3)n-m-1个等待进程
3.3.2进程同步概念
例3.2进程之间存在哪几种相互制约关系?
各是什么原因引起的?
下列活动分别属于哪种制约关系?
(1)若干同学去图书馆借书;
(2)两队举行篮球比赛;
(3)流水线生产的各道工序;
(4)商品生产和社会消费。
解有直接制约关系(即同步问题)和间接制约关系(即互斥问题)。
同步问题是存在逻辑关系的进程之间相互等待所产生的制约关系,互斥问题是相互无逻辑关系的进程间竞争使用资源所发生的制约关系。
(1)属于互斥关系,因为书的数目是有限的,一本书只能借给一个同学;
(2)属于互斥关系,因为篮球只有一个,两队都要争夺;
(3)属于同步关系,各道工序的开始都依赖前道工序的完成;
(4)属于同步关系,商品没有生产出来,消费无法进行,商品未消费完,生产也无须进行。
3.3.3信号量概念及应用
例3.3设有8个程序prog1,prog2,…prog8。
它们在并发系统中执行时有如图3.4所示的制约关系,试用P、V操作实现这些程序间的同步。
并发系统执行图
分析本题是用来检查考生对使用P、V操作实现进程间同步的掌握情况。
一般地,若要求进程B在进程A之后方可执行时,只需在进程B执行前进行P操作,而在进程A执行完时对同一信号量进行V操作即可。
本题要求列出8个进程(程序)的控制关系,使题目显得较为复杂。
但当对进程间的同步理解透彻后,应不难写出对应的程序。
解这一类问题还应注意的一点是,要看清图示的制约关系,不要漏掉或多出制约条件。
解图并发程序间的同步如下所示:
设置信号量初值:
s1:
=s2:
=s3:
=s4:
=s5:
=0
PARBEGIN
prog1:
BEGIN
doallwork;
V(s1);
V(s1);
V(s1);
END
prog2:
BEGIN
doallwork;
V(s2);
V(s2);
V(s2);
END
prog3:
BEGIN
P(s1);
P(s2);
doallwork;
V(s3);
END
prog4:
BEGIN
P(s1);
P(s2);
doallwork;
V(s5);
END
Prog5:
BEGIN
P(s1);
P(s2);
doallwork;
V(s4);
END
prog6:
BEGIN
P(s3);
doallwork;
V(s5);
END
prog7:
BEGIN
P(s4);
doallwork;
V(s5);
END
prog8:
BEGIN
P(s5);
P(s5);
P(s5);
doallwork;
END
PAREND
例3.4有个寺庙,庙中有小和尚和老和尚若干人,有一只水缸,由小和尚提水入缸给老和尚饮用。
水缸可容10桶水,水取自同一口水井中。
水井径窄,每次仅能容一只水桶取水,水桶总数为3个。
若每次只能入缸1桶水和取缸中1桶水,而且还不可以同时进行。
试用一种同步工具写出小和尚和老和尚入水、取水的活动过程。
解本题为两个进程共享两个缓冲区的问题。
首先考虑本题有几个进程:
从井中取水后向缸中倒水此为连续动作,为一个进程;从缸中取水为另一个进程。
其次,考虑信号量。
有关互斥的资源有:
水井和水缸。
水井依次仅能一个水桶进出,水缸一次入水为一桶。
分别设互斥信号量为:
mutex1和mutex2控制互斥。
有关同步问题为:
三个水桶无论从井中取水还是入处水缸都是一次一个,应为它设信号量count,抢不到水桶的进程只好等待。
水缸满时不可入水,设信号量empty,控制水量,水缸空时不可出水,设信号量full,控制水量。
设置信号量初值:
mutex1:
=mutex2:
=1;count:
=3;empty:
=10;full:
=0;
parbegin
{
小和尚打水进程:
begin
L1:
P(empty);/*水缸满否?
P(count);/*取得水桶
P(mutex1);/*互斥从井中取水
从井中取水;
V(mutex1);
P(mutex2);/*互斥使用水缸
倒水入缸;
V(mutex2);
V(count);/*归还水桶
V(full);/*多了一桶水
GotoL1;
End
老和尚取水进程:
begin
L2:
P(full);/*有水吗?
P(count);/*申请水桶
P(mutex2);/*互斥取水
从缸中取水;
V(mutex2);
V(count);/*归还水桶
V(empty);/*水缸中少了一桶水
GotoL2;
end
}
parend.
例3.5有三个并发进程R、M、P共享一个缓冲区B,进程R负责从输入设备读入一条记录,每读一条记录后把它存放在缓冲区B中;进程M在缓冲区B中加工进程R存入的记录;进程P把加工后的记录打印输出。
缓冲区B中每次只能存放一条记录,当记录被加工输出后,缓冲区B中才可存放另一条新记录。
请用P、V操作为同步机制来描述它们并发执行时能正确工作的程序。
分析本题是三个进程共享一个缓冲区的问题。
从题中看出,R、M、P这三个进程严格按照先做进程R,然后做进程M,最后做进程P。
只有进程P执行完后,才可以做下一次的R,M,P。
因此,要合理设计P、V操作的顺序与设置信号量的初值。
解
设置信号量初值:
R:
=1;M:
=P:
=0;
parbegin
进程R
L1:
从输入设备中读取一条记录;
P(R);
将读入记录存入缓冲区;
V(M);
gotoL1
进程M
L2:
P(M);
从缓冲区中取出数据信息进行加工,并将其存入缓冲区;
V(P)
gotoL2
进程P:
L3:
P(P)
输出缓冲区的信息;
V(R)
gotoL3
parend;
例3.6若有三个进程A、B和C协作解决文件打印问题;A将文件记录从磁盘读入主存的缓冲区buffer1,每执行一次读一个记录;B将缓冲区buffer1的内容复制到缓冲区buffer2,每执行一次复制一个记录;C打印缓冲区buffer2的内容,每执行一次打印一个记录。
缓冲区的大小和一个记录大小一样。
请用P、V操作来保证文件的正确打印。
分析本题是三个进程共享二个缓冲区的问题。
它是一个典型的生产者—消费者问题,其中的难点在于进程B既是生产者又是消费者,处理不好可能造成同步错误或死锁。
解A、B、C三个进程协作解决文件打印问题的流程为:
设置信号量初值:
mutex1:
=mutex2:
=1;
avail1:
=avail2:
=1;
full1:
=full2:
=0;
BEGIN
PARBEGIN
进程A
L1:
readfromdisk;
P(avail1);
P(mutex1);
puttobuffer1;
V(full1);
V(mutex1);
gotoL1;
进程B
L2:
P(full1);
P(mutex1);
getformbuffer1;
V(avail1);
V(mutex1);
P(avail2);
P(mutex2);
puttobuffer2;
V(full2);
V(mutex2);
gotoL2;
进程C
L3:
P(full2)
P(mutex2);
getformbuffer2;
V(avail2);
V(mutex2);
printrecord;
gotoL3;
PAREND
END
程序中mutex1和mutex2是两个公用信号量,用于控制进程对缓冲区buffer1和缓冲区buffer2这两个临界资源访问的互斥。
avail1、full1、avail2和full2分别对应两个缓冲区,其中avail1、avail2初值为1,表示可以利用的缓冲区数目为1;full1、full2的初值为0,表示存在于缓冲区内的数据的个数为0。
通过对这两组私用信号量P、V操作,就实现了进程的同步。
例3.7进程P1使用缓冲区buffer向进程P2,P3,P4发送消息,要求每当P1向buffer中发消息时,只有当P2,P3,P4进程都读取这条消息后才可再向buffer中发送新的消息。
利用P、V原语描述如图所示进程的动作序列。
图进程的动作序列
分析本题是一个生产者三个消费者共享一个缓冲区问题。
它是生产者和消费者问题的一个变形,在生产者和消费者问题中是共用一组缓冲区,每一个缓冲区只需要写一次,读一次。
而在这个问题中,每个缓冲区只需写一次,但需读三次。
本题在解题的过程中,我们可以把这一组缓冲区看做三组缓冲区。
这样一来,每一个生产者需要同时写缓冲区组中相应的三个缓冲区,而每一个消费者只需读它自己所对应的那组缓冲区中对应的单元即可。
生产者须在三个缓冲区都为空时才可写入。
解设信号量初值为:
S1=S2=S3=0,S=3
进程P1进程P2进程P3进程P4
P(S)P(S1)P(S2)P(S3)
P(S)读取消息读取消息读取消息
P(S)V(S)V(S)V(S)
发送消息到
缓冲区Buffer
V(S1)
V(S2)
V(S3)
例3.8桌上有一个空盘,允许存放一个水果。
爸爸可向盘中放苹果,也可向盘中放橘子,儿子专等吃盘中的橘子,女儿专等吃盘中的苹果。
规定当盘空时一次放一个水果供吃者取用,请用P,V原语实现爸爸、儿子、女儿三个并发进程的同步。
分析本题是一个生产者两个消费者共享一个缓冲区问题,生产者一次可生产一个不同种类的产品本题的题意是:
①爸爸、儿子、女儿共用一个盘子,且盘中一次只能放一个水果。
②当盘空时,爸爸可将一个水果放入果盘中。
③若放入盘中的是橘子,允许儿子吃,女儿必须等待。
④若放入盘中的是苹果,允许女儿吃,儿子必须等待。
因此,上述问题实际上是生产者消费者问题的一种变形。
这里,生产者放入缓冲区的产品有两类,消费者也有两类,每类消费者只消费其中固定的一类产品。
解设置三个信号量:
S,初值为1,用于爸爸、儿子、女儿三个进程间的互斥,表示盘中是否为空。
SO,初值为0,用于爸爸、儿子儿两个进程间的同步,表示盘中是否有橘子。
SA,初值为0,用于爸爸、女子两个进程间的同步,表示盘中是否有苹果。
三个进程之间的同步描述如下:
father进程son进程daughter进程
L1:
L2:
L3:
P(S)P(SO)P(SA)
将水果放入盘中从盘中取出橘子从盘中取出苹果
if(放入是橘子)V(SO)V(S)V(S)
elseV(SA)吃橘子吃苹果
gotoL1gotoL2gotoL3
例3.9某高校计算机开设一系列网络课程并安排学生上机实习,假设机房共有2m台机器,有2n名学生选该课,规定:
(1)每两个学生组成一组,但占有一台机器,协同完成上机实习;
(2)只有一组的两个学生都到齐,并且此时机房有空闲机器时,该组学生才能进入机房;
(3)上机实习完成后,由一名教师检查,检查完毕,这一组学生同时离开机房。
试用P,V操作模拟上机实习过程。
解上机实习过程如下:
设置信号量:
student=0;computer=2m,;enter=finish=check=0
设置变量:
rc=0
parbegin
学生进程:
BEGIN
V(student)表示有学生到达
Ifrc=0thenP(computer)
获取一台计算机
elserc=0
P(enter)等待允许进入
协同完成上机实习
V(finish)表示实习完成
P(check)等待教师检查
V(computer)释放计算机资源
END
教师进程:
BEGIN
L1:
P(finish)等待学生实习完成
P(finish)等待另一学生实习完成
教师检查工作
V(check)表示检查完成
V(check)表示检查完成
gotoL1
END
管理员进程:
BEGIN
L2:
P(student)等待学生到达
P(student)等待另一学生到达
V(enter)允许学生进入
V(enter)允许学生进入
END
parend
例3.10有一个仓库存放两种零件A和B,它们最大库存容量各为m个。
有一车间不断地取A和B进行装配,每次各取一个。
为避免零件锈蚀,遵循先入库者先出库的原则。
有两组供应商分别不断地供应A和B(每次一个)。
为保证齐套和合理库存,当某种零件的数量比另一种的数量超过n(n 试用P、V操作正确地实现之。 分析本题不是直接给出进程之间的制约关系,而是给出一个数量上的控制关系。 在做这样的题目,千万不可在表达式中使用信号量的值来控制程序的流程。 解控制关系有四个: (A的数量-B的数量)≤n, (B的数量-A的数量)≤n, A的数量≤m, B的数量≤m。 根据这种控制关系,零件进货与使用的流程如下所示: 设置信号量为: mutex=1用于互斥信号量; availa=m用于控制操作A的执行次数; availb=m用于控制操作B的执行次数; sa=sb=n用于控制操作A、B之间的制约关系; fulla=0用于同步控制,表示当前供应A的数量; fullb=0用于同步控制,表示当前供应B的数量; PARBEGIN 供应A: BEGIN L1: P(availa); P(sa); P(mutex); 供应A; V(fulla); V(sb); V(mutex); gotoL1; END 供应B: BEGIN L2: P(availb); P(sb); P(mutex); 供应B; V(fullb); V(sa); V(mutex); gotoL2; END 取: BEGIN L3: P(fulla); P(fullb); P(mutex); 取A或B; V(availa); V(availb); V(mutex); gotoL3; END PAREND 3.3.4经典进程同步问题 例3.11设有图所示工作模型。 有四个进程P0、P1、P2和P3和四个信箱M0、M1、M2和M3。 进程间借助相邻的信箱传送消息: Pi每次从Mi中取一条消息,经加工送入M(i+1)mod4中。 M0,M1,M2,M3分别设有3,3,2,2个格子,每个格子放一条消息。 初始时M0装了3条消息,其余为空。 写出使用信号量实现进程同步与互斥的流程。 图四个进程共享四个信箱工作模型 解本题可看成四对生产者和消费者问题。 用mutexi(i=0,1,2,3)控制四个信箱的互斥使用,初值均为1;emptyi(i=0,1,2,3)表示各信箱中空单元的个数,初值分别为0,3,2,2;fulli(i=0,1,2,3)表示各信箱中信息的个数,初值分别为3,0,0,0。 parbegin { P0进程: P2进程: beginbegin L1: P(full0);L3: P(full2); P(mutex0);P(mutex2); 从M0中取一个消息;从M3中取一个消息; V(mutex0);V(mutex2); V(empty0);V(empty2); 加工消息;加工消息; P(empty1);P(empty3); P(mutex1);P(mutex3); 送消息进入M1;送消息进入M3; V(mutex1);V(mutex3); V(full1);V(full3); GotoL1;GotoL3; End;End P1进程: P3进程: beginbegin L2: P(full1);L4: P(full3); P(mutex1);P(mutex3); 从M1中取一个消息;从M3中取一个消息; V(mutex1);V(mutex3); V(empty1);V(empty3); 加工消息;加工消息; P(empty2);P(empty0); P(mutex2);P(mutex0); 送消息进入M2;送消息进入M0; V(mutex2);V(mutex0); V(full2);V(full0); GotoL2;GotoL4; End;End 例3.12多个进程共享一个文件,其中读文件的进程称之为读者,写文件的进程称为写者。 读者可以同时读,但是写者只能独立地写。 请: (1)说明进程间的相互制约关系。 (2)用P,V操作写出读者优先的同步算法。 (3)用P,V操作写出写者优先的同步算法,即一旦有写者到达,后续的读者都必须等待,而不管是否有读者在读文件。 解: (1)进程之间相互制约关系有三种: 一是读者之间允许同时读;二是读者与写者之间须互斥进行;三是写者之间须互斥写; (2)读者优先 读者i: { P(mutex); readcount++; if(readcount==1) P(w); V(mutex); 读 P(mutex); readcount--; if(readcount==0) V(w); V(mutex); }; 写者j: { P(w); 写 V(w); }; (3)写者优先的同步算法 写者优先 条件: 1)多个读者可以同时进行读 2)写者必须互斥(只允许一个写者写,也不能读者写者同时进行) 3)写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者) 解写者优先的同步算法为: 为了提高写者的优先级,我们增加了一个信号量W,用以在写进程到达时封锁其后续的读者进程。 相应控制算法如下: 设置信号量初值为: mutex1: =1;mutex2: =1; 设置变量初值为: rc: =0;w: =1 PARBEGIN Reader: BEGIN P(w);一旦有写者,后续的读者就不能进来 P(mutex1); rc: =rc+1; IFrc=1THENP(mutex2); V(mutex1); V(w); Readingthefile; P(mutex1); rc: =rc-1; IFrc=0THENV(mutex2); V(mutex1); END Writer: BEGIN P(w); P(mutex2); Writeingthefile; V(mutex2); V(w); END PAREND 例3.13有一个阅览室,共有100个座位,读者进入时必须先在一张登记表上登记,该表为每一座位列一目录,包括座位号和读者姓名等,读者离开时要消掉登记的信息,试问: (1)为描述读者的动作,应编写几个程序,设置几个进程? (2)试用PV操作描述读者进程之间的同步关系。 解读者的动作有两个,一是填表进入阅览室,这时要考虑阅览室是否有座位;一时读者阅读完毕,离开阅览室,这时的操作要考虑阅览室里是否有读者。 读者在阅览室读书时,由于没有引起资源的变动,不算动作变化。 信号量有三个: seates表示阅览室是否有座位(初值为100,代表阅览室的空座位数) readers表示阅览室的读者数,初值为0 mutex用于互斥,初值为1 读者进入阅览室进程: P(seates) P(mutex) 填写登记表 V(mutex) V(readers) 读者进入阅览室进程: P(readers) P(mutex) 消掉登记 离开阅览室 V(mutex) V(seates) 例3.14哲学家A、B、C和D在一起讨论问题,讨论间隙这四位哲学家进餐,每人进餐时都使用刀叉各一把,但餐桌上只在两个人之间放一套餐具。 请用信号量及P、V操作说明这四位哲学家的同步、互斥过程。 解为了避免死锁发生,可作如下规定: 设置信号量S1、S2、S3、S4,其初值全为1。 各位哲学家进程就餐情况如下: Pi(i=1,2,3): P4: P(Si);P(S4); P(S(i+1));P(S1); eating;eating; V(Si);V(S4); V(S(i+1));V(S1); 3.3.5消息传递通信 例3.15如图所示的是高级通讯原语SEND和RECEIVE不完整的框图。 请填充适当的P、V操作,并说明所用信号量的意义和初值。 分析从图中看出,发送者进程和接收者进程之间的同步关系是: 发送者进程生成的信息送入消息链中,接收者进程从消息链中接收信息。 由于发送者进程产生一个消息并链入消息链后用V操作增加消息计数并唤醒接收者进程,表示发送者进程和接收者进程是通过信号量S实现同步的,因此接收者进程应该在取信息之前先使用一个P操作来查看消息链上是否有消息,若无消息,则阻塞自己。 另外,发送者和接收者对消息链的访问应使用信号量进行互斥,即在访问前使用P操作,在访问后使用V操作。 解由上述分析可知: ①P(S1)②V(S1)③P(S2)④P(S1)⑤V(S1) 其中S1是用于控制互斥访问消息链的互斥信号量,其初值为1;S2是用于记录消息个数的同步信号量,其初值为0。 3.3.6处理机调度 例3.16有五个批处理的作业A,B,C,D,E几乎同时到达一个计算中心,估计的运行时间分别为2,4,6,8,10min,它们的优先权分别为1,2,3,4,5(5为最高优先级)。 请用下面的调度算法,分别计算作业的平均周转时间(忽略作业的切换开销): (1)优先级调度; (2)时间片轮转(时间片为2min); 分析: 本题是对给出的一个作业序列,使用四种不同的调度算法模拟作业的调度与执行过程,并给出对于这个作业序列的各种作业调度算法的平均周转时间,从而可以比较不同调度算法的性能。 题中所指的五个作业几乎同时到达,其含义是任何调度算法都可以认为这五个作业是同时到达的,因此,在调度过程中不需要考虑作业到达的顺序。 (1)最高优先级优先 解 (1)最高优先级优先算法 (2)时间片轮转(时间片为2m
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统复习资料例题 操作系统 复习资料 例题
![提示](https://static.bdocx.com/images/bang_tan.gif)