首页 操作系统问题

操作系统问题

举报
开通vip

操作系统问题第1页(共7页)显示所有答案隐藏所有答案操作系统问题★代表在时间允许的情况下选择用来在本部分中讨论的问题。问题1.下列代码概述了一个简单的分时调度程序:structMState{intRegs[31];/*保存用户寄存器的状态*/}User;intN=42;/*要调度的进程数*/intCur=0;/*“活动”进程数*/structPCB{structMStateState;/*处理器状态*/ContextPageMap;/*针对进程的虚拟机映射*/intDPYNum;/*控制台/键盘数*/}ProcTbl[N];/...

操作系统问题
第1页(共7页)显示所有 答案 八年级地理上册填图题岩土工程勘察试题省略号的作用及举例应急救援安全知识车间5s试题及答案 隐藏所有答案操作系统问题★代表在时间允许的情况下选择用来在本部分中讨论的问题。问题1.下列代码概述了一个简单的分时调度程序:structMState{intRegs[31];/*保存用户寄存器的状态*/}User;intN=42;/*要调度的进程数*/intCur=0;/*“活动”进程数*/structPCB{structMStateState;/*处理器状态*/ContextPageMap;/*针对进程的虚拟机映射*/intDPYNum;/*控制台/键盘数*/}ProcTbl[N];/*每进程一个ProcTbl*/Scheduler(){ProcTbl[Cur].State=User;/*保存当前用户状态*/Cur=(Cur+1)%N;/*增量模N*/User=ProcTbl[Cur].State;/*使另一ProcTbl处理当前这个ProcTbl*/假设用户每次敲击键盘上的某个键时,会产生一个中断,中断处理程序将这个新字符复制到常驻内核输入缓冲区中。操作系统包含一个ReadKey服务调用(SVC),通过用户从输入缓冲区中读取下一个字符这种方式来调用它。如果输入缓冲区为空,则SVC将挂起,直到有一个字符可用时为止。这个ReadKeySVC处理程序的第一个雏形如下所示。SVC处理程序例程将用户状态保存在用户结构中,然后调lReadKey_h()。当ReadKey_h()返回时,SVC处理程序重新恢复该用户的状态,然后通过执行JMP(XP)命令来重启用户程序。ReadKey_h(){intkdbnum=ProcTbl[Cur].DPYNum;while(BufferEmpty(kdbnum)){/*临时占用,等待循环结束*/}User.Regs[0]=ReadInputBuffer(kdbnum);上图说明了针对某个计算机的直接映射高速缓存块,该计算机使用32位数据字和32位字节地址。A.★在执行完ReadKeySVC后,用户程序将从输入缓冲区的哪个地方来找到下一个字符?隐藏答案SVC将从输入缓冲区中读取的字符存储到用户结构的R0槽中。恰好在内核返回到用户模式之前,上述内容被装载到用户的R0槽中。2002年4月29日第2页(共7页)B.★请解释上面提出的这个实现 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 会出现什么问题。隐藏答案当用户开始调用ReadCh管理程序时,如果缓冲区为空,那么处理程序会在内核中出现死循环而禁止中断。这样,就会阻止对缓冲区进行填充,所以该代码就进入到死循环中。C.★另外一个键盘处理程序的草案如下所示:ReadKey_h(){intkdbnum=ProcTbl[Cur].DPYNum;if(BufferEmpty(kdbnum))User.Regs[XP]=User.Regs[XP]-4;elseUser.Regs[0]=ReadInputBuffer(kdbnum);}请解释改进后的程序是怎样修正最初实现方案中存在的问题。隐藏答案当缓冲区为空时,该代码返回到用户模式,并且重新执行SVC。通过返回到用户模式来允许中断(很简单!),这样中断就能够发生,并且在键入某个按键时,缓冲区最终就可以填满。D.★ 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 人员注意到这样一个事实:进程只是在浪费其时间片等待有人来按键。所以他们提出以下修改方案:ReadKey_h(){intkdbnum=ProcTbl[Cur].DPYNum;if(BufferEmpty(kdbnum)){User.Regs[XP]=User.Regs[XP]-4;Scheduler();}elseUser.Regs[0]=ReadInputBuffer(kdbnum);}当删去“User.Regs[XP]=User.Regs[XP]-4;”这个代码行时,最可能出现的结果是什么?隐藏答案在下一次调度时,用户程序将不会重新执行SVC,并且进一步假定下一个字符在R0中是可用的。简言之,它将会处理一个“垃圾”字符,即利用的是在最初的SVC的R0中产生的垃圾字符。E.★请解释这种修改是如何改进系统的整体性能的(假定没有删去第4行代码“User.Regs[XP]=User.Regs[XP]-4;”)。隐藏答案调用scheduler()使得在等待下一个字符到来的时候,允许其他程序运行。2002年4月29日第3页(共7页)F.★该版本的处理程序仍然不能防止按任意量来进行调度,尽管在输入缓冲区中没有出现任何字符时,很可能只是再次调用Scheduler()。对于讲座中所描述的核心例程sleep(status)和wakeup(status)来说,请解释是怎样使用它们才能确保只有在这些例程有某些“用处”时才会对它们进行调度。隐藏答案通过调用sleep(status),处理器会在下一次调度用于执行的用户程序(即在已经键入一个字符以后)时 通知 关于发布提成方案的通知关于xx通知关于成立公司筹建组的通知关于红头文件的使用公开通知关于计发全勤奖的通知 核心例程。这样,在用于执行的进程所能做的事情只是发现缓冲区仍然为空并且将其自身挂起时,就可以避免重新调度这些用于执行的进程。如果键盘处理器调用wakeup(status),核心例程就可以找到已经进入睡眠状态并且等待与“状态”相关的某个事件发生的所有进程。接着,它就可以将这些进程标记为准备用于再次执行。因此,只有在这些进程拥有一些较好的理由允许它们继续运行时,这些进程才会运行。问题2.下列问题是关于在设计项目3中使用的简单分时核心程序。单击此处可以在一个独立的窗口中查看代码。A.★重启之后会发生什么情况?隐藏答案在硬件重启以后,它会从存储单元0处开始执行。我们查看一下代码,存储单元0处有“BR(I_Reset)”,它将会指引到以下代码段:CMOVE(P0Stack,SP)CMOVE(P0Start,XP)JMP(XP)对于用户进程0来说,这些指令先对堆栈指针进行初始化,然后跳转到该进程的第一条指令。由于我们才刚刚启动,程序还没有对其他寄存器中的内容作任何假定,所以我们只能让拥有在它们发生时所拥有的任何值。注意:这就意味着在单独重置以后,存在着错误的程序(例如,那些对寄存器进行测试的值出现在对它们设置之前)很可能表现为不同方式。为了提供某些可重用性保证,许多操作系统在开始执行某个进程之前,都将该进程的寄存器初始化为某个已知值。B.★处理器是怎样开始执行其他用户进程的?隐藏答案时钟中断是由硬件定期生成的(中断之间的常见时间间隔是1/60秒=16.6ms);每个中断被称为该时钟的一个“滴答”单位。我们的中断处理程序(I_CLK)对XP进行备份,使之指向被中断指令的指令,并且保存寄存器0中的内容。然后,它会查看当前用户进程已经运行了多长时间,如果是少于两个时钟滴答,则寄存器0的内容就会被恢复,并且继续执行被中断的程序。2002年4月29日第4页(共7页)如果用户进程已经到了2个时钟滴答,所有当前进程的寄存器都被保存在某种核心数据结构(UserMState)中,并且我们通过调用Scheduler()来确定将要运行哪个进程。Scheduler()非常简单:它只是按某种循环方式在用户进程之间不断循环。改变当前进程涉及到先将UserMState复制到当前用户进程的合适的结构中,然后将下一个进程的数据复制到UserMState中。最后,核心例程恢复用户模式(参见I_Rtn),并且继续执行用户模式进程。由于我们交换的是哪一个进程的状态是“当前”状态,所以我们实际上是重新开始执行一个不同的进程,而不是执行被时钟滴答所中断的那个进程。C.★管理程序调用(SVCs)是怎样工作的?隐藏答案管理程序调用是为用户模式程序提供服务的核心模式例程。它们之所以发生在核心例程中,是因为我们想要虚拟某些资源,或是因为操作需要一些特权,我们不希望将特权授给某个用户模式进程胡乱使用。从程序员的视度来看,SVCs看上去像是独立的指令,它们的操作数出现在堆栈等的特殊寄存器中(精确的约定依赖于特定的SVC)。在硬件层次上,SVCs只不过是特殊的非法指令(在本例中,它们是带有操作码1的指令)。在执行时,它们将会造成预期的非法指令陷阱,该陷阱将非法指令的PC+4保存在XP中,进入到核心模式,并且跳转到存储单元4中。非法指令处理程序(_IllOp)基于非法指令的操作码来分派某个合适的处理程序。带有操作码1的指令在SVC_UUO处结束,其他指令在UUOError处结束。管理程序调用处理程序(SVC_UUO)基于非法指令的低位执行另外一个层次的分派,进而将控制权传给8个可能的管理程序调用处理程序中的某一个。当处理程序完成时,非法指令处理程序返回,继续执行带有在SVC后面的指令的用户模式程序。D.★从键盘中键入的字符是如何找到其通往用户模式程序的方式?隐藏答案该过程包括下面几步:1.键盘中断。每次键入某个字符时,硬件会产生一个中断,将程序计数器设置成0xC。核心模式处理程序(I_Kbd)利用RDCHAR()指令(只能被核心模式程序执行的某个特权指令)来找回字符。它将该字符保存在核心数据缓冲区中,然后继续执行被中断的用户模式程序。2002年4月29日第5页(共7页)2.GetKey()管理程序调用。如果某个用户模式程序想从键盘中读取一个字符,它就会执行GetKey()管理程序调用。这样做允许操作系统实施不同策略。例如,键盘应该怎样在用户模式程序(输入焦点)之间共享,为侧重计算的程序缓冲键盘输入等等。如果核心缓冲区中有一个字符可用的话,它就会被装载到用户的寄存器0中,产生服务调用的程序就会在GetKey()SVC指令之后继续执行其程序(此时新字符已经装载到R0中)。如果没有字符可用的话,GetKey()处理程序就准备“挂起”(即并没有返回到用户模式程序),直到从键盘中键入某个字符时为止。但是,正如上一个问题中所讨论的那样,它不会只是在核心例程中简单地进行循环(中断被禁止,我们此时可能在浪费CPU周期。如果被其他用户模式程序使用该周期,或许很有用)。所以要对用户模式状态进行修改,使得当继续执行该程序时,将会重新执行GetKey()SVC,并且通过调用调度程序来运行一个不同的用户模式程序。每次当原来程序继续执行许多时钟滴答时,都会重新执行GetKey()SVC等。该进程继续进行,直到键入一个字符并且能够返回到用户程序时为止。问题3.RealVirtuality公司销售三种不同的计算机,每一种计算机都带有自己的操作系统。该系统的情况如下所述:模型A:是一个分时的多用户Beta系统,其操作系统内核是不可中断的。模型B:是一个分时的Beta系统,它在处理SVC陷阱过程中允许设备中断。模型C:是一个单进程(而不是分时)的系统,它只运行专门的应用程序代码。每个系统都运行一个操作系统,该操作系统支持在多个设备上的并发I/O操作,包括操作人员的控制台,还包括键盘。LesN.Dowd是RVI公司最近雇佣的操作系统专家,他现在感到很困惑:他将装有这三个系统的操作系统源代码主要拷贝的盒子弄丢了。遗憾的是,装有用于ReadKeySVC(负责读取并且返回下一个键盘按键的ASCII码)的处理程序的三张磁盘也被他搞混了。当然,这三张盘都没有标签,所以Les并不能确定哪一个处理程序能够进入到哪一台计算机的操作系统中。下面给出的是处理程序的源代码:ReadCh_h(){/*版本R1*/if(BufferEmpty(0))/*是否已经键入一个键?*/User->Regs[XP]=User->Regs[XP]-4;/*没有键入,请等待。*/elseUser->Regs[0]=ReadInputBuffer(0);/*是的,返回。*/}ReadCh_h(){/*版本R2*/intkbdnum=ProcTbl[Cur].DpyNum;while(BufferEmpty(kbdnum));/*等待按下某个键。*/User->Regs[0]=ReadInputBuffer(kbdnum);/*...然后返回。*/2002年4月29日第6页(共7页)ReadCh_h(){/*版本R3*/intkbdnum=ProcTbl[Cur].DpyNum;if(BufferEmpty(kbdnum)){/*是否已经键入某个键?*/User->Regs[XP]=User->Regs[XP]-4;/*没有键入,请等待。*/Scheduler();}elseUser->Regs[0]=ReadInputBuffer(kbdnum);/*是的,返回。/A.假如想要表明你比Les聪明的话,请找出哪一个处理程序与哪一个操作系统相匹配,也就是说,为每个操作系统(用A、B、C来表示)指示合适的处理程序(R1、R2或者R3)。请简要解释你的选择情况。隐藏答案处理程序R1与操作系统C相匹配。该处理程序将键盘硬连线到端口0,所以它必然是模型C.。处理程序R2与操作系统B相匹配。该处理程序用于分时系统,但在它等待过程中并不是有效,所以SVC一定是非中断的。处理程序R3与操作系统A相匹配。该处理程序也用于分时系统,但它在等待之前会调用调度程序,所以核心例程不会对自己的处理程序进行中断。B.但是,Les并不是那么聪明,为了找出哪个处理程序代码与哪个操作系统版本相匹配,Les为每张磁盘制作了拷贝,并将它们作为“更新”盘分发给每个操作系统的Beta测试小组。Les认为,如果每个操作系统的某些Beta测试人员试用了每个处理程序,则这些测试人员的评论就允许他确定与每个处理程序相匹配的合适的操作系统。Les将这些所谓的源代码更新程序发送出去了,并且将每个处理程序的源代码发送给每个操作系统的测试人员。相应地,他从许多测试人员那里获得了一大堆的抱怨。当然,由于他忘记发送给每个测试人员的是哪张磁盘。他请求你帮忙他找出那种操作系统和处理程序的组合分别导致了各个抱怨。对于下面列出的各个抱怨,请解释抱怨者正在试图使用的是哪个处理程序和哪种操作系统。抱怨者:“我有连接错误;Scheduler和ProcTbl都没有定义!”隐藏答案抱怨者使用的是处理程序R3和操作系统C。R3是使用Scheduler的惟一处理程序,并且操作系统C是没有Scheduler的惟一核心系统。C.抱怨者:“我可以使用新处理程序来连接系统,但在我的程序试图读取某个键时,系统就会挂起。”隐藏答案抱怨者使用的是处理程序R2和操作系统A。如果没有键可用时,R2是惟一的无效处理程序,而操作系统A是分时的惟一核心系统,并且不会中断SVC。D.抱怨者:“嗨,现在系统总是从键盘0读取每个人的输入。此外,与以往相比,它似乎浪费了非常多的CPU周期。”2002年4月29日第7页(共7页)隐藏答案抱怨者使用的是处理器R1和操作系统A。R1是采取键盘0的惟一处理程序。模型A的用户正在使用一种被称作调度程序的处理程序(R3)。当缓冲区为空时就会调用调度程序,这种方式在理论上要比忙于循环的情况浪费更少的CPU周期。所以,当用户替换R1时,若缓冲区为空,则该程序就会忙于执行循环。模型B的用户不会有相同的抱怨,因为她所使用的处理程序(R2)已经开始执行循环了。E.抱怨者:“很好,新系统看上去工作得非常好,它甚至看上去似乎要比以前浪费更少的CPU时间!”隐藏答案抱怨者使用的是处理程序R3和操作系统B。模型B的用户很快乐,因为我们已经将她以前的处理程序中忙于循环的内核进行了替换,该处理程序带有对调度程序Scheduler()的调用。2002年4月29日
本文档为【操作系统问题】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
中小学教育资料
暂无简介~
格式:pdf
大小:146KB
软件:PDF阅读器
页数:7
分类:互联网
上传时间:2023-02-26
浏览量:4