浙大操作系统原理离线作业.docx
《浙大操作系统原理离线作业.docx》由会员分享,可在线阅读,更多相关《浙大操作系统原理离线作业.docx(27页珍藏版)》请在冰豆网上搜索。
浙大操作系统原理离线作业
浙江大学远程教育学院
《操作系统原理》课程作业
姓名:
王海清
学号:
7
年级:
14秋
学习中心:
厦门
—————————————————————————————
一、单选题
7进程P0和P1的共享变量定义及其初值为
booleanflag[2];
intturn=0;
flag[0]=FALSE;flag[1]=FALSE;
若进程P0和P1访问临界资源的类C代码实现如下:
voidP0()两个进程P1和P2描述如下:
shareddata:
intcounter=6;
P1:
Computing;
counter=counter+1;
P2:
Printing;
counter=counter-2;
两个进程并发执行,运行完成后,counter的值不可能为。
A.4B.5C.6D.7
【答案】C
3.某计算机采用二级页表的分页存储管理方式,按字节编址,页大小为210字节,页表项大小为2字节,逻辑地址结构为:
页目录号页号页内偏移量
逻辑地址空间大小为216页,则表示整个逻辑地址空间的页目录表中包含表项的个数至少是
A.64B.128C.256D.512
【答案】B
4.在动态分区系统中,有如下空闲块:
空闲块块大小(KB)块的基址
18060
275150
355250
490350
此时,某进程P请求50KB内存,系统从第1个空闲块开始查找,结果把第4个空闲块分配给了P进程,请问是用哪一种分区分配算法实现这一方案?
A.首次适应B.最佳适应C.最差适应D.下次适应
【答案】C
5.在一页式存储管理系统中,页表内容如下所示。
页号帧号
02
11
28
若页大小为1K,逻辑地址的页号为2,页内地址为451,转换成的物理地址为
(3)8643B.8192C.2048D.2499
【答案】A
6.采用段式存储管理的系统中,若地址用32位表示,其中20位表示段号,则允许每段的最大长度是
A.224B.212C.210D.232
【答案】B
7.在一段式存储管理系统中,某段表的内容如下:
段号段首址段长
0100K35K
1560K20K
2260K15K
3670K32K
若逻辑地址为(2,158),则它对应的物理地址为_____。
A.100K+158B.260K+158C.560K+158D.670K+158
【答案】B
8.一个分段存储管理系统中,地址长度为32位,其中段长占8位,则最大段长是
A.28字节B.216字节C.224字节D.232字节
【答案】C
9.有一请求分页式存储管理系统,页面大小为每页100字节,有一个50×50的整型数组按行为主序连续存放,每个整数占两个字节,将数组初始化为0的程序描述如下:
intA[50][50];
for(inti=0;i<50;i++)
for(intj=0;j<50;j++)
A[i,j]=0;
若在程执行时内存只有一个存储块用来存放数组信息,试问该程序执行时产生次缺页中断。
A.1B.50C.100D.2500
【答案】B
10.一台计算机有4个页框,装入时间、上次引用时间、和每个页的访问位R和修改位M,如下所示:
页装入时间上次引用时间RM
012627900
123026010
212027211
316028011
采用FIFO算法将淘汰页;
A.0B.1C.2D.3
【答案】C
11.一台计算机有4个页框,装入时间、上次引用时间、和每个页的访问位R和修改位M,如下所示:
页装入时间上次引用时间RM
012627900
123026010
212027211
316028011
采用NRU算法将淘汰页;
A.0B.1C.2D.3
【答案】A
12.一台计算机有4个页框,装入时间、上次引用时间、和每个页的访问位R和修改位M,如下所示:
页装入时间上次引用时间RM
012627900
123026010
212027211
316028011
采用LRU算法将淘汰页;
A.0B.1C.2D.3
【答案】B
13.一台计算机有4个页框,装入时间、上次引用时间、和每个页的访问位R和修改位M,如下所示:
页装入时间上次引用时间RM
012627900
123026010
212027211
316028011
采用第二次机会算法将淘汰______页;
A.0B.1C.2D.3
【答案】A
二、综合题
在所列的两种设置中,哪些功能需要操作系统提供支持?
(a)手持设备(b)实时系统。
a.批处理程序
b.虚拟存储器
c.分时
对于实时系统来说,操作系统需要以一种公平的方式支持虚拟存储器和分时系统。
对于手持系统,操作系统需要提供虚拟存储器,但是不需要提供分时系统。
批处理程序在两种环境中都是非必需的。
列出下列操作系统的基本特点:
a.批处理b.交互式c.分时d.实时e.网络f.并行式g.分布式h.集群式i.手持式
b.a.批处理:
具有相似需求的作业被成批的集合起来,并把它们作为一个整体通过一个操作员或自动作业程序装置运行通过计算机。
通过缓冲区,线下操作,后台和多道程序,运用尝试保持CPU和I/O一直繁忙,从而使得性能被提高。
批处理系统对于运行那些需要较少互动的大型作业十分适用。
它们可以被更迟地提交或获得。
c.b.交互式:
这种系统由许多短期交易构成,并且下一个交易的结果是无法预知的。
从用户提交到等待结果的响应时间应该是比较短的,通常为1秒左右。
d.c.分时:
这种系统使用CPU调度和多道程序来经济的提供一个系统的人机通信功能。
CPU从一个用户快速切换到另一个用户。
以每个程序从终端机中读取它的下一个控制卡,并且把输出的信息正确快速的输出到显示器上来替代用soopledcardimages定义的作业。
e.d.实时:
经常用于专门的用途。
这个系统从感应器上读取数据,而且必须在严格的时间内做出响应以保证正确的性能。
f.e.网络:
提供给操作系统一个特征,使得其进入网络,比如;文件共享。
g.f.并行式:
每一个处理器都运行同一个操作系统的拷贝。
这些拷贝通过系统总线进行通信。
h.g.分布式:
这种系统在几个物理处理器中分布式计算,处理器不共享内存或时钟。
每个处理器都有它各自的本地存储器。
它们通过各种通信线路在进行通信,比如:
一条高速的总线或一个本地的网络。
i.h.集群式:
集群系统是由多个计算机耦合成单一系统并分布于整个集群来完成计算任务。
j.i.手持式:
一种可以完成像记事本,email和网页浏览等简单任务的小型计算机系统。
手持系统与传统的台式机的区别是更小的内存和屏幕以及更慢的处理能力。
讨论向操作系统传递参数的三个主要的方法。
1.通过寄存器来传递参数
2.寄存器传递参数块的首地址
3.参数通过程序存放或压进堆栈中,并通过操作系统弹出堆栈。
采用微内核方法来设计系统的主要优点是什么?
在微内核中如何使客户程序和系统服务相互作用?
微内核方法的缺点是什么?
a)增加一个新的服务不需要修改内核
b)在用户模式中比在内核模式中更安全、更易操作
c)一个简单的内核设计和功能一般导致一个更可靠的操作系统
用户程序和系统服务通过使用进程件的通信机制在微内核中相互作用,例如发送消息。
这些消息由操作系统运送。
微内核最主要的缺点是与进程间通信的过度联系和为了保证用户程序和系统服务相互作用而频繁使用操作系统的消息传递功能。
问:
描述一下内核在两个进程间进行上下文功换的动作.
总的来说,操作系统必须保存正在运行的进程的状态,恢复进程的状态。
保存进程的状态主要包括CPU寄存器的值以及内存分配,上下文切换还必须执行一些确切体系结构的操作,包括刷新数据和指令缓存。
(书中答案)进程关联是由进程的PCB来表示的,它包括CPU寄存器的值和内存管理信息等。
当发生上下文切换时,内核会将旧进程的关联状态保存在其PCB中,然后装入经调度要执行的新进程的已保存的关联状态。
如下所示的程序,说明LINEA可能会输出什么?
#include<>
#include<>
#include
intvalue=8;
intmain()
{
pid_tpid;
/*forkachildprocess*/
pid=fork();
if(pid==0){/*childprocess*/
value+=15;
}
else{/*parentprocess*/
/*parentwillwaitforthechildtocomplete*/
wait(NULL);
printf("Parent:
value=%d\n",value);/*LINEA*/
exit(0);
}
}
Parent:
value=8。
在多线程程序中,以下哪些程序状态组成是被线程共享的?
a.寄存值
b.堆内存
c.全局变量
d.栈内存
一个线程程序的线程共享堆内存和全局变量,但每个线程都有属于自己的一组寄存值和栈内存。
由图给出的程序使用了Pthread的应用程序编程接口(API),在程序的第c行和第p行分别会输出什么?
#include<>
#include<>
intvalue=0;
void*runner(void*param);/*thethread*/
intmain(intargc,char*argv[])
{
intpid;
pthread_ttid;
pthread_attr_tattr;
pid=fork();
if(pid==0){/*childprocess*/
pthread_attr_init(&attr);
pthread_create(&tid,&attr,runner,NULL);
pthread_join(tid,NULL);
printf(“CHILD:
value=%d”,value);/*LINEC*/
}
elseif(pid>0){/*parentprocess*/
wait(NULL);
printf(“PARENT:
value=%d”,value);/*LINEP*/
}
}
void*runner(void*param){
value=10;
pthread_exit(0);
}
答:
c行会输出10,p行会输出0.
考虑下列进程集,进程占用的CPU区间长度以毫秒来计算:
进程区间时间优先级
P1103
P211
P323
P414
P552
假设在时刻0以进程P1,P2,P3,P4,P5的顺序到达。
a.画出4个Gantt图分别演示用FCFS、SJF、非抢占优先级(数字小代表优先级高)和RR(时间片=1)算法调度时进程的执行过程。
b.a.甘特图
c.FCFS
P1
P2
P3
P4
P5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
d.
e.SJF
P2
P4
P3
P5
P1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
f.
g.Non-preemptivePriority
P2
P5
P1
P3
P4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
h.
i.RR(quantum=1)
P1
P2
P3
P4
P5
P1
P3
P5
P1
P5
P1
P5
P1
P5
P1
P1
P1
P1
P1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
j.
b.每个进程在每种调度算法下的周转时间是多少?
TurnaroundTime
Process
FCFS
SJF
NPP
RR(quantum=1)
P1
10
19
16
19
P2
11
1
1
2
P3
13
4
18
7
P4
14
2
19
4
P5
19
9
6
14
Average
12
c.每个进程在每种调度算法下的等待时间是多少?
Process
FCFS
SJF
NPP
RR(quantum=1)
P1
0
9
6
9
P2
10
0
0
1
P3
11
2
16
5
P4
13
1
18
3
P5
14
4
1
9
Average
d.哪一种调度算法的平均等待时间对所有进程而言最小?
SJF
下面哪些算法会引起饥饿
a.先来先服务
b.最短作业优先调度
c.轮转法调度
d.优先级调度
最短作业优先调度和优先级调度算法会引起饥饿
考虑一个运行10个I/O约束(型)任务和一个CPU约束(型)任务的系统。
假设,I/O约束任务每进行1毫秒的CPU计算发射一次I/O操作,但每个I/O操作的完成需要10毫秒。
同时,假设上下文切换要毫秒,所有的进程都是长进程。
对一个RR调度来说,以下情况时CPU的利用率是多少:
a.时间片是1毫秒
b.时间片是10毫秒
答:
a.时间片是1毫秒:
不论是哪个进程被调度,这个调度都会为每一次的上下文切换花费一个毫秒的上下文切换。
CPU的利用率是1/*100=92%。
b.时间片是10毫秒:
这I/O限制任务会在使用完1毫秒时间片后进行一次上下文切换。
这个时间片要求在所有的进程间都走一遍,因此,10*+(因为每个I/O限定任务执行为1毫秒,然后承担上下文切换的任务,而CPU限制任务的执行10毫秒在承担一个上下文切换之前)。
因此,CPU的利用率是20、*100=94%。
在生产者和消费者问题中,信号量mutex,empty,full的作用是什么?
如果对调生产者进程中的两个wait操作和两个signal操作,则可能发生什么情况?
信号量mutex的作用是保证各生产者进程和消费者进程对缓冲池的互斥访问。
信号量empty和full均是资源信号量,它们分别对应于缓冲池中的空闲缓冲区和缓冲池中的产品,生产者需要通过wait(empty)来申请使用空闲缓冲区,而消费者需要通过wait(full)才能取得缓冲中的产品,可见,这两个信号量起着同步生产者和消费者的作用,它们保证生产者不会将产品存放到满缓冲区中,而消费者不会从空缓冲区中取产品。
在生产者—消费者问题中,如果将两个wait操作,即wait(full)和wait(mutex)互换位置,或者wait(empty)和wait(mutex)互换位置,都可能引起死锁。
考虑系统中缓冲区全满时,若一生产者进程先执行了wait(mutex)操作并获得成功,当再执行wait(empty)操作时,它将因失败而进入阻塞状态,它期待消费者执行signal(empty)来唤醒自己,在此之前,它不可能执行signal(mutex)操作,从而使企图通过wait(mutex)进入自己的临界区的其他生产者和所有的消费者进程全部进入阻塞状态,系统进入死锁状态。
类似地,消费者进程若先执行wait(mutex),后执行wait(full)同样可能造成死锁。
signal(full)和signal(mutex)互换位置,或者signal(empty)和signal(mutex)互换位置,则不会引起死锁,其影响只是使某个临界资源的释放略为推迟一些。
一组合作进程,执行顺序如下图。
请用wait、signal操作实现进程间的同步操作。
合作进程的前趋图
h
g
f
e
d
c
b
a
P1
P4
P5
P6
P3
P2
如图示并发进程之间的前趋关系,为了使上述进程同步,可设置8个信号量a、b、c、d、e、f、g、h,它们的初值均为0,而相应的进程可描述为(其中“…”表示进程原来的代码):
main()
cobegin{
P1(){…;signal(a);signal(b);}
P2(){wait(a);…;signal(c);signal(d);}
P3(){wait(b);…;signal(e);signal(f);}
P4(){wait(c);wait(e);…;signal(g);}
P5(){wait(d);wait(f);…;signal(h);}
P6(){wait(g);wait(h);…;}
}coend
在生产者和消费者问题中,多个生产者进程(ProducerProcess)和多个消费者进程(ConsumerProcess)共享一个大小为8的缓冲区,他们的信号量和共享变量设置如下:
intnextc=0,nextp=0,buf[8];
semaphorefull;empty;mutex;
生产者进程和消费者进程问题的算法描述如下:
ProducerProcess:
ConsumerProcess:
intitemp;intitemc;
while
(1){while
(1){
1itemp=rand();
外部碎片
b.内部碎片
c.共享跨进程代码的能力
连续内存分配会产生外部碎片,因为地址空间是被连续分配的,当旧进程结束,新进程初始化的时候,洞会扩大。
连续内存分配也不允许进程共享代码,因为一个进程的虚拟内存段是不被允许闯入不连续的段的。
纯段式分配也会产生外部碎片,因为在物理内存中,一个进程的段是被连续放置的,以及当死进程的段被新进程的段所替代时,碎片也将会产生。
然而,段式分配可以使进程共享代码;比如,两个不同的进程可以共享一个代码段,但是有不同的数据段。
纯页式分配不会产生外部碎片,但会产生内部碎片。
进程可以在页granularity中被分配,以及如果一页没有被完全利用,它就会产生内部碎片并且会产生一个相当的空间浪费。
在页granularity,页式分配也允许进程共享代码。
考虑一个分页式存储管理系统,其页表常驻内存。
(1)如果内存访问耗时200ns,那么,访问内存中的数据需要多长时间?
(2)如果引入联想寄存器,而且75%的页面可以从关联寄存器中找到,那么,此时的有效访问时间为多少?
(假设访问关联寄存器的时间可以忽略)
(1)400纳秒,其中,200纳秒访问页表,200纳秒访问内存中的数据。
(2)有效访问时间=*(200纳秒访问内存数据+0纳秒访问关联寄存器)+*(200纳秒访问内存数据+200纳秒访问页表)=250纳秒
假设有下列段表:
段基地址段长度
0219600
1230014
290100
31327580
4195296
下列逻辑地址对应的物理地址是什么?
(1)0,430
(2)1,10
(3)2,500
(4)3,400
(5)4,112
(1)219+430=649
(2)2300+10=2310
(3)第2段的有效长度是100。
段内偏移量500超过了这个上限,所以这是个非法地址
(4)1327+400=1727
(3)第4段的有效长度是96。
段内偏移量112超过了这个上限,所以这是个非法地址
假设一个“按需调页”虚拟存储空间,页表由寄存器保存。
在存在空闲页帧的条件下,处理一次缺页的时间是8毫秒。
如果没有空闲页面,但待换出页面并未更改,处理一次缺页的时间也是8毫秒。
如果待换出页面已被更改,则需要20毫秒。
访问一次内存的时间是100纳秒。
假设70%的待换出页面已被更改,请问缺页率不超过多少,才能保证有效访问时间小于或等于200纳秒?
设缺页率为P。
题目并没有明确,当缺页中断时,内存中是否有空闲页帧,所以假设内存总是忙的。
访问内存中页面:
(1-P)*100ns
页面不在内存,但不需要保存待换出页面:
P*(1–70%)*(8ms+100ns)
页面不在内存,但需要保存待换出页面:
P*70%*(20ms+100ns)
所以,有效访问时间=(1-P)*100ns+P*(1–70%)*(8ms+100ns)+P*70%*(20ms+100ns)=200ns
P=
对一个请求调页系统测得如下数据:
●CPU利用率20%
●用作页面交换的磁盘的利用率%
●其它I/O设备利用率5%
下列措施中,哪些会改善CPU利用率(如果有的话),请说明理由:
(1)安装一个更快的CPU
(2)安装一个更大容量的磁盘用作页面交换
(3)增加并发进程数
(4)减少并发进程数
(5)安装更多内存
(6)安装更快的硬盘,或安装更多的硬盘和控制器
(7)增加一个预取页面算法
(8)增加页面长度
首先判断系统正在频繁地进行换页操作。
所以,减少并发进程数会显著地减少换页操作,提高CPU的利用率。
其它措施也有些效果,例如,安装更多内存。
k.安装一个更快的CPU。
没用。
l.安装一个更大容量的磁盘用作页面交换。
没用,交换空间本来就足够了。
m.增加并发进程数。
没用,情况将会更糟。
n.减少并发进程数。
效果明显。
o.安装更多内存。
可能会有效果,因为空闲页帧增加了,换页的几率将相对减少。
p.安装更快的硬盘,或安装更多的硬盘和控制器。
效果不明显。
q.增加一个预取页面算法。
效果不确定。
增加页面长度。
如果顺序访问居多,则会减少缺