《浙大远程操作系统原理离线作业(共20页).doc》由会员分享,可在线阅读,更多相关《浙大远程操作系统原理离线作业(共20页).doc(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上浙江大学远程教育学院操作系统原理课程作业姓名:学 号:年级:学习中心:一、单选题7 进程P0和P1的共享变量定义及其初值为boolean flag2;int turn=0;flag0=FALSE;flag1=FALSE; 若进程P0和P1访问临界资源的类C代码实现如下:void P0() /P0进程 while(TURE)flag0=TRUE; turn = 1;while (flag1 & turn = 1) ; 临界区; flag0 = FALSE; void P1() /P1进程 while(TURE)flag1=TRUE; turn = 0;while (fl
2、ag0 & turn = 0) ; 临界区; flag1 = FALSE; 则并发执行进程P0和P1时产生的情况是:A不能保证进程互斥进入临界区、会出现“饥饿”现象B不能保证进程互斥进入临界区、不会出现“饥饿”现象C能保证进程互斥进入临界区、会出现“饥饿”现象D能保证进程互斥进入临界区、不会出现“饥饿”现象【答案】D2.有两个进程P1和P2描述如下:shared data:int counter = 6; P1 :Computing;counter=counter+1;P2 :Printing;counter=counter-2;两个进程并发执行,运行完成后,counter的值不可能为 。 A
3、. 4B. 5C. 6D. 7【答案】C3.某计算机采用二级页表的分页存储管理方式,按字节编址,页大小为210字节,页表项大小为2字节,逻辑地址结构为:页目录号页号页内偏移量逻辑地址空间大小为216页,则表示整个逻辑地址空间的页目录表中包含表项的个数至少是A64B128C256D512【答案】B4.在动态分区系统中,有如下空闲块:空闲块块大小(KB)块的基址18060275150355250490350此时,某进程P请求50KB内存,系统从第1个空闲块开始查找,结果把第4个空闲块分配给了P进程 ,请问是用哪一种分区分配算法实现这一方案?A. 首次适应B. 最佳适应C. 最差适应 D. 下次适应
4、【答案】C5.在一页式存储管理系统中,页表内容如下所示。页号帧号021128若页大小为1K,逻辑地址的页号为2,页内地址为451,转换成的物理地址为(3) 8643B. 8192C. 2048D. 2499【答案】A6.采用段式存储管理的系统中,若地址用32位表示,其中20位表示段号,则允许每段的最大长度是A 224B. 212C. 210D. 232【答案】B7.在一段式存储管理系统中,某段表的内容如下: 段号段首址 段长0100K35K1560K20K2260K15K3670K32K若逻辑地址为(2, 158),则它对应的物理地址为_。A. 100K+158 B. 260K+158 C.
5、560K+158 D. 670K+158【答案】B8.一个分段存储管理系统中,地址长度为32位,其中段长占8位,则最大段长是A. 28字节B. 216字节C. 224字节 D. 232字节【答案】C9.有一请求分页式存储管理系统,页面大小为每页100字节,有一个5050的整型数组按行为主序连续存放,每个整数占两个字节,将数组初始化为0的程序描述如下:int A5050;for (int i = 0; i 50; i+) for (int j = 0; j 50; j+)Ai,j = 0; 若在程执行时内存只有一个存储块用来存放数组信息,试问该程序执行时产生 次缺页中断。A1 B. 50 C.
6、100 D. 2500【答案】B 10.一台计算机有4个页框,装入时间、上次引用时间、和每个页的访问位R和修改位M,如下所示: 页 装入时间 上次引用时间 R M 0 126 279 0 0 1 230 260 1 0 2 120 272 1 1 3 160 280 1 1采用FIFO算法将淘汰 页;A. 0B. 1C. 2D. 3【答案】C11.一台计算机有4个页框,装入时间、上次引用时间、和每个页的访问位R和修改位M,如下所示: 页 装入时间 上次引用时间 R M 0 126 279 0 0 1 230 260 1 0 2 120 272 1 1 3 160 280 1 1采用NRU算法将
7、淘汰 页;A. 0B. 1C. 2D. 3【答案】A12.一台计算机有4个页框,装入时间、上次引用时间、和每个页的访问位R和修改位M,如下所示: 页 装入时间 上次引用时间 R M 0 126 279 0 0 1 230 260 1 0 2 120 272 1 1 3 160 280 1 1采用LRU算法将淘汰 页;A. 0B. 1C. 2D. 3【答案】B 13.一台计算机有4个页框,装入时间、上次引用时间、和每个页的访问位R和修改位M,如下所示: 页 装入时间 上次引用时间 R M 0 126 279 0 0 1 230 260 1 0 2 120 272 1 1 3 160 280 1
8、1 采用第二次机会算法将淘汰_页;A. 0B. 1C. 2D. 3【答案】A二、综合题1.4在所列的两种设置中,哪些功能需要操作系统提供支持? (a)手持设备(b)实时系统。 a. 批处理程序b. 虚拟存储器c. 分时1.4对于实时系统来说,操作系统需要以一种公平的方式支持虚拟存储器和分时系统。对于手持系统,操作系统需要提供虚拟存储器,但是不需要提供分时系统。批处理程序在两种环境中都是非必需的。1.17列出下列操作系统的基本特点:a. 批处理b.交互式c.分时d.实时e.网络f.并行式g.分布式h.集群式i.手持式b. a.批处理:具有相似需求的作业被成批的集合起来,并把它们作为一个整体通过一
9、个操作员或自动作业程序装置运行通过计算机。通过缓冲区,线下操作,后台和多道程序,运用尝试保持CPU和I/O一直繁忙,从而使得性能被提高。批处理系统对于运行那些需要较少互动的大型作业十分适用。它们可以被更迟地提交或获得。c. b.交互式:这种系统由许多短期交易构成,并且下一个交易的结果是无法预知的。从用户提交到等待结果的响应时间应该是比较短的,通常为1秒左右。d. c.分时:这种系统使用CPU调度和多道程序来经济的提供一个系统的人机通信功能。CPU从一个用户快速切换到另一个用户。以每个程序从终端机中读取它的下一个控制卡,并且把输出的信息正确快速的输出到显示器上来替代用soopled card i
10、mages定义的作业。e. d.实时:经常用于专门的用途。这个系统从感应器上读取数据,而且必须在严格的时间内做出响应以保证正确的性能。f. e.网络:提供给操作系统一个特征,使得其进入网络,比如;文件共享。g. f.并行式:每一个处理器都运行同一个操作系统的拷贝。这些拷贝通过系统总线进行通信。h. g.分布式:这种系统在几个物理处理器中分布式计算,处理器不共享内存或时钟。每个处理器都有它各自的本地存储器。它们通过各种通信线路在进行通信,比如:一条高速的总线或一个本地的网络。i. h.集群式:集群系统是由多个计算机耦合成单一系统并分布于整个集群来完成计算任务。j. i.手持式:一种可以完成像记事
11、本,email和网页浏览等简单任务的小型计算机系统。手持系统与传统的台式机的区别是更小的内存和屏幕以及更慢的处理能力。2.3讨论向操作系统传递参数的三个主要的方法。1.通过寄存器来传递参数 2.寄存器传递参数块的首地址 3.参数通过程序存放或压进堆栈中,并通过操作系统弹出堆栈。2.12采用微内核方法来设计系统的主要优点是什么?在微内核中如何使客户程序和系统服务相互作用?微内核方法的缺点是什么?a)增加一个新的服务不需要修改内核 b) 在用户模式中比在内核模式中更安全、更易操作 c) 一个简单的内核设计和功能一般导致一个更可靠的操作系统 用户程序和系统服务通过使用进程件的通信机制在微内核中相互作
12、用,例如发送消息。这些消息由操作系统运送。微内核最主要的缺点是与进程间通信的过度联系和为了保证用户程序和系统服务相互作用而频繁使用操作系统的消息传递功能。3.2 问:描述一下内核在两个进程间进行上下文功换的动作.总的来说,操作系统必须保存正在运行的进程的状态,恢复进程的状态。保存进程的状态主要包括CPU寄存器的值以及内存分配,上下文切换还必须执行一些确切体系结构的操作,包括刷新数据和指令缓存。(书中答案)进程关联是由进程的PCB来表示的,它包括CPU寄存器的值和内存管理信息等。当发生上下文切换时,内核会将旧进程的关联状态保存在其PCB中,然后装入经调度要执行的新进程的已保存的关联状态。3.4
13、如下所示的程序,说明LINE A可能会输出什么?#include #include #include int value=8;int main()pid_t pid;/* fork a child process */pid = fork();if (pid = 0) /* child process */value +=15;else /* parent process */* parent will wait for the child to complete */wait(NULL);printf( Parent :value= %dn,value);/*LINE A*/exit(0);
14、Parent :value=8。4.4在多线程程序中,以下哪些程序状态组成是被线程共享的? a.寄存值 b.堆内存 c.全局变量 d.栈内存 一个线程程序的线程共享堆内存和全局变量,但每个线程都有属于自己的一组寄存值和栈内存。4.7由图4.11给出的程序使用了Pthread的应用程序编程接口(API),在程序的第c行和第p行分别会输出什么?#include #include int value=0;void *runner(void *param); /* the thread */int main(int argc, char *argv)int pid;pthread_t tid;pthr
15、ead_attr_t attr; pid = fork(); if (pid = 0) /* child process */ pthread_attr_init(&attr); pthread_create(&tid, &attr, runner, NULL); pthread_join(tid, NULL); printf(“CHILD: value = %d”, value); /* LINE C*/ else if (pid 0) /* parent process */ wait(NULL); printf(“PARENT: value = %d”, value); /* LINE
16、P */ void *runner(void *param) value=10; pthread_exit(0);答:c行会输出10,p行会输出0.5.4考虑下列进程集,进程占用的CPU区间长度以毫秒来计算:进程 区间时间 优先级P1 10 3P2 1 1P3 2 3P4 1 4P5 5 2假设在时刻0以进程P1,P2,P3,P4,P5的顺序到达。a. 画出4个Gantt图分别演示用FCFS、SJF、非抢占优先级(数字小代表优先级高)和RR(时间片1)算法调度时进程的执行过程。b. a.甘特图c. FCFSP1P2P3P4P512345678910111213141516171819d.e.
17、SJFP2P4P3P5P112345678910111213141516171819f.g. Non-preemptive PriorityP2P5P1P3P412345678910111213141516171819h.i. RR(quantum=1)P1P2P3P4P5P1P3P5P1P5P1P5P1P5P1P1P1P1P112345678910111213141516171819j.b.每个进程在每种调度算法下的周转时间是多少?Turnaround TimeProcessFCFSSJFNPPRR(quantum=1)P110191619P211112P3134187P4142194P51
18、99614Average13.47.2129.2c.每个进程在每种调度算法下的等待时间是多少?ProcessFCFSSJFNPPRR(quantum=1)P10969P210001P3112165P4131183P514419Average9.63.28.25.4d.哪一种调度算法的平均等待时间对所有进程而言最小?SJF5.5下面哪些算法会引起饥饿a.先来先服务b.最短作业优先调度c.轮转法调度d.优先级调度 最短作业优先调度和优先级调度算法会引起饥饿5.7考虑一个运行10个I/O约束(型)任务和一个CPU约束(型)任务的系统。假设,I/O约束任务每进行1毫秒的CPU计算发射一次I/O操作,但
19、每个I/O操作的完成需要 10毫秒。同时,假设上下文切换要0.1毫秒,所有的进程都是长进程。对一个RR调度来说,以下情况时CPU的利用率是多少: a.时间片是1毫秒 b.时间片是10毫秒答:a.时间片是1毫秒:不论是哪个进程被调度,这个调度都会为每一次的上下文切换花费一个0.1毫秒的上下文切换。CPU的利用率是1/1.1*100=92%。b.时间片是10毫秒:这I/O限制任务会在使用完1毫秒时间片后进行一次上下文切换。这个时间片要求在所有的进程间都走一遍,因此,10*1.1+10.1(因为每个I / O限定任务执行为1毫秒,然后承担上下文切换的任务,而CPU限制任务的执行10毫秒在承担一个上下
20、文切换之前) 。因此,CPU的利用率是20、21.1*100=94%。6.01在生产者和消费者问题中,信号量mutex,empty,full的作用是什么?如果对调生产者进程中的两个wait操作和两个signal操作,则可能发生什么情况?信号量mutex的作用是保证各生产者进程和消费者进程对缓冲池的互斥访问。信号量empty和full均是资源信号量,它们分别对应于缓冲池中的空闲缓冲区和缓冲池中的产品,生产者需要通过wait(empty)来申请使用空闲缓冲区,而消费者需要通过wait(full)才能取得缓冲中的产品,可见,这两个信号量起着同步生产者和消费者的作用,它们保证生产者不会将产品存放到满缓
21、冲区中,而消费者不会从空缓冲区中取产品。在生产者消费者问题中,如果将两个wait操作,即wait(full)和wait(mutex)互换位置,或者wait(empty)和wait(mutex)互换位置,都可能引起死锁。考虑系统中缓冲区全满时,若一生产者进程先执行了wait(mutex)操作并获得成功,当再执行wait(empty)操作时,它将因失败而进入阻塞状态,它期待消费者执行signal(empty)来唤醒自己,在此之前,它不可能执行signal(mutex)操作,从而使企图通过wait(mutex)进入自己的临界区的其他生产者和所有的消费者进程全部进入阻塞状态,系统进入死锁状态。类似地,
22、消费者进程若先执行wait(mutex),后执行wait(full)同样可能造成死锁。signal(full)和signal(mutex)互换位置,或者signal(empty)和signal(mutex)互换位置,则不会引起死锁,其影响只是使某个临界资源的释放略为推迟一些。6.02 一组合作进程,执行顺序如下图。请用wait、signal操作实现进程间的同步操作。 各进程的执行顺序P6P5P2P1P3P4合作进程的前趋图hgfedcbaP1P4P5P6P3P2如图示并发进程之间的前趋关系,为了使上述进程同步,可设置8个信号量a、b、c、d、e、f、g、h,它们的初值均为0,而相应的进程可描述
23、为(其中“”表示进程原来的代码):main( )cobeginP1( ) ; 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); ; coend6.03在生产者和消费者问题中,多个生产者进程(Producer Process)和多个消费者进程(Consum
24、er Process)共享一个大小为8的缓冲区,他们的信号量和共享变量设置如下:int nextc=0, nextp=0, buf8;semaphore full; empty; mutex;生产者进程和消费者进程问题的算法描述如下:Producer Process: Consumer Process:int itemp; int itemc;while(1) while(1)1 itemp = rand(); / Generate a number 1 wait(full);2 wait(empty); 2 wait(mutex);3 wait(mutex); 3 itemc=bufnext
25、c;4 bufnextp=itemp; 4 nextc=(nextc+1)%8;5 nextp=(nextp+1)%8;5 signal(mutex);6 signal(mutex); 6 signal(empty);7 signal(full); 7 cout itemc endl; (1) 生产者进程和消费者进程的临界区是哪些?生产者进程的临界区是第4行和第5行;消费者进程的临界区是第3行和第4行。(2) 信号量full、empty和mutex的初值是多少?empty = 8 , full = 0 , mutex = 1 。(3)如果对调生产者进程中的两个P操作即第2行和第3行,以及对调消
26、费者进程中的两个P操作即第1行和第2行,如下所示。可能发生什么情况?Producer Process Consumer Process1 itemp = rand(); / Generate a number 1 wait(mutex);2 wait(mutex); 2 wait(full);3 wait(empty); 3 itemc=bufnextc;系统可能会产生死锁。例如,生产者进程得到信号量mutex,但是没有空缓冲区即empty0时,此时生产者进程阻塞;而消费者进程又无法得到信号量mutex,此时消费者进程也阻塞,系统产生了死锁。(4)上面的生产者和消费者同步算法有一个缺点,在有空
27、缓冲区时,当消费者进程正在临界区时,生产者进程必须等待,反之亦然。您如何可以解决这个问题,以提高生产者和消费者进程之间并发?写出新的生产者进程和消费者进程的同步算法。增加一个信号量mutex1,初值为1,其算法如下:Producer Process Consumer Processint itemp;int itemc;while(1) while(1)1 itemp = rand(); / Generate a number 1 wait(full);2 wait(empty); 2 wait(mutex);3 wait(mutex1); 3 itemc=bufnextc;4 bufnext
28、p=itemp; 4 nextc=(nextc+1)%8;5 nextp=(nextp+1)%8; 5 signal(mutex);6 signal(mutex1); 6 signal(empty);7 signal(full); 7 cout itemc endl; 6.04有2个合作的进程P1、P2 。他们从一台输入设备读入数据, P1进程读入数据a,P2进程读入数据b。输入设备是一台独享设备 。两个进程做如下计算:P1: x = a + bP2: y = a * b计算完成后结果的x、y由进程P1输出。用信号量实现P1、P2同步算法。输出设备P2P1Input(a)输入设备Input(b
29、)设置三个信号:s1表示数据a是否读入,s2表示数据b是否读入,s3表示数据y=a*b计算是否完成。P1和P2两个进程的同步算法如下:semaphore s1=0, s2=0, s3=0;main()cobeginP1: P2: input (a); wait(s1); signal(s1); input (b); wait(s2); signal(s2);x=a+b; y=a*b;wait(s3); signal(s3);Print (x,y,z); coend7.1 假设有如下图所示的交通死锁情况: (1) 说明产生死锁的4个必要条件在此处成立。(2) 给出一个避免死锁的简单规则。 7.1
30、1设有一系统在某时刻的资源分配情况如下:进程号已分配资源 最大请求资源剩余资源 A B C D A B C D A B C D P0 0 0 1 2 0 0 1 2 1 5 2 0 P1 1 0 0 0 1 7 5 0 P2 1 3 5 4 2 3 5 6 P3 0 6 3 2 0 6 5 2 P4 0 0 1 4 0 6 5 6 请问:(1) 系统中各进程尚需资源数各是多少?(2)当前系统安全吗?(4) 如果此时进程P1提出资源请求(0,4,2,0),系统能分配给它吗?(1)尚需资源数矩阵如下:Need = Max AllocationNeedABCDP00000P10750P21002P3
31、0020P40642(2)系统是安全的,因为可以找到一个安全序列:(3)如P1申请(0,4,2,0),则:Request1(0,4,2,0) =need1(0,7,5,0)Request1(0,4,2,0) = available(1,5,2,0)新的状态为 Allocation Max Need Available P0 0 0 1 2 0 0 1 2 0 0 0 0 1 1 0 0 P1 1 4 2 0 1 7 5 0 0 3 3 0 P2 1 3 5 4 2 3 5 6 1 0 0 2 P3 0 6 3 2 0 6 5 2 0 0 2 0 P4 0 0 1 4 0 6 5 6 0 6 4
32、 2该状态是安全的,存在安全序列如,所以可以分配资源给P1。8.3某系统有五个固定分区,其长度依次为100K, 500K, 200K, 300K, 600K。今有四个进程,对内存的需求分别是212K, 417K, 112K, 426K。当分别用First-fit, Best-fit, Worst-fit算法响应这四个进程的内存申请时,请分别给出系统的内存分配动态。哪种算法最有效?根据First-fit、Best-fit、Worst-fit算法,计算结果如下:First-fit:212K进程装到500K分区417K进程装到600K分区112K进程装到200K分区426K进程暂时等待Best-fi
33、t:212K进程装到300K分区417K进程装到500K分区112K进程装到200K分区426K进程装到600K分区Worst-fit:212K进程装到600K分区417K进程装到500K分区112K进程装到300K分区426K进程暂时等待仅就本题为例,Best-fit算法是最好的。8.5 对下列问题,试比较连续内存分配方案、纯段式分配方案、纯页式分配方案中的内存组织方法:a. 外部碎片b. 内部碎片c. 共享跨进程代码的能力连续内存分配会产生外部碎片,因为地址空间是被连续分配的,当旧进程结束,新进程初始化的时候,洞会扩大。连续内存分配也不允许进程共享代码,因为一个进程的虚拟内存段是不被允许闯
34、入不连续的段的。纯段式分配也会产生外部碎片,因为在物理内存中,一个进程的段是被连续放置的,以及当死进程的段被新进程的段所替代时,碎片也将会产生。然而,段式分配可以使进程共享代码;比如,两个不同的进程可以共享一个代码段,但是有不同的数据段。纯页式分配不会产生外部碎片,但会产生内部碎片。进程可以在页granularity中被分配,以及如果一页没有被完全利用,它就会产生内部碎片并且会产生一个相当的空间浪费。在页granularity,页式分配也允许进程共享代码。8.9考虑一个分页式存储管理系统,其页表常驻内存。(1)如果内存访问耗时200 ns,那么,访问内存中的数据需要多长时间?(2)如果引入联想
35、寄存器,而且75%的页面可以从关联寄存器中找到,那么,此时的有效访问时间为多少?(假设访问关联寄存器的时间可以忽略)(1)400纳秒,其中,200纳秒访问页表,200纳秒访问内存中的数据。(2)有效访问时间 = 0.75 * (200纳秒访问内存数据+0纳秒访问关联寄存器) + 0.25 * (200纳秒访问内存数据+200纳秒访问页表) = 250纳秒8.12假设有下列段表:段 基地址 段长度0 219 6001 2300 142 90 1003 1327 5804 1952 96下列逻辑地址对应的物理地址是什么?(1) 0,430(2)1,10(3)2,500(4)3,400(5)4,11
36、2(1)219 + 430 = 649(2)2300 + 10 = 2310(3)第2段的有效长度是100。段内偏移量500超过了这个上限,所以这是个非法地址(4)1327 + 400 = 1727(3) 第4段的有效长度是96。段内偏移量112超过了这个上限,所以这是个非法地址9.5假设一个“按需调页”虚拟存储空间,页表由寄存器保存。在存在空闲页帧的条件下,处理一次缺页的时间是8毫秒。如果没有空闲页面,但待换出页面并未更改,处理一次缺页的时间也是8毫秒。如果待换出页面已被更改,则需要20毫秒。访问一次内存的时间是100纳秒。假设70的待换出页面已被更改,请问缺页率不超过多少,才能保证有效访问
37、时间小于或等于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) = 200nsP = 0.9.10对一个请求调页系统测得如下数据:l CPU利用率20%l 用作页面交换的磁盘的利
38、用率97.7%l 其它I/O设备利用率5%下列措施中,哪些会改善CPU利用率(如果有的话),请说明理由:(1) 安装一个更快的CPU(2) 安装一个更大容量的磁盘用作页面交换(3) 增加并发进程数(4) 减少并发进程数(5) 安装更多内存(6) 安装更快的硬盘,或安装更多的硬盘和控制器(7) 增加一个预取页面算法(8) 增加页面长度首先判断系统正在频繁地进行换页操作。所以,减少并发进程数会显著地减少换页操作,提高CPU的利用率。其它措施也有些效果,例如,安装更多内存。k. 安装一个更快的CPU。没用。l. 安装一个更大容量的磁盘用作页面交换。没用,交换空间本来就足够了。m. 增加并发进程数。没用,情况将会更糟。n. 减少并发进程数。效果明显。o. 安装更多内存。可能会有效果,因为空闲页帧增加了,换页的几率将相对减少。p. 安