《计算机操作系统》实验学生

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

《计算机操作系统》实验要求为了顺利完成操作系统课程实验,应做到:(1)实验前,认真学习教材以及实验要求的相关内容,提前做好实验准备。(2)实验结束后三天内提交实验报告的电子版和打印版。实验报告内容应包括:实验目的、实验内容、设计思路和流程框图,主要程序代码、测试结果以及实验总结。(实验报告模板见“OS实验模板”)(3)遵守机房纪律,服从指挥,爱护实验设备。实验的验收将分为两个部分。第一部分是上机操作,随机抽查程序运行和即时提问;第二部分是提交书面的实验报告。要杜绝抄袭现象,一经发现雷同,双方成绩均以0分计算。实验内容安排:实验内容与要求实验一熟悉进程调度相关内容;根据进程调度算法,选择先来先服务、短进程优先、时间片轮转、高优先权优先调度等算法中的一个,编写算法模拟程序。实验二熟悉页面置换相关内容;选择最佳置换算法、先进先出置换算法、LRU置换算法中的一个,编写算法模拟程序。实验三熟悉银行家算法,并编写程序进行模拟。实验一进程调度实验.....................................................................................................3实验二页面置换算法模拟.............................................................................................5实验三银行家算法模拟.................................................................................................7实验一进程调度实验【开发语言及实现平台或实验环境】C++/C#/CfreeTurboC/MicrosoftVisualStudio6.0/MicrosoftVisualStudio.NET2010【实验目的】(1)加深对进程的概念及进程调度算法的理解;(2)在了解和掌握进程调度算法的基础上,编制进程调度算法通用程序,将调试结果显示在计算机屏幕上,并检测机算和笔算的一致性。【实验要求】(1)了解进程调度;(2)理解利用进程调度算法进行调度的原理;(3)使用某种编程语言进行算法模拟。【实验原理】(注意:这个仅是个例子,可以参考本例,选择其他算法进行实验)一、例题:设计一个有N个进程的进程调度算法。进程调度算法:采用最高优先数的调度算法(即把处理机分配给优先数最高的进程)。每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。进程的优先数及需要的运行时间可以事先人为的指定(也可以由随机数产生)。进程的到达时间为进程的输入的时间。进程的运行时间以时间片为单位进行计算。每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。就绪进程获得CPU后都只能运行一个时间片。用已占用CPU时间加1表示。如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤销该进程,如果运行一个时间片后,进程的已占用CPU时间还未达到所需要的运行时间,也就是进程还需要继续运行,此时应该将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以便进行检查。重复以上过程,直到所要的进程都完成为止。分析:使用固定队列与静动态优先级结合每个优先级为0~0xFF,并且以小的数字为高优先级,大的数字为低优先级,每次皆使用循环得到最高优先级的进程并执行,然后将其动态优先级设置为最低,并将其他进程动态优先级提高,以使得每个进程都有机会运行。进程的优先级与运行时间由随机数产生。Y已达到未达到N开始初始化PCB,输入进程信息各进程按优先数从高到低排列就绪队列空?结束就绪队列首进程投入运行时间片到,运行进程已占用CPU时间+1运行进程已占用CPU时间达到所需的运行时间?进程完成撤销该进程使运行进程的优先数减1把运行进程插入到就绪队列实验二请求页式存储管理中常用页面置换算法模拟【开发语言及实现平台或实验环境】C++/C#/CfreeTurboC/MicrosoftVisualStudio6.0/MicrosoftVisualStudio.NET2010【实验目的】(1)了解内存分页管理策略(2)掌握调页策略(3)掌握一般常用的调度算法(4)学会各种存储分配算法的实现方法。(5)了解页面大小和内存实际容量对命中率的影响。【实验要求】(1)采用页式分配存储方案,通过分别计算不同算法的命中率来比较算法的优劣,同时也考虑页面大小及内存实际容量对命中率的影响;(2)实现OPT算法(最优置换算法)、LRU算法(LeastRecently)、FIFO算法(FirstINFirstOut)的模拟;(3)使用某种编程语言模拟页面置换算法。【实验原理】分页存储管理将一个进程的逻辑地址空间分成若干大小相等的片,称为页面或页。在进程运行过程中,若其所要访问的页面不在内存而需把它们调入内存,但内存已无空闲空间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数据,送磁盘的对换区中。但应将哪个页面调出,须根据算法来确定。通常,把选择换出页面的算法称为页面置换算法。一个好的页面置换算法,应具有较低的页面更换频率。从理论上讲,应将那些以后不再会访问的页面换出,或将那些在较长时间内不会再访问的页面调出。一、最佳置换算法OPT(Optimal)它是由Belady于1966年提出的一种理论上的算法。其所选择的被淘汰页面,将是以后永不使用的或许是在最长(未来)时间内不再被访问的页面。采用最佳置换算法,通常可保证获得最低的缺页率。但由于人目前还无法预知一个进程在内存的若干个页面中,哪一个页面是未来最长时间内不再被访问的,因而该算法是无法实现的,但是可以利用此算法来评价其它算法。如果编写程序模拟该算法,可以提前设定页面访问次序,获知某个页面是否在未来不再被访问。二、先进先出(FIFO)页面置换算法这是最早出现的置换算法。该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。该算法实现简单只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针,称为替换指针,使它总是指向最老的页面。三、最近最久未使用置换算法1、LRU(LeastRecentlyUsed)置换算法的描述FIFO置换算法性能之所以较差,是因为它所依据的条件是各个页面调入内存的时间,而页面调入的先后并不能反映页面的使用情况。最近最久未使用(LRU)置换算法,是根据页面调入内存后的使用情况进行决策的。由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似,因此,LRU置换算法是选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t,,当须淘汰一个页面时,选择现有页面中其t值最大的,即最近最久未使用的页面予以淘汰。2、LRU置换算法的硬件支持LRU置换算法虽然是一种比较好的算法,但要求系统有较多的支持硬件。为了了解一个进程在内存中的各个页面各有多少时间未被进程访问,以及如何快速地知道哪一页是最近最久未使用的页面,须有以下两类硬件之一的支持:1)寄存器为了记录某个进程在内存中各页的使用情况,须为每个在内存中的页面配置一个移位寄存器,可表示为R=Rn-1Rn-2Rn-3……R2R1R0当进程访问某物理块时,要将相应寄存器的Rn-1位置成1。此时,定时信号将每隔一定时间(例如100ms)将寄存器右移一位。如果我们把n位寄存器的数看作是一个整数,那么具有最小数值的寄存器所对应的页面,就是最近最久未使用的页面。下图显示了某进程在内存中具有8个页面,为每个内存页面配置一个8位寄存器时的LRU访问情况。这里,把8个内存页面的序号分别定为1--8。由图可以看出,第7个内存页面的R值最小,当发生缺页时首先将它置换出去。R7R6R5R4R3R2R1R01010100102101011003000001004011010115110101106001010117000001118011011012)栈可利用一个特殊的栈来保存当前使用的各个页面的页面号。每当进程访问某页面时,便将页面的页面号从栈中移出,将它压入栈顶。因此,栈顶始终是最新被访问页面的编号,而栈底则是最近最久未使用的页面的页面号。实验三银行家算法模拟【开发语言及实现平台或实验环境】C++/C#/cfreeTurboC/MicrosoftVisualStudio6.0/MicrosoftVisualStudio.NET2010【实验目的】(1)理解利用银行家算法避免死锁的问题;(2)在了解和掌握银行家算法的基础上,编制银行家算法通用程序,将调试结果显示在计算机屏幕上,并检测机算和笔算的一致性。(3)理解和掌握安全序列、安全性算法【实验要求】(1)了解和理解死锁;(2)理解利用银行家算法避免死锁的原理;(3)使用某种编程语言模拟该算法。【实验原理】一、安全状态指系统能按照某种顺序如P1,P2,…,Pn(称为P1,P2,…,Pn序列为安全序列),为每个进程分配所需的资源,直至最大需求,使得每个进程都能顺利完成。二、银行家算法假设在进程并发执行时,进程i提出请求j类资源k个后,表示为Requesti[j]=k。系统按下述步骤进行安全检查:(1)如果Requesti≤Needi则继续以下检查,否则显示需求申请超出最大需求值的错误。(2)如果Requesti≤Available则继续以下检查,否则显示系统无足够资源,Pi阻塞等待。(3)系统试探着把资源分配给进程Pi,并修改下面数据结构中的数值:Available[j]∶=Available[j]-Requesti[j];Allocation[i,j]∶=Allocation[i,j]+Requesti[j];Need[i,j]∶=Need[i,j]-Requesti[j];(4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。若安全,才正式将资源分配给进程Pi,以完成本次分配;否则,将本次的试探分配作废,恢复原来的资源分配状态,让进程Pi等待。三、安全性算法(1)设置两个向量:①工作向量Work:它表示系统可提供给进程继续运行所需的各类资源数目,它含有m个元素,在执行安全算法开始时,Work∶=Available;②Finish:它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做Finish[i]∶=false;当有足够资源分配给进程时,再令Finish[i]∶=true。(2)从进程集合中找到一个能满足下述条件的进程:①Finish[i]=false;②Need[i,j]≤Work[j];若找到,执行步骤(3),否则,执行步骤(4)。(3)当进程Pi获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:Work[j]∶=Work[i]+Allocation[i,j];Finish[i]∶=true;gotostep2;(4)如果所有进程的Finish[i]=true都满足,则表示系统处于安全状态;否则,系统处于不安全状态。【实验步骤】参考实验步骤如下:(1)参考下图流程编写安全性算法。Y所有finish都为true?输出安全序列NYN存在Finish[i]=false&&Need[i][j]Available[j]初始化Work和FinishFinish[i]=true,Work[j]=Work[j]+Allocation[j]所有进程都找完了?Y开始安全性算法流程图(2)编写统一的输出格式。每次提出申请之后输出申请成功与否的结果。如果成功还需要输出变化前后的各种数据,并且输出安全序列。(3)参考下图所示流程图编写银行家算法。(

1 / 9
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功