页面淘汰算法实现操作系统课程设计.doc
- 文档编号:73523
- 上传时间:2022-10-02
- 格式:DOC
- 页数:23
- 大小:540.95KB
页面淘汰算法实现操作系统课程设计.doc
《页面淘汰算法实现操作系统课程设计.doc》由会员分享,可在线阅读,更多相关《页面淘汰算法实现操作系统课程设计.doc(23页珍藏版)》请在冰豆网上搜索。
目录
一、概述:
设计主要完成的任务和解决的主要问题
二、设计的基本概念和原理。
三、总体设计。
四、详细设计。
五、完成的情况。
六、简要的使用说明。
七、总结:
特色、经验、教训和感受。
八、参考文献。
【题目一:
页面淘汰算法的实现】
一、概述:
设计主要完成的任务和解决的主要问题
利用简单的数据结构,模拟现实操作系统中的页面置换机制。
1、用C语言编写FIFO、LRU置换算法。
2、熟悉内从分页管理策略。
3、了解一般常用的调度算法。
4、模拟实现页面淘汰算法。
二、设计的基本概念和原理。
在操作系统当中,在进程运行过程中,若其访问的页面不在内存中二需要把他们调入内存,但内存已无空闲空间时,为了保证该进程能够正常运行,系统必须从内存中调出一页程序或数据送到兑换区中,但是应该是哪个页面被调出,需根据一定的算法来确定,即“页面置换算法”。
页面置换算法执行效率的高低,往往直接影响到操作系统的性能。
1、先进先出算法(FIFO)
这是最早出现的置换算法,该算法总是淘汰最先进入内存的页面,即选择在内存中主流时间最长的页面换出,该算法实现简单。
2、最近最久未使用(LRU)
最近最久未使用的置换算法,是根据页面调入内存后的使用情况来决策的。
由于无法预测个页面将来的使用情况,只能根据最近的过去作为最近的将来的近似,因此,最近最久未使用算法是选择最近的最久未使用的页面予以淘汰。
3、最佳置换算法(OPT)
最佳置换算法是可以说是一种理想的页面置换算法,其所淘汰的页面是将来不会被使用的或者在最长的未来不会被使用的页面。
采用最佳置换算法,可以获得最新的缺页率。
三、总体设计。
1、先进先出算法(FIFO)
用数组存储当前无理块中页面的信息,变量temp记录内存中无理块页面置换状态,每进行一次置换,页面置换状态变化,便于下一次置换。
2、最近未使用算法(LRU)
用数组存储当前物理块中的页面信息,数组存储当前在物理块中值最小并且对应物理块中的页面进行置换。
【页面置换算法流程图】
页面序号大于物理块数
将页面载入物理块
随机生成页面序号
Start
否
页号在物理块中
否是
根据对应的页面置换算法置换页面
页面序列载完
否
End
四、详细设计。
主函数设计:
1.实现用户输入物理块数blockNum和页面总数pageNum的输入,b调用函数produceRandomPage()生成blockNum个随机页号存储在arrayPage数组中,然后通过函数printRandomPage()显示出随机页号,调用函数produceBlock()生成物理块blockNum块。
2.使用菜单来让用户控制算法的选择,FIFO和LRU算法的单独实现,或者同时实现
FIFO页面置换算法设计:
1.算法的主要函数fifoALG()完成了该算法的主要内容,根据物理块数和页面总数进行算法的实现,使用一个变量count记录当前最先载入页面的物理块号。
实现分两个小模块进行,一是当物理块未填满时,此时只要缺页即可进行页面分配,即,将页面号载入count块物理块中,二是当物理块填满了,当发生缺页时,置换count块物理块中的页面。
处理每个页面都进行一次物理块中页面的输出显示,并标注缺页与否,发生置换则标注置换;算法过程使用函数judgeExists()判断页面是否缺页。
最后计算置换率和缺页率并输出
LRU页面置换算法设计
2.算法的主要函数lruALG()完成了该算法的主要内容,根据用户输入的物理块数和页面数进行模拟页面置换。
整个算法需要使用一个数组record来记录每个在物理块中的页面的存在时长(每处理一个页面,标记时长为1);使用函数judgeLT()来判断最久使用的物理块号。
实现亦分两个小模块进行,一是当物理块未填满时,此时只要用judgeExists()判断页面缺页时,则进行页面载入,record相应值增1;二是当物理块填满时,判断页面缺页,则根据judgeLT()找出最久未使用的物理块号,将页面置换该物理块的页面。
上面处理每个页面过程均输出物理块内容,缺页与否、发生置换则标注。
最后计算置换率和缺页率并输出
五、完成的情况。
1、完成了明确目标、可行性分析、总体设计、详细设计和代码实现及编译测试、结果分析及经验总结。
2、该程序可以完成页面置换算法的模拟。
优先级置换算法和先进先出置换算法都能够模拟实现。
2、完成随机进程产生程序,可以根据用户输入的物理块数和页面访问次数来随机生成缺省页号,用户可以控制缺省页面的总数。
六、简要的使用说明。
(1)运行页面“置换算法.exe”。
结果如图所示:
(2)按提示输入物理块数和页面访问的总次数:
(3)根据提示选择1、先进先出算法2、最久未使用算法3、两种算法一起用0、退出系统。
例如,输入“1”,输入Enter,结果如下图:
(4)输入2,按Enter键,结果如下图:
(5)输入“0”,按Enter键则退出控制台。
七、总结:
特色、经验、教训和感受。
1、本程序模拟实现了操作系统的页面淘汰算法(FIFO和LRU),简单易用。
2、经过本次实践,我组成员更深刻地理解了操作系统的内存管理方式。
3、在编程过程中我们锻炼了C语言编程的技巧了,如数组的应用,链表的使用,程序的调试。
4、解决问题的过程中,学到了很多解觉问题的能力,比如应该先做好设计和规划不能盲目写代码。
否则后期会进展不利,错误很多,更改和纠错需要大量的时间。
5、两人一组配合更加默契,可以互相交流信息,既高效的完成了任务,又增进了合作的能力,同时促进了友谊。
八、参考文献。
《计算机操作系统》
【题目二:
进程调度算法的实现】
一、概述:
设计主要完成的任务和解决的主要问题
在多到程序运行环境下,进程数目一般多于处理机数目,使得进程要通过竞争来使用处理机。
这就要求系统能按某种算法,动态地把处理机分配给就绪的队列中的一个进程,使之运行,分配处理机的任务是由进程调度程序完成的。
一个进程被创建后,系统为了便于对进程进行管理,将系统中所有进程按其状态,将其组织成不同的进程队列。
于是系统中有运行进程队列、就绪队列和各种之间的进程等待队列。
进程调度的功能就是从就绪队列中挑选一个进程到处理机上运行。
进程调度的算法有多种,常用的有优先级调度算法、先来先服务算法、时间片轮转算法。
我们主要实现的是先来先服务算法和优先级算法的模拟。
二、设计的基本概念和原理。
对于先到先服务算法,之需要给定每个进程的进程号,然后依次顺序执行就可以了。
对于优先度调度算法,需要先判断有限度的大小,有限度最大的先执行,进程运行完毕以后,按照优先数的改变的原装进行改变,然后继续判断所有的优先数的大小,依旧是优先数最大的先执行,直到执行完毕。
三、总体设计。
1、设计一个结构体,用于抽象进程的各种属性,其中包括进程标识符,进程优先级,cpu时间统计,运行所需时间,进程状态。
2、设计一个结构体,用于模拟就绪队列,其具体方法采用链表形式。
3、对于先到先服务算法,判断就绪队列中每个进程的进程号,根据进程号的顺序依次给进程分配CPU,直到所有进程执行完毕为止。
4、对于优先度调度算法,首先根据所有进程的优先度,依次按照其优先度的大小降序的方式依次插入就绪队列,每当一个进程获得CPU并执行时,优先级降低2,每运行一次CPU时间增加4,当所获得的CPU时间大于或等于其所需的CPU时间时,进程执行完毕,否则变换就绪队列中进程顺序,使之保持进程优先级安装降序排列。
5、每个进程获得CPU时间并执行完毕之后,打印出进程队列中的信息,以便于查看就与队列中的进程信息。
【进程调度算法流程图】
开始
输入进程数目
将进程插入就绪队列
将CPU分配给进程
进程开始执行
进程所获CPU时间=运行所需时间
否
将该进程信息从就绪队列中移除
判断就绪队列是否为空
是
结束
四、详细设计。
进程调度模拟使用数据结构来模拟进程控制块,进程控制块PROC的成员为进程号pid,优先级pri,cpu时间cputime,运行总时间alltime,进程状态state。
用进程控制块队列来模拟进程的调度,队列结点结构为Node,成员为PROC控制块。
主函数设计
1. 使用菜单形式与用户会话,提供进出系统的选择操作。
2. 使用菜单形式让用户选择先到先服务算法还是优先级算法,每个算法还提供手动或者自动生成算法所需的参数(如进程数或者控制块的成员参数)。
3. 根据用户的选择进行相应的算法实现。
调用fifs()实现先来先服务算法,调用priority()实现优先权调度算法。
两算法实现
1)fifs()算法根据用户输入获取进程数,根据菜单选择分别实现用户输入进程参数和自动生成进程参数,使用循环处理每个先来的进程(顺序由控制块数组p的序号由小到大排列,下标小的则是先来的)。
使用Display()函数实现当前进程的处理,Display()函数通过进程控制块数组p的下标访问输出的方式实现进程的调度。
2) priority()算法根据用户输入获取进程数,根据菜单选择分别实现用户输入进程参数和自动生成进程参数。
p为进程控制块数组,循环实现将p_num个进程按优先级从高到低载入进程控制块队列。
使用PrintSortedList()实现队列的输出显示。
3) GetHeadElement()函数获取队列中最高优先级进程。
将其进入运行队列,PrintProc()函数实现当前控制块参数的输出。
对于每个获得cpu的进程其控制块中的优先级降2个级别(最小降到0),cpu时间加6。
若进程cpu时间>=运行总时间则进程运行完毕,否则再次将该进程按优先级高低载入调度队列,等待调度。
按以上方法依次完成所有进程调度
五、完成的情况。
1、完成了明确目标、可行性分析、总体设计、详细设计和代码实现及编译测试、结果分析及经验总结。
2、该程序可以完成进程调度算法的模拟。
实现了先到先服务和优先权调度两种调度算法。
3、可以由用户控制参数的大小,也可以由程序自动生成算法的参数。
4、参数包括进程数、进程的优先级、进程的运行时间。
六、简要的使用说明。
(1)运行“进程调度.exe”。
结果如下图所示:
(2)选择“1”,输入Enter。
结果如下图:
(3)输入“1”,按Enter键,选择先到先服务。
按提示输入参数后,结果如下图:
(4)输入“2”,按Enter键。
选择优先权调度。
按提示输入参数后,结果如下图:
(5)输入“0”,按Enter键,退出控制台。
七、总结:
特色、经验、教训和感受。
5、本程序模拟实现了操作系统的进程调度算法,简单易用。
6、经过本次实践,我组成员更熟练的理解了操作系统的进程管理方式。
7、在编程过程中我们锻炼了C语言编程的技巧了,如数组的应用,链表的使用,指针和函数的使用。
8、解决问题的过程中,学到了很多解觉问题的能力,比如应该先做好设计和规划不能盲目写代码。
否则后期会进展不利,错误很多。
5、两人一组配合更加默契,可以互相交流信息,既高效的完成了任务,又增进了合作的能力,同时促进了友谊。
八、参考文献。
《计算机操作系统》
附【
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 页面 淘汰 算法 实现 操作系统 课程设计