完整word版操作系统PV操作的作业参考答案.docx
《完整word版操作系统PV操作的作业参考答案.docx》由会员分享,可在线阅读,更多相关《完整word版操作系统PV操作的作业参考答案.docx(17页珍藏版)》请在冰豆网上搜索。
完整word版操作系统PV操作的作业参考答案
关于调度算法
【例1】下表给出作业l,2,3的提交时间和运行时间。
采用先来先服务调度算法和短作业优先调度算法,试问作业调度次序和平均周转时间各为多少?
(时间单位:
小时,以十进制进行计算。
)
作业号
提交时间
运行时间
1
2
3
0.0
0.4
1.0
8.0
4.0
1.0
分析 解这样的题关键是要根据系统采用的调度算法,弄清系统中各道作业随时间的推进情况。
我们用一个作业执行时间图来形象地表示作业的执行情况,帮助我们理解此题。
采用先来先服务调度算法,是按照作业提交的先后次序挑选作业,先进入的作业优先被挑选。
然后按照“排队买票”的办法,依次选择作业。
其作业执行时间图如下:
采用短作业优先调度算法,作业调度时根据作业的运行时间,优先选择计算时间短且资源能得满足的作业。
其作业执行时间图如下:
由于作业1,2,3是依次到来的,所以当开始时系统中只有作业1,于是作业1先被选中。
在8.0时刻,作业1运行完成,这时系统中有两道作业在等待调度,作业2和作业3,按照短作业优先调度算法,作业3只要运行1个时间单位,而作业2要运行4个时间单位,于是作业3被优先选中,所以作业3先运行。
待作业3运行完毕,最后运行作业2。
作业调度的次序是1,3,2。
另外,要记住以下公式:
作业i的周转时间Ti=作业完成时间-作业提交时间
系统中个作业的平均周转时间
,其中Ti为作业i的周转时间。
解:
采用先来先服务调度策略,则调度次序为l、2、3。
作业号
提交时间
运行时间
开始时间
完成时间
周转时间
1
0.0
8.0
0.0
8.0
8.0
2
0.4
4.0
8.0
12.0
11.6
3
1.0
1.0
12.0
13.0
12.0
平均周转时间T=(8+11.6+12)/3=10.53
采用短作业优先调度策略,则调度次序为l、3、2。
作业号
提交时间
运行时间
开始时间
完成时间
周转时间
1
0.0
8.0
0.0
8.0
8.0
3
1.0
1.0
8.0
9.0
8.0
2
0.4
4.0
9.0
13.0
12.6
平均周转时间T=(8+8+12.6)/3=9.53
思考题1
请同学们判断这句话:
作业一旦被作业调度程序选中,即占有了CPU。
()
提示:
需要清楚作业调度和进程调度的区别。
【例2】考虑下述页面走向:
1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6
当内存块数量分别为3时,试问FIFO、LRU、OPT这三种置换算法的缺页次数各是多少?
答:
缺页定义为所有内存块最初都是空的,所以第一次用到的页面都产生一次缺页。
当内存块数量为3时:
发生缺页中断的次数为16。
在FIFO算法中,先进入内存的页面被先换出。
当页6要调入时,内存的状态为4、1、5,考查页6之前调入的页面,分别为5、1、2、4,可见4为最先进入内存的,本次应换出,然后把页6调入内存。
发生缺页中断的次数为15。
在LRU算法中,最近最少使用的页面被先换出。
当页6要调入时,内存的状态为5、2、1,考查页6之前调入的页面,分别为5、1、2,可见2为最近一段时间内使用最少的,本次应换出,然后把页6调入内存。
发生缺页中断的次数为11。
在OPT算法中,在最远的将来才被访问的页面被先换出。
当页6要调入时,内存的状态为1、2、5,考查页6后面要调入的页面,分别为2、1、2、…,可见5为最近一段时间内使用最少的,本次应换出,然后把页6调入内存。
【例3】在一个单道的程序设计系统中,有3个作业J1、J2、J3,它们到达输入井的时间分别为8:
50、9:
00、9:
30,它们需要执行的时间分别为1.5小时、0.4小时、1小时。
系统在10:
00按响应比高者优先算法对它们进行调度,请回答:
(1)作业被选中执行的次序是什么?
(2)三个作业被选中时的响应比分别是多少?
分析响应比=作业周转时间/作业运行时间
+作业等待时间/作业运行时间
系统在10:
00,计算作业的响应比:
以J1为例,它的作业计算时间是1.5小时,即90分钟;J1从8:
50到达输入井,在10:
00时刻,J1的等待时间为70分钟,因此作业J1的响应比为:
1+70分钟/90分钟=1.77
同理,J2:
1+60分钟/24分钟=3.5J3:
1+30分钟/60分钟=1.5
因此按照响应比高者优先算法,优先调度J2。
在10:
24,J2完成。
这时计算J1、J3的响应比:
J1:
1+(70+24)分钟/90分钟=2.04J3:
1+(30+24)分钟/60分钟=1.9
按照响应比高者优先算法,优先调度J1。
在11:
54,J1完成,系统调度J3,J3的响应比为1+(30+24+90)分钟/60分钟=3.4因此,作业被选中执行的次序是J2、J1、J3。
三个作业被选中时的响应比分别是:
J1,2.04;J2,3.5;J3,3.4。
解:
(1)作业被选中执行的次序是J2、J1、J3。
(2)三个作业被选中时的响应比分别是:
J1,1.04;J2,2.5;J3,2.4。
思考题2
某作业的提交时间为10:
30,需要运行的时间为1小时,假设11:
00开始调度,它的响应比是。
【例4】设有进程A、B、C、D依次进入就绪队列(相隔一个时间单位),它们的优先级(优先数大的优先级较高)如下表所示:
进程
CPU时间
优先数
A
20
3
B
15
1
C
8
4
D
10
3
试问采用“先来先服务”、“静态优先数法”调度算法(注:
优先数大的优先级高),选中进程的执行次序。
解:
采用先来先服务调度算法,按照进程进入就绪队列的先后次序占有CPU,其执行次序是A-B-C-D。
采用静态优先数法,进程A最先就绪,在0时刻先占有CPU运行,随后1时刻进程B进入就绪队列,2时刻进程C进入就绪队列,3时刻进程D进入就绪队列。
由于采用静态优先数法,不容许随时间的推移改变进程的优先级,所以当进程A运行结束时,系统的就绪队列中有B、C、D三个进程,而进程C优先级最高,于是选中C;这样分析下去,进程的执行次序是A-C-D-B。
思考题3
时间片轮转调度算法是为了()。
A.多个终端都能得到系统的及时响应B.先来先服务
C.优先级高的进程先使用CPUD.紧急事件优先处理
参考解答
思考题1:
错误。
作业被作业调度程序选中,说明作业处于运行状态,即该作业进入内存并以进程的形式存在于系统中,但属于该作业的进程可能处于运行、就绪和等待状态,只有处于运行状态的进程才能占有处理机,而其余两种状态的进程并不占有处理机。
作业调度和进程调度的区别:
一个作业从进入系统到最后完成,一般至少要经历两级调度:
作业调度和进程调度。
作业调度是宏观上的高级调度,它的主要功能是根据一定的算法,从输入井中选中若干个作业,分配必要的资源,如主存、外设等,为它们建立初始状态为就绪的作业进程。
进程调度是微观上的低级调度,它的主要功能是根据一定的算法将CPU分派给就绪队列中的一个进程。
一般的操作系统都必须有进程调度。
可见在多道系统中,作业调度与进程调度是相互配合来实现多道作业的并行执行的。
两者的关系可用下图表示。
思考题2:
1.5(注:
作业等待0.5小时,运行1小时,响应比=1+0.5/1=1.5)
思考题3:
A
【例5】考虑一个由8个页面,每页有1024个字节组成的逻辑空间,把它装入到有32个物理块的存储器中,问:
(1)逻辑地址需要多少二进制位表示?
(2)物理地址需要多少二进制位表示?
分析在分页存储管理中,逻辑地址结构如下图所示。
它由两个部分组成:
前一部分表示该地址所在页面的页号p;后一部分表示页内地址(页内位移)d。
页号的地址位数决定了页的多少,假设页号有20位,则地址空间中最多可容纳的页面数为220,即1MB个页面。
页内地址位数确定了每页的大小,若页内地址为12位,则每页大小为212,即2KB。
同理,物理地址中块号的地址位数决定了块的数量。
由于页式存储管理内存空间块的大小与页面大小相同,所以物理地址中块内地址与逻辑地址中的页内地址位数相同。
解因为页面数为8=23,故需要3位二进制数表示。
每页有1024个字节,1024=210,于是页内地址需要10位二进制数表示。
32个物理块,需要5位二进制数表示(32=25)。
(1)页的逻辑地址由页号和页内地址组成,所以需要3+10=13位二进制数表示。
(2)页的物理地址由块号和页内地址的拼接,所以需要5+10=15位二进制数表示。
【例6】若在一分页存储管理系统中,某作业的页表如下所示。
已知页面大小为1024字节,试将逻辑地址1011,2148,4000,5012转化为相应的物理地址。
"\000Bã"">页号
块号
<0
<1
<2
<3
<2
<3
<1
<6
分析页式存储管理的地址结构是一维的,即逻辑地址(或物理地址)只用一个数值即可表示。
若给定逻辑地址A,页面的大小为L,则页号p和页内地址d可按照下式求得:
p=int[A/L]d=AmodL
其中,int是取整函数(取数值的整数部分),mod是取余函数(取数值的余数部分)。
页表的作用是实现从页号到物理块号的地址映射。
以逻辑地址的页号检索页表,得到该页的物理块号;同时将页内地址d直接送入物理地址寄存器的块内地址字段中。
这样物理块号和块内地址拼接成了实际访问内存的地址,从而完成了从逻辑地址到物理地址的转换。
所以物理地址的计算公式为:
物理地址=块的大小(即页的大小L)´块号f+页内地址d
解:
本题中,为了描述方便,设页号为p,页内位移为d,则:
(1)对于逻辑地址1011,p=int(1011/1024)=0,d=1011mod1024=1011。
查页表第0页在第2块,所以物理地址为1024´2+1011=3059。
(2)对于逻辑地址2148,p=int(2148/1024)=2,d=2148mod1024=100。
查页表第2页在第1块,所以物理地址为1024+100=1124。
(3)对于逻辑地址4000,p=int(4000/1024)=3,d=4000mod1024=928。
查页表第3页在第6块,所以物理地址为1024´6+928=7072。
(4)对于逻辑地址5012,p=int(5012/1024)=4,d=5012mod1024=916。
因页号超过页表长度,该逻辑地址非法。
【例7】某虚拟存储器的用户编程空间共32个页面,每页为1KB,内存为16KB。
假定某时刻一用户页表中已调入内存的页面的页号和物理块号的对照表如下:
页号
物理块号
0
5
1
10
2
4
3
7
则逻辑地址0A5C(H)所对应的物理地址是什么?
分析在分页存储管理方式中,逻辑地址结构为:
如果给定的逻辑地址是A,页面大小为L,则页号p和页内地址d可按下式求得:
p=int[A/L]d=[A]modL其中,int表示取结果的整数部分,mod表示取结果的余数部分。
页号的位数表示地址空间中最多可容纳的页面个数,页内地址位数表示第页的大小,页表的作用是实现从页号到物理块号的地址映射。
在页式存储管理中,逻辑空间页的大小与主存地址空间中块的大小相同。
一般:
物理地址与页号、块号和页内地址之间存在如下关系
物理地址=块的大小(页的大小L)*块号+页内地址d
解:
页式存储管理的逻辑地址分为两部分:
页号和页内地址。
由已知条件“用户编程空间共32个页面”,可知页号部分占5位;由“每页为1KB”,1K=210,可知内页地址占10位。
由“内存为16KB”,可知有16块,块号为4位。
逻辑地址0A5C(H)所对应的二进制表示形式是:
000101001011100,根据上面的分析,下划线部分为页内地址,编码“00010”为页号,表示该逻辑地址对应的页号为2。
查页表,得到物理块号是4(十进制),即物理块地址为:
0100,拼接块内地址1001011100,得01001001011100,即125C(H)。
逻辑地址0A5C(H)所对应的物理地址是125C(H)。
【例8】某段表内容如下:
段号
段首地址
段长度
0
120K
40K
1
760K
30K
2
480K
20K
3
370K
20K
一逻辑地址为(2,154)的实际物理地址为多少?
答:
逻辑地址(2,154)表示段号为2,即段首地址为480K,154为单元号,则实际物理地址为480K+154。
【例9】下表给出了某系统中的空闲分区表,系统采用可变式分区存储管理策略。
现有以下作业序列:
96K、20K、200K。
若采用首次适应算法和最佳适应算法来处理这些作业序列,试问哪一种算法可以满足该作业的请求,为什么?
分区号
大小
起始地址
1
2
3
4
5
32K
10K
5K
218K
96K
100K
150K
200K
220K
530K
解:
空闲分区表如右图所示,
(1)首次适应算法:
96K的作业达到4区占用96K,剩余122K,20K的作业到达1区,占用20K,剩余12K,200K作业到达后无足够空间可用。
(2)最佳适应算法:
96K作业进入后到5区占用,20K作业进入后到达1区占用,200K作业进入后到达4区。
显然,最佳适应算法能满足要求。
关于PV操作
在计算机操作系统中,PV操作是进程管理中的难点。
首先应弄清PV操作的含义:
PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义如下:
P(S):
①将信号量S的值减1,即S=S-1;
②如果S³0,则该进程继续执行;否则该进程置为等待状态,排入等待队列。
V(S):
①将信号量S的值加1,即S=S+1;
②如果S>0,则该进程继续执行;否则释放队列中第一个等待信号量的进程。
V操作的意义:
我们用信号量及PV操作来实现进程的同步和互斥。
PV操作属于进程的低级通信。
什么是信号量?
信号量(semaphore)的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程。
信号量的值与相应资源的使用情况有关。
当它的值大于0时,表示当前可用资源的数量;当它的值小于0时,其绝对值表示等待使用该资源的进程个数。
注意,信号量的值仅能由PV操作来改变。
一般来说,信号量S³0时,S表示可用资源的数量。
执行一次P操作意味着请求分配一个单位资源,因此S的值减1;当S<0时,表示已经没有可用资源,请求者必须等待别的进程释放该类资源,它才能运行下去。
而执行一个V操作意味着释放一个单位资源,因此S的值加1;若S£0,表示有某些进程正在等待该资源,因此要唤醒一个等待状态的进程,使之运行下去。
利用信号量和PV操作实现进程互斥的一般模型是:
进程P1进程P2……进程Pn
………………
P(S);P(S);P(S);
临界区;临界区;临界区;
V(S);V(S);V(S);
……………………
其中信号量S用于互斥,初值为1。
使用PV操作实现进程互斥时应该注意的是:
(1)每个程序中用户实现互斥的P、V操作必须成对出现,先做P操作,进临界区,后做V操作,出临界区。
若有多个分支,要认真检查其成对性。
(2)P、V操作应分别紧靠临界区的头尾部,临界区的代码应尽可能短,不能有死循环。
(3)互斥信号量的初值一般为1。
利用信号量和PV操作实现进程同步
PV操作是典型的同步机制之一。
用一个信号量与一个消息联系起来,当信号量的值为0时,表示期望的消息尚未产生;当信号量的值非0时,表示期望的消息已经存在。
用PV操作实现进程同步时,调用P操作测试消息是否到达,调用V操作发送消息。
使用PV操作实现进程同步时应该注意的是:
(1)分析进程间的制约关系,确定信号量种类。
在保持进程间有正确的同步关系情况下,哪个进程先执行,哪些进程后执行,彼此间通过什么资源(信号量)进行协调,从而明确要设置哪些信号量。
(2)信号量的初值与相应资源的数量有关,也与P、V操作在程序代码中出现的位置有关。
(3)同一信号量的P、V操作要成对出现,但它们分别在不同的进程代码中。
【例10】生产者-消费者问题
在多道程序环境下,进程同步是一个十分重要又令人感兴趣的问题,而生产者-消费者问题是其中一个有代表性的进程同步问题。
下面我们给出了各种情况下的生产者-消费者问题,深入地分析和透彻地理解这个例子,对于全面解决操作系统内的同步、互斥问题将有很大帮助。
(1)一个生产者,一个消费者,公用一个缓冲区。
定义两个同步信号量:
empty——表示缓冲区是否为空,初值为1。
full——表示缓冲区中是否为满,初值为0。
生产者进程
while(TRUE){
生产一个产品;
P(empty);
产品送往Buffer;
V(full);
}
消费者进程
while(True){
P(full);
从Buffer取出一个产品;
V(empty);
消费该产品;
}
(2)一个生产者,一个消费者,公用n个环形缓冲区。
定义两个同步信号量:
empty——表示缓冲区是否为空,初值为n。
full——表示缓冲区中是否为满,初值为0。
设缓冲区的编号为1~n-1,定义两个指针in和out,分别是生产者进程和消费者进程使用的指针,指向下一个可用的缓冲区。
生产者进程
while(TRUE){
生产一个产品;
P(empty);
产品送往buffer(in);
in=(in+1)modn;
V(full);
}
消费者进程
while(TRUE){
P(full);
从buffer(out)中取出产品;
out=(out+1)modn;
V(empty);
消费该产品;
}
(3)一组生产者,一组消费者,公用n个环形缓冲区
在这个问题中,不仅生产者与消费者之间要同步,而且各个生产者之间、各个消费者之间还必须互斥地访问缓冲区。
定义四个信号量:
empty——表示缓冲区是否为空,初值为n。
full——表示缓冲区中是否为满,初值为0。
mutex1——生产者之间的互斥信号量,初值为1。
mutex2——消费者之间的互斥信号量,初值为1。
设缓冲区的编号为1~n-1,定义两个指针in和out,分别是生产者进程和消费者进程使用的指针,指向下一个可用的缓冲区。
生产者进程
while(TRUE){
生产一个产品;
P(empty);
P(mutex1);
产品送往buffer(in);
in=(in+1)modn;
V(mutex1);
V(full);
}
消费者进程
while(TRUE){
P(full);
P(mutex2);
从buffer(out)中取出产品;
out=(out+1)modn;
V(mutex2);
V(empty);
消费该产品;
}
需要注意的是无论在生产者进程中还是在消费者进程中,两个P操作的次序不能颠倒。
应先执行同步信号量的P操作,然后再执行互斥信号量的P操作,否则可能造成进程死锁。
【例11】桌上有一空盘,允许存放一只水果。
爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。
规定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发进程的同步。
分析在本题中,爸爸、儿子、女儿共用一个盘子,盘中一次只能放一个水果。
当盘子为空时,爸爸可将一个水果放入果盘中。
若放入果盘中的是桔子,则允许儿子吃,女儿必须等待;若放入果盘中的是苹果,则允许女儿吃,儿子必须等待。
本题实际上是生产者-消费者问题的一种变形。
这里,生产者放入缓冲区的产品有两类,消费者也有两类,每类消费者只消费其中固定的一类产品。
解:
在本题中,应设置三个信号量S、So、Sa,信号量S表示盘子是否为空,其初值为l;信号量So表示盘中是否有桔子,其初值为0;信号量Sa表示盘中是否有苹果,其初值为0。
同步描述如下:
intS=1;
intSa=0;
intSo=0;
main()
{
cobegin
father();/*父亲进程*/
son();/*儿子进程*/
daughter();/*女儿进程*/
coend
}
father()
{
while
(1)
{
P(S);
将水果放入盘中;
if(放入的是桔子)V(So);
elseV(Sa);
}
}
son()
{
while
(1)
{
P(So);
从盘中取出桔子;
V(S);
吃桔子;
}
}
daughter()
{
while
(1)
{
P(Sa);
从盘中取出苹果;
V(S);
吃苹果;
}
}
思考题:
四个进程A、B、C、D都要读一个共享文件F,系统允许多个进程同时读文件F。
但限制是进程A和进程C不能同时读文件F,进程B和进程D也不能同时读文件F。
为了使这四个进程并发执行时能按系统要求使用文件,现用PV操作进行管理,请回答下面的问题:
(1)应定义的信号量及初值:
。
(2)在下列的程序中填上适当的P、V操作,以保证它们能正确并发工作:
A()B()C()D()
{{{{
[1];[3];[5];[7];
readF;readF;readF;readF;
[2];[4];[6];[8];
}}}}
思考题解答:
(1)定义二个信号量S1、S2,初值均为1,即:
S1=1,S2=1。
其中进程A和C使用信号量S1,进程B和D使用信号量S2。
(2)从[1]到[8]分别为:
P(S1)V(S1)P(S2)V(S2)P(S1)V(S1)P(S2)V(S2)
【例12】有一个阅览室,共有100个座位,读者进入时必须先在一张登记表上登记,该表为每一座位列一表目,包括座号和读者姓名等,读者离开时要消掉登记的信息,试问:
(1)为描述读者的动作,应编写几个程序,设置几个进程?
(2)试用PV操作描述读者进程之间的同步关系。
答:
读者的动作有两个,一是填表进入阅览室,这时要考虑阅览室里是否有座位;一是读者阅读完毕,离开阅览室,这时的操作要考虑阅览室里是否有读者。
读者在阅览室读书时,由于没有引起资源的变动,不算动作变化。
算法的信号量有三个:
seats——表示阅览室是否有座位(初值为100,代表阅览室的空座位数);readers——表示阅览室里的读者数,初值为0;用于互斥的mutex,初值为1。
读者进入阅览室的动作描述getin:
while(TRUE){
P(seats);/*没有座位则离开*/
P(mutex)