




已阅读5页,还剩66页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
北华航天工业学院课程设计报告北 华 航 天 工 业 学 院操作系统课程设计报告课设报告题目: 进程调度算法 银行家算法 虚拟内存中的页面置换算法 磁盘调度算法 作者所在系部: 计算机科学与工程系 作者所在专业: 计算机科学与技术 作者所在班级: B0951 作 者 姓 名 : 指导教师姓名: 赵辉 完 成 时 间 : 2011年12月15日 北华航天工业学院教务处制摘 要在当前的市场经济体制下,计算机产业不断发展装大,人们都操作系统的要求也越来越高。操作系统的可靠性和有效性显得十分重要,不仅提高了计算机资源的利用率,操作系统应该更能方便用户的使用,因此开发有效的完善的计算机系统成为大势所趋。本文利用Visual Basic6.0编写程序,在相关理论基础和技术支持下,编译了此系统实现了操作系统中的一些重要的算法,基本上模拟了真正操作系统中一些主要算法的实现过程。进程调度算法中的先来先服务、短进程优先和高响应比优先。银行家算法中的资源申请和安全性检查,虚拟页面置换算法中的先进先出、最近最久未使用和最佳算法。磁盘调度算法中的先来先服务算法先来先服务算法、最短寻道时间优先算法、扫描算法和循环扫描算法。本次课程设计主要有四项:进程调度系统、银行家系统、虚拟内存中的页面置换和磁盘调度系统。每个系统都经过全面的调试,能够正确的运行,达到了预期的效果。关键词:操作系统 进程调度 银行家 虚拟内存中的页面置换 磁盘调度课题名称进程调度算法完成时间第16周指导教师赵 辉职称讲师学生姓名 班 级B0951总体设计要求和技术要点编程实现进程调度算法的基本过程,设计要求:(1)能够选择进程调度算法(先来先服务、短进程优先算法和高响应比优先算法)。(2)可以输入进程数目(至少4个进程),以及各进程的提交时间和运行时间。(3)能够显示调度过程及平均周转时间和平均带权周转时间。工作内容及时间进度安排114周:布置任务,软件设计21516周:编写代码,上机调试316周:软件验收,撰写课程设计报告417周:上交课程设计成果课程设计成果1课程设计报告2源程序代码课题名称银行家算法完成时间第16周指导教师赵 辉职称讲师学生姓名 班 级B0951总体设计要求和技术要点编写一程序,能够模拟银行家算法和安全算法来避免死锁。假设系统资源有A、B、C三种,可以运行5个进程。该程序具备的基本功能为:1、程序可以输入3种资源的数目,5个进程对3种资源的最大需求量、已分配量和需求量。2、能够判断某一时刻系统是否处于安全状态,如果处于安全状态能够给出安全序列。3、当某进程提出资源申请时,能够判断是否能把资源分配给申请进程。工作内容及时间进度安排114周:布置任务,软件设计21516周:编写代码,上机调试316周:软件验收,撰写课程设计报告417周:上交课程设计成果课程设计成果1课程设计报告2源程序代码课题名称虚拟内存中的页面置换完成时间第16周指导教师赵 辉职称讲师学生姓名 班 级B09513总体设计要求和技术要点编程实现虚拟内存中的页面置换的基本过程,设计要求:(1)能够输入进程的页面访问序列和分配的内存块数。(2)可以选择页面置换算法(先进先出算法、最近最久未使用算法和最佳置换算法)。(3)能够以下图形式显示页面置换过程。工作内容及时间进度安排114周:布置任务,软件设计21516周:编写代码,上机调试316周:软件验收,撰写课程设计报告417周:上交课程设计成果课程设计成果1课程设计报告2源程序代码课题名称磁盘调度算法完成时间第16周指导教师赵 辉职称讲师学生姓名班 级B0951总体设计要求和技术要点编程序实现下述磁盘调度算法,并求出每种算法的平均寻道长度。设计要求:(1)能够输入程序要访问的磁道序列和磁头当前所在的磁道数。(2)可以选择某磁盘调度算法(先来先服务算法、最短寻道时间优先算法、扫描算法和循环扫描算法)。(3)能够以下图形式显示磁盘调度顺序和平均寻道长度。工作内容及时间进度安排114周:布置任务,软件设计21516周:编写代码,上机调试316周:软件验收,撰写课程设计报告417周:上交课程设计成果课程设计成果1课程设计报告2源程序代码目 录第一章 绪论11.1 课程设计的背景和意义11.1.1 课程设计的理论研究基础11.1.2 课程设计的意义21.2 课程设计环境2第二章 需求分析22.1 功能要求22.1.1 进程调度算法22.1.2 银行家算法32.1.3虚拟内存中的页面置换32.1.4磁盘调度算法32.2 问题的解决方案42.2.1进程调度42.2.2银行家算法42.2.3虚拟内存中的页面置换42.2.4磁盘调度算法4第三章 系统设计53.1 数据设计53.1.1 结构体设计51. 进程调度算法的结构体设计52. 银行家算法的结构体设计53. 虚拟内存中的页面置换的结构体设计54磁盘调度算法的结构体设计53.1.2 函数设计61. 进程调度算法的函数设计62. 银行家算法的函数设计63. 虚拟内存中的页面置换的函数设计64磁盘调度算法的函数设计6第四章 系统实现74.1 结构体实现74.1.1进程调度算法的结构体实现74.1.2银行家算法的结构体实现84.1.3虚拟内存中的页面置换的结构体实现84.1.4磁盘调度算法的结构体实现84.2 函数实现84.2.1进程调度算法的函数实现84.2.2银行家算法的函数实现184.2.3虚拟内存中的页面置换的函数实现254.2.4磁盘调度算法的函数实现334.3 主函数实现464.3.1进程调度算法的主函数实现464.3.2银行家算法的主函数实现464.3.3虚拟内存中的页面置换的主函数实现474.3.4磁盘调度算法的主函数实现494.4 系统界面504.4.1 进程调度算法的运行界面504.4.2 银行家算法的运行界面504.4.3虚拟内存中的页面置换的运行界面514.4.4磁盘调度算法的运行界面51第五章 系统测试515.1 模块测试515.1.1进程调度算法的模块测试515.1.2银行家算法的模块测试535.1.3虚拟内存中的页面置换的模块测试545.1.4磁盘调度算法的模块测试555.2 课程设计过程中遇到的问题57总 结58致 谢59参考文献60第一章 绪论操作系统是计算机中最重要的软件。随着计算机的飞速发展,好的操作系统能够大大方便人们对计算机的使用。推动操作系统发展的主要动力有:不断提高的计算机利用率,方便用户、器件的不断更新换代和计算机结构的不断发展。而操作系统的目标:有效性、方便性、可扩充性和开放性。为了使操作系统更加完善并且与计算机的发展相匹配,好的操作系统和好的算法是关键。而怎样实现操作系统对资源的管理就要依靠好的算法来实现。本次课程设计中的算法都是很常用的,在编写这些算法的同时,进一步了解对这些算法的应用显得很重要,系统的漏洞会减少,安全性会增加。1.1 课程设计的背景和意义1.1.1 课程设计的理论研究基础(1)进程调度算法:先来先服务(FCFS)调度算法:当采用该算法时,每次调度是从就绪的进程队列中,选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程运行完成后或发生某事件而阻塞后,进程调度程序才将处理机分配给其它进程。短作业优先(SJF)该算法是以作业的长短来计算优先级的,作业越短,其优先级越高。作业的长短,是以作业所要求的运行时间来衡量的。高响应比优先调度算法:该算法既考虑作业的等待时间,又考虑作业运行时间。响应比=(等待时间+要求服务时间)/要求服务时间(2)银行家算法:当每一个新进程在进入系统时,它必须申明在运行过程中,可能需要的每种资源类型的最大单元数目,其数目不应该超过系统所拥有的资源总量。当进程请求一组资源时,系统必须首先确定是否有足够的资源分配给该进程。若有,再进一步计算,在将这些资源分配给进程后,是否会使系统处于不安全状态。如果不会,才将资源分配给它,否则让进程等待。(3)虚拟内存中的页面置换算法:内存的物理块数有限,往往通过虚拟内存即外存来扩充内存,使一些页表先进入内存块中,当需要访问的页面不在当前内存块时,需要置换原来的页面。先进先出置换算法:按照进入内存的先后顺序,当后续的页面不在当前内存块中时,需要调入的页面将最先进入内存块中的页面置换出去。最近最久未使用置换算法:需要访问的页面不在内存块中时,将当前内存中很久未使用的页面置换出去。最佳置换算法:最佳置换算法是预先知道系统将要使用哪些页面而将以后用到最少的页面置换出去,这种算法在实际中时无法实现的,所以本次没有实现这个算法。 (4)磁盘调度算法:主要实现对访问磁盘序列的调度,包括先来先服务、最短寻道时间优先、扫描算法和循环扫描算法。先来先服务则是从当前磁道数一直按访问序列依次访问相应的磁道;最短寻道时间优先则是按距离当前磁道最短的磁道先被访问;扫描算法则是从当前磁道号递增的方向上依次访问距离当前磁道最短的磁道,然后在从外向里访问;循环扫描算法则是从当前磁道号递增的方向上依次访问距离当前磁道最短的磁道,然后再从里向外访问。1.1.2 课程设计的意义课程设计是学生学习完操作系统课程后,进行的一次全面的综合训练,通过课程设计,让学生更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力。运用到了结构体、标准输入输出函数、格式输出、一些最优选择比较、查找算法等、实现了基本的课设要求,对操作系统的理解上了新的层次,更加明白了操作系统对各类作业的调度及处理。1.2 课程设计环境软件环境:Microsoft Visual C+ 6.0环境 硬件环境:惠普笔记本电脑。酷睿2处理器、1G独立显卡、320硬盘。第二章 需求分析2.1 功能要求2.1.1 进程调度算法编程实现进程调度算法的基本过程,设计要求:(1)能够选择进程调度算法(先来先服务、短进程优先算法和高响应比优先算法)。(2)可以输入进程数目(至少4个进程),以及各进程的提交时间和运行时间。(3)能够以下图形式显示调度过程及平均周转时间和平均带权周转时间。2.1. 2 银行家算法编写一程序,能够模拟银行家算法和安全算法来避免死锁。假设系统资源有A、B、C三种,可以运行5个进程。该程序具备的基本功能为:(1)程序可以输入3种资源的数目,5个进程对3种资源的最大需求量、已分配量和需求量。(2)能够判断某一时刻系统是否处于安全状态,如果处于安全状态能够给出安全序列。(3)当某进程提出资源申请时,能够判断是否能把资源分配给申请进程。2.1. 3 虚拟内存中的页面置换(1)能够输入进程的页面访问序列和分配的内存块数。(2)可以选择页面置换算法(先进先出算法、最近最久未使用算法和最佳置换算法)。(3)能够以下图形式显示页面置换过程。(4)能够计算缺页次数和缺页率。2.1. 4 磁盘调度算法编程序实现下述磁盘调度算法,并求出每种算法的平均寻道长度。设计要求:(1)能够输入程序要访问的磁道序列和磁头当前所在的磁道数。(2)可以选择某磁盘调度算法(先来先服务算法、最短寻道时间优先算法、扫描算法和循环扫描算法)。(3)能够以下图形式显示磁盘调度顺序和平均寻道长度。2.2 问题的解决方案2.2.1进程调度采用结构体数组存放进程的信息,首先对所有提交的进程进行排序,先按照时间顺序,如果时间相同则短进程在前。在先来先服务调度算法中先判断到达时间,依据到达时间的早晚调度相应进程;在短作业优先中还是先判断到达时间,只有在上一个进程结束之后下一个进程已经来到时,则采用最短进程优先,否则按照先来先服务的顺序调度执行。到达时间相等时采用短作业优先,运行时间相等时先来先服务。在高响应比优先调度算法中,当上一个进程结束后下一个进程已经来到时,采用高响应比优先调度,否则还采用先来先服务算法。2.2.2银行家算法将进程抽象成一个结构体,定义申请创建进程的结构体数组,存放相应的信息,用来存储该进程对资源的最大请求量、已分配量和需求量。安全性算法用来判断当前是否处于安全状态;若有进程提出资源申请,先尝试着将其请求的资源分配给它,然后调用安全性算法,判断此次资源分配是否会导致系统处于不安全状态,如果处于不安全状态则把已分配的收回,否则分配成功。2.2.3虚拟内存中的页面置换采用页面信息结构体用来存放页号和到来时间。将要访问的页号和虚拟内存中的块号都定义为相同的结构体数组。首先判断内存块中是否存储有该页号,如果有则不缺页,如果没有,则看内存块是否已满,如果未满,则直接将页面调入内存;如果已满根据相应的算法将原内存中的某一块置换。先来先服务是替换掉最先进入内存的页面;最近最久未使用是替换掉最近一段时间没有使用过的页面,最佳算法则是替换掉以后永不使用的或者是最长时间内不再被访问的页面。2.2.4磁盘调度算法采用全局变量一维数组来存储要访问的磁盘序列。按照顺序存放在一维数组里,同时按照相应的算法来访问磁道。先来先服务则是依次按照访问序列访问,最短寻道时间优先则是从当前磁道判断找与当前磁道距离最近的磁道号进行访问,扫描算法的方向有两种一种是像磁道号增加的方向,另一种是按照磁道号减小的方向访问。循环扫描的方向也有向磁道号方向增加和向磁道号方向减少两种。第三章 系统设计3.1 数据设计3.1.1 结构体设计1. 进程调度算法结构体结构体名称Process数据成员 name; /进程名称 sub;/提交时间operate;/执行时间wait;/等待时间 finish;/完成时间 work; /运行时间 cycle;/周转时间 wcycle;/带权周转时间2. 银行家算法的结构体设计结构体名称Source数据成员maxMAX; /max是每个进程所需资源的最大需求量allocationMAX; /allocation是进程已分配的资源数needMAX; /need是每个进程尚需要的资源数3. 虚拟内存中的页面置换的结构体设计结构体名称pinfo数据成员int num; /页面号int time; /序号4. 磁盘调度算法的数组定义int totalnum; /全局变量总磁道数int snum; /全局变量访问的磁道总数int tracknumMAX;/全局变量存放要访问的磁道号int lengthMAX; /全局变量存放每次移动距离int begin; /开始磁道号int visitedMAX; /是否被访问过int sortedMAX; /将磁道排序int finalMAX;/最终访问序列3.1. 2函数设计1. 进程调度算法进程调度中的函数如下:init(Process p):初始化进程函数add(Process p,int m):进程信息计算函数sort(Process p):对进程按时间排序函数display(Process p,int x,int xx):进程信息显示函数FCFS(Process p):进程调度中的先来先服务算法SJF(Process p):进程调度中的短进程优先算法HighPriority(Process p):进程调度中的高优先权调度算法2. 银行家算法init(Source s):初始化进程和资源函数display(Source s):显示各进程和资源的情况safe(Source s):安全性算法Request(Source s):银行家算法,某一进程请求资源检查是否能够分配release(Source s):某一进程获得资源后请求释放3. 虚拟内存页面置换算法init(pinfo pages,pinfo store):初始化页面和存储块display(pinfo store):输出当前存储块中的页面search(int y,pinfo store):检查存储块中是否有相同的页面FIFO(pinfo pages,pinfo store):先进先出置换算法LRU(pinfo pages,pinfo store):最近最久未使用置换算法OPT(pinfo pages,pinfo store):最佳置换算法count(pinfo pages,pinfo store,int i,int j):以后多长时间被使用4. 磁盘调度算法init():对磁道信息进行初始化FCFS():先来先服务算法SSTF():最短寻道时间优先算法sort():按照磁道号排序算法SCAN():扫描算法CSCAN():循环扫描算法第四章 系统实现4.1 结构体实现4.1.1进程调度算法的结构体实现const int MAX=100;struct Process /进程结构体string name;double sub;/提交时间double operate;/执行时间double wait;/等待时间double finish;/完成时间double work;/运行时间double cycle;/周转时间double wcycle;/带权周转时间int sign;/是否被执行;4.1.2银行家算法的结构体实现const int MAX=10;typedef structint maxMAX;int allocationMAX;int needMAX;Source;4.1.3虚拟内存中的页面置换的结构体实现typedef struct int num; /页面号int time;/进入序号pinfo;4.1.4磁盘调度算法的结构体实现const int MAX=500;int totalnum; /总磁道数int snum; /访问的磁道总数int tracknumMAX;/存放要访问的磁道号int lengthMAX; /移动距离int begin; /开始磁道号int visitedMAX; /是否被访问过int sortedMAX; /排列后的顺序int finalMAX;/最终访问的序列4.2 函数实现4.2.1进程调度算法的函数实现void init(Process p)/初始化各个进程的信息int i;for(i=0;iMAX;i+)pi.sub=0;pi.operate=0;pi.wait=0;pi.finish=0;pi.work=0;pi.cycle=0;pi.wcycle=0;pi.sign=0;coutnum;for(i=0;inum;i+)cout请输入第i+1个进程的名称、到达时间和运行时间:pi.subpi.work;while(pi.sub0|pi.work0)cout您的输入错误,请重新输入第i+1pi.subpi.work;void sort(Process p)/按到达时间排序 int i; int j; int k; for(i=0;inum-1;i+) k=i; for(j=i+1;jpj.sub) k=j;Process x;x=pk;pk=pi;pi=x; if(pi.sub=pj.sub) if(pi.workpj.work) k=j;Process y;y=pk;pk=pi;pi=y; void add(Process p,int m)/对进程信息进行修改 pm.wait=pm.operate-pm.sub; pm.finish=pm.operate+pm.work; pm.cycle=pm.finish-pm.sub; pm.wcycle=pm.cycle/pm.work;void display(Process p,int x,int xx)/显示进程调度信息coutendl;coutxxsetw(8)setw(8)px.subsetw(8)px.operatesetw(8)px.wait setw(8)px.finishsetw(8)px.worksetw(8)px.cyclesetw(8)px.wcycleendl;void FCFS(Process p)/先来先服务调度算法double averagecycle;double averagewcyle;averagecycle=0;averagewcyle=0;int i;for(i=0;inum;i+)pi.sign=0;/先将访问的标志位置0 cout=先来先服务算法=endl; cout次序 名称 提交时刻 开始时刻 等待时间 完成时间 运行时间 周转时间 带权周转时间endl;sort(p);for(i=0;inum;i+)if(i=0)pi.operate=pi.sub;add(p,i);display(p,i,i+1);elseif(pi.sub=pi-1.finish)pi.operate=pi-1.finish;add(p,i);display(p,i,i+1);elsepi.operate=pi.sub;add(p,i);display(p,i,i+1);for(i=0;inum;i+) averagecycle=averagecycle+pi.cycle;for(i=0;inum;i+) averagewcyle=averagewcyle+pi.wcycle;cout使用先来先服务算法的平均周转时间为:averagecycle/numendl;cout使用先来先服务算法的平均带权周转时间为:averagewcyle/numendl;void SJF(Process p)/短进程优先调度算法int i;int j;int k;int ii;for(i=0;inum;i+)pi.sign=0;cout=短进程优先算法=endl; cout次序 名称 提交时刻 开始时刻 等待时间 完成时间 运行时间 周转时间 带权周转时间endl;sort(p);int final;int daoda=0;int temp=0;/标记上次执行到哪里int c=0;double averagecycle;double averagewcyle;averagecycle=0;averagewcyle=0;Process p1MAX,p2MAX;for(i=0;inum;i+)if(i=0)/如果是第一个进程p0.operate=p0.sub;p0.sign=1;add(p,0);p10=p0;temp+;display(p1,0,temp); final=p1i.finish;else/如果不是第一个进程daoda=0;for(j=0;jnum;j+)if(pj.sign=0&pj.sub=final)daoda+;if(daoda=0)/如果没有到达的则找到最早到达的且最短的进程c=0;for( ii=0;iinum;ii+)if(pii.sign=0)c=ii;break;/找到将要执行程序的下标 pc.operate=pc.sub;/开始运行时间等于提交时间pc.sign=1;add(p,c);p1i=pc;temp+;display(p1,i,temp);final=p1i.finish;elseint biao=0;for( ii=0;iinum;ii+)if(pii.sign=0&pii.sub=final)biao=ii;break;for(ii=0;iipii.work&pii.sub=final)biao=ii;pbiao.sign=1;pbiao.operate=final;add(p,biao);p1i=pbiao;temp+;display(p1,i,temp);/i+1=tempfinal=p1i.finish;for(i=0;inum;i+) averagecycle=averagecycle+p1i.cycle;for(i=0;inum;i+) averagewcyle=averagewcyle+p1i.wcycle;cout使用先来先服务算法的平均周转时间为:averagecycle/numendl;cout使用先来先服务算法的平均带权周转时间为:averagewcyle/numendl;void HighPriority(Process p)/高响应比优先调度算法int i;int j;int k;int ii;for(i=0;inum;i+)pi.sign=0;cout=高响应比优先算法=endl; cout次序 名称 提交时刻 开始时刻 等待时间 完成时间 运行时间 周转时间 带权周转时间endl; sort(p);int final;int daoda=0;int temp=0;/标记上次执行到哪里int c=0;double averagecycle;double averagewcyle;averagecycle=0;averagewcyle=0;Process p1MAX,p2MAX;int priority;for(i=0;inum;i+)if(i=0)/如果是第一个进程p0.operate=p0.sub;p0.sign=1;add(p,0);p10=p0;temp+;display(p1,0,temp); final=p1i.finish;else/如果不是第一个进程daoda=0;for(j=0;jnum;j+)if(pj.sign=0&pj.sub=final)daoda+;if(daoda=0)/如果没有到达的则找到最早到达的且最短的进程for(ii=0;iinum;ii+)if(pii.sign=0)c=ii;break;/找到将要执行程序的下标pc.sign=1; pc.operate=pc.sub;/开始运行时间等于提交时间add(p,c);p1i=pc;temp+;display(p1,i,temp);final=p1i.finish;elseint biao=0;for( ii=0;iinum;ii+)if(pii.sign=0&pii.sub=final)biao=ii;break;priority=(final-pbiao.sub+pbiao.operate)/pbiao.operate;for(ii=0;iipii.work &pii.subpriority)priority=(final-pii.sub+pii.operate)/pii.operate;biao=ii;pbiao.sign=1;pbiao.operate=final;add(p,biao);p1i=pbiao;temp+;display(p1,i,temp);final=p1i.finish;for(i=0;inum;i+) averagecycle=averagecycle+pi.cycle;for(i=0;inum;i+) averagewcyle=averagewcyle+pi.wcycle;cout使用先来先服务算法的平均周转时间为:averagecycle/numendl;cout使用先来先服务算法的平均带权周转时间为:averagewcyle/numendl;4.2.2银行家算法的函数实现void init(Source s)/初始化进程和资源int i,j;int y;for(i=0;iMAX;i+)for(j=0;jMAX;j+)si.allocationj=0;si.maxj=0;si.needj=0;for(i=0;iMAX;i+)availablei=0;requesti=0;coutpnum;while(pnumMAX)coutpnum;coutsnum;while(snumMAX)coutsnum;for(i=0;ipnum;i+)cout请分别输入第i个进程对各类资源的最大需求量:endl;for(j=0;jsi.maxj;while(si.maxjMAX)coutsi.maxj; cout请分别输入第i个进程各类资源已分配的数量:endl;for(j=0;jsi.allocationj;while(si.allocationjMAX|si.allocationjsi.maxj)coutsi.allocationj;for(j=0;jsnum;j+)si.needj=si.maxj-si.allocationj;for(j=0;jsi.maxj)/已分配数不能大于最大需求量cout*您的输入不正确请重新输入*endl;cout第i个进程的最大需求量:endl;for(j=0;jsi.maxj;cout请分别输入第i个进程各类资源已分配的数量:endl;for(j=0;jsi.allocationj;cout请分别输入第i个进程各类资源需求的数量:endl;for(j=0;jsi.needj;cout请输入各类资源现有数目:endl;for(i=0;iavailablei;while(availablei0)coutavailablei;void display(Source s)/资源分配显示函数int i,j;cout=endl;cout 资源分配endl;cout=endl;cout系统可用资源分别为:endl;for(i=0;isnum;i+)coutavailablei ;coutendl;coutMAX ALLOCATION NEEDendl;for(i=0;ipnum;i+)for(j=0;jsnum;j+)coutsi.maxj ;cout ;for(j=0;jsnum;j+)coutsi.allocationj ;cout ;for(j=0;jsnum;j+)coutsi.needj ;coutendl;int safe(Source s)/安全性算法int sign;int workMAX;int finishMAX;int sortMAX;int i,j,k,m,n;int flag;m=0;for(i=0;isnum;i+)worki=availablei;for(j=0;jMAX;j+)finishj=0;/初始化将所有未分配的置为0for(i=0;ipnum;i+)sign=0;for(j=0;jsnum;j+)if(finishi=0&si.needj=workj) sign+; if(sign=snum) for(k=0;ksnum;k+)workk=workk+si.allocationk;finishi=1;sortm=i;m+;i=-1; elsebreak;flag=0;for(k=0;kpnum;k+) if(finishk=1)flag+;if(flag=pnum)cout系统存在安全性序列。安全性序列为:endl; for(n=0;npnum;n+)cout进程sortn ;coutendl;return 1;elsecout系统不安全!endl;return 0;void Request(Source s)/资源分配算法int number;coutnumber;while(number=pnum|number0)coutnumber;cout请输入要为该进程分配的资源;for(int i=0;irequesti;while(requesti0)coutrequesti;int sign; for(int j=0;jsnumber.needj) cout对不起,您的输入错误,请求量应该小于需求量!availablej) cout对不起您的请求量大于可用资源!endl; return; for(j=0;jsnum;j+) availablej=availablej-requestj; snumber.allocationj=snumber.allocationj+requestj; snumber.needj=snumber.needj-requestj; sign=safe(s); if(sign=0) cout资源分配后系统处于不安全状态,恢复为原来的调度状态。endl; for(j=0;jsnum;j+) availablej=availablej+requestj; snumber.allocationj=snumber.allocationj-requestj; snumber.needj=snumber.needj+requestj; if(sign=1) cout资源分配后产生安全性序列!endl; void release(Source s)/资源释放算法int number;coutnumber;int sign=0;for(int i=0;isnum;i+)if(snumber.needi=0)sign+;if(sign=snum)for(int j=0;jsnum;j+)availablej=availablej+snumber.allocationj;return ;cout该进程资源不能够释放!endl;4.2.3虚拟内存中的页面置换的函数实现void init(pinfo pages,pinfo store)/对页面的初始化int i,j;cout请输入实际的页数:m;while(m=MAX|m0)coutm;cout请输入内存的块数:n;while(n=MAX|n0)coutn;cout请输入各页面号:endl;for( i=0;ipagesi.num;while(pagesi.num0)coutpagesi.num;pagesi.time=i;/将每一页面都标注上时间/初始化存储的页面 for(i=0;iMAX;i+)for(j=0;jMAX;j+)visitedij=-1;for(i=0;iMAX;i+)lacki=0;void display1(pinfo pages,pinfo store)coutendl;cout页面走向:;for(int i=0;im;i+)coutpagesi.num ;coutendl;coutendl;for(i=0;in;i+)if(i=0)cout M=n ;elsecout ;for(int j=0;jm;j+)if(visitedij=-1)cout ;elsecoutvisitedij ;coutendl;coutendl;cout缺页 ;for(i=0;im;i+)coutlacki ;coutendl;coutendl;int search(int y,pinfo store)/检查是否存在相同页面 for(int i=0;in;i+) if(y=storei.num) return i;/如果存在相同的页号,则返回该页号 return -1;void FIFO(pinfo pages,pinfo store)/先进先出算法int i;int j,k;int flag=0;int sign;int times;/标记的是不缺页的次数times=0;for(i=0;im;i+)if(flag-1)times+;for(k=0;kn;k+)visitedki=storek.num;if(search(pagesi.num,store)=-1)storeflag.num=pagesi.num;storeflag.time=pagesi.time;flag+;for(k=0;k=n)if(search(pagesi.num,store)-1)times+;for(k=0;kn;k+)visitedki=storek.num;if(search(pagesi.num,store)=-1)/缺页sign=0;for(j=1;jn;j+)if(storej.timestoresign.time)sign=j;storesign.num=pagesi.num;storesign.time=pagesi.time;for(k=0;kn;k+)visitedki=storek.num;lacki=1;display1(pages,store);cout先进先出算法的缺页次数为:m-timesendl;cout缺页率为(double(m-times)/m)*100)%endl;void LRU(pinfo pages,pinfo store)/最近最久未使用算法int i;int j,k;int flag=0;int sign;int signal;int times;times=0;for(i=0;im;i+)if(flag-1)storesignal.time=pagesi.time;times+;for(k=0;kn;k+)visitedki=storek.num;if(signal=-1)storeflag.num=pagesi.num;storeflag.time=pagesi.time;flag+;for(k=0;k=n)signal=search(pagesi.num,store);if(signal-1)storesignal.time=pagesi.time;times+;for(k=0;kn;k+)visitedki=storek.num;if(signal=-1)sign=0;for(j=1;jn;j+)if(storej.timestoresign.time)sign=j;storesign.num=pagesi.num;storesign.time=pagesi.time;for(k=0;kn;k+)visitedki=storek.num;lacki=1;display1(pages,store);cout最近最久未使用的缺页次数为:m-timesendl;cout缺页率为(double(m-times)/m)*100)%endl;int count(pinfo pages,pinfo store,int i,int j)/最近多长时间被使用int c=0;for(int k=i;km;k+)if(storej.num=pagesk.num)break;elsec+;return c;void OPT(pinfo pages,pinfo store) /最佳置换算法int i;int j,k;int flag=0;int signal;int temp;int biaozhi;int times;times=0;for(i=0;im;i+)/i表示的是进行到第几个页面if(flag-1)storesignal.time=pagesi.time;times+;for(k=0;kn;k+)visitedki=storek.num;if(signal=-1)storeflag.num=pagesi.num;storeflag.time=pagesi.time;flag+;for(k=0;k=n)signal=search(pagesi.num,store);if(signal-1)storesignal.time=pagesi.time;times+;for(k=0;kn;k+)visitedki=storek.num;if(signal=-1)/缺页temp=-1;for(j=0;jn;j+)if(tempcount(pages,store,i,j) /计算后面有多长时间用到temp=count(pages,store,i,j);biaozhi=j;storebiaozhi.num=pagesi.num;storebiaozhi.time=pagesi.time;for(k=0;kn;k+)visitedki=storek.num;lacki=1;display1(pages,store);cout最佳置换算法的缺页次数为:m-timesendl;cout缺页率为(double(m-times)/m)*100)%endl;4.2.4磁盘调度算法的函数实现void init()/初始化磁盘信息int i,j,k,l;couttotalnum;while(totalnumMAX|totalnum0)couttotalnum;coutsnum;while(totalnum=snum|snum0)coutsnum;cout请依次输入要访问的磁道号:;for(i=0;itracknumi;while(tracknumitotalnum)couttracknumi;for(j=0;jsnum;j+)lengthj=0; /初始化距离coutbegin; /都要判断while(totalnum=begin)coutbegin;for(k=0;ksnum;k+)visitedk=0; /该磁道是否被访问for(l=0;lsnum;l+)sortedl=tracknuml;void FCFS()/先来先服务算法 int exchange; int sign; exchange=begin; for(int i=0;i=0)sign=tracknumi-exchange;elsesign=exchange-tracknumi; lengthi=sign;visitedi=1;exchange=tracknumi;finali=tracknumi; void SSTF() /最短寻道时间优先int i;for(i=0;isnum;i+)visitedi=0;int sign;/正负数的标志int signal;/存放最短距离int exchange;int flag=0; /记下寻找到的最近磁道号exchange=begin;/开始设置为初始位置for( i=0;isnum;i+)signal=MAX;for(int j=0;j=0)sign=tracknumj-exchange;elsesign=exchange-tracknumj;if(sign=signal&visitedj=0)signal=sign;flag=j;visitedflag=1;lengthi=signal;finali=tracknumflag;exchange=tracknumflag;/以现在所处的位置开始void sort() /排序算法int exchange;int i,j,k;for(i=0;isnum;i+)visitedi=0;for(i=0;isnum-1;i+)k=i;for(j=i+1;jsnum;j+)if(sortedjsortedk)k=j;if(i!=k)exchange=sortedk;sortedk=sortedi;sortedi=exchange;void SCAN()/扫描算法int choice;int sign;int signal;int exchange;int i,j;int small,big,equal;small=0;equal=0;big=0;exchange=begin;for(i=0;isnum;i+)visitedi=0;/将访问的标志置0;sort();/对磁道号进行排序if(sortedsnum-1=0;i-)if(sortedi-exchange=0)signal=sortedi-exchange;elsesignal=exchange-sortedi;lengthsnum-1-i=signal;exchange=sortedi;finalsnum-1-i=sortedi;elseif(sorted0=exchange)for(i=0;i=0)signal=sortedi-exchange;elsesignal=exchange-sortedi;lengthi=signal;exchange=sortedi;finali=sortedi;elseif(sorted0exchange)cout向磁道号增加的方向 2=向磁道号减小的方向choice;if(choice=1)for(i=0;i=begin)/考虑如果有访问的磁道号和开始磁道号相同的情况sign=i;break;for(i=sign;i=0)signal=sortedi-exchange;elsesignal=exchange-sortedi;lengthi-sign=signal;exchange=sortedi;finali-sign=sortedi;for(j=sign-1;j=0;j-)if(sortedj-exchange=0)signal=sortedj-exchange;elsesignal=exchange-sortedj;lengthsnum-1-j=signal;exchange=sortedj;finalsnum-1-j=sortedj;if(choice=2)for(i=0;ibegin)/考虑如果有访问的磁道号和开始磁道号相同的情况sign=i;break;for(i=sign-1;i=0;i-)if(sortedi-exchange=0)signal=sortedi-exchange;elsesignal=exchange-sortedi;lengthsign-i-1=signal; exchange=sortedi;finalsign-i-1=sortedi;for(j=sign;j=0)signal=sortedj-exchange;elsesignal=exchange-sortedj;lengthj=signal;exchange=sortedj;finalj=sortedj;void CSCAN()/循环扫描算法int choice;int sign;int signal;int exchange;int i,j;int small,big,equal;small=0;equal=0;big=0;sort();cout向磁道号增加的方向 2=向磁道号减小的方向choice;exchange=begin;if(choice=1)if(sortedsnum-1=exchange)if(sortedsnum-1=exchange)length0=0;exchange=sortedsnum-1;final0=exchange;for(i=0;i=0)signal=sortedi-exchange;elsesignal=exchange-sortedi;lengthi+1=signal;exchange=sortedi;finali+1=sortedi;elseif(sortedsnum-1!=exchange)for(i=0;i=0)signal=sortedi-exchange;elsesignal=exchange-sortedi;lengthi=signal;exchange=sortedi;finali=sortedi;elseif(sorted0=exchange)for(i=0;i=0)signal=sortedi-exchange;elsesignal=exchange-sortedi;lengthi=signal;exchange=sortedi;finali=sortedi;elseif(sorted0exchange)for(i=0;i=begin)sign=i;break;for(i=sign;i=0)signal=sortedi-exchange;elsesignal=exchange-sortedi;lengthi-sign=signal;exchange=sortedi;finali-sign=sortedi;for(j=0;j=0)signal=sortedj-exchange;elsesignal=exchange-sortedj;lengthsnum-sign+j=signal;exchange=sortedj;finalsnum-sign+j=sortedj;if(choice=2)if(sortedsnum-1=0;i-)if(sortedi-exchange=0)signal=sortedi-exchange;elsesignal=exchange-sort
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年湖北省荆荆襄宜四地高二下学期期中联考地理试题及答案
- 2025年中国家用血压仪行业市场全景分析及前景机遇研判报告
- 中国体育用品行业市场深度调查评估及投资方向研究报告
- 税务师考试初级课件
- 中国黑龙江煤炭工业调查报告
- 医用高频仪器设备项目风险分析和评估报告
- 竹瓢项目投资可行性研究分析报告(2024-2030版)
- 2025年 云南省危险化学品经营单位安全管理人员考试练习题附答案
- 热扩直缝钢管行业深度研究报告
- 扇型卡具项目投资可行性研究分析报告(2024-2030版)
- 2025年山东产权交易集团有限公司招聘笔试参考题库含答案解析
- 《浙江市政预算定额(2018版)》(第七册-第九册)
- DB32-T 4878-2024 居住区供配电设施建设标准
- 2025年河北交通投资集团公司招聘笔试参考题库含答案解析
- 药品配送包装及运输方案
- 经济师考试知识产权高级经济实务新考纲题库详解(2025年)
- 医院培训课件:《失血性休克的急救护理》
- 2024年北京市中考生物真题卷及答案解析
- 华东理工大学《药物设计与新药发现-小分子药物》2023-2024学年第一学期期末试卷
- 新质生产力促进辽宁经济高质量发展研究
- 《LNG基本知识培训》课件
评论
0/150
提交评论