操作系统课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上海电力学院
计算机操作系统原理课程设计报告
题目名称:编写程序模拟虚拟存储器管理
姓名:杜志豪.学号:20121798
班级:2012053班.
同组姓名:孙嘉轶
课程设计时间:2014.6.30——2014.7.4
评语:
成绩:
目录
一、设计内容及要求 (4)
1. 1 设计题目 (4)
1.2 使用算法分析: (4)
1.2.1 FIFO算法(先进先出淘汰算法) (4)
1.2.2 LRU算法(最久未使用淘汰算法) (5)
1. 2.3 OPT算法(最佳淘汰算法) (5)
1.3 分工情况 (5)
二、详细设计 (6)
2.1 原理概述 (6)
2.2主要数据结构(主要代码) (6)
2.3算法流程图 (9)
2.3.1 主流程图 (9)
2.3.2 Optimal算法流程图 (10)
2.3.3 FIFO算法流程图 (10)
2.3.4 LRU算法流程图 (11)
2.4.1源程序文件名 (11)
2.4. 2执行文件名 (11)
三、实验结果与分析 (11)
3.1 Optimal页面置换算法结果与分析 (11)
3.2 FIFO页面置换算法结果与分析 (16)
3.3 LRU页面置换算法结果与分析 (20)
四、设计创新点 (24)
五、设计与总结 (27)
六、代码附录 (27)
课程设计题目
一、设计内容及要求
1.1 编写程序模拟虚拟存储器管理。假设以M页的进程分配
了N块内存(N 输入:设定系统分配的块数,以及进程页面引用序列(也可随 即产生)。 输出:显示每一次页面引用内存状态,最终显示产生缺页中断 的次数及页面置换的次数(假设初始状态内存没有装入任何页 面)。 必须分别使用以下置换算法完成模拟: (1)FIFO页面置换算法; (2)LRU页面置换算法; (3)最佳(Optimal)页面置换算法。 1.2 使用算法分析: 1.2.1 FIFO页面置换算法: 该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面以淘汰。该算法实现简单,只需把 一个进程已调入内存的页面,按照先后次序链接成一个队 列,并设置一个指针,称为替换指针,使它总是指向最老 的页面。但该算法并不是都适合实际情况,因为在进程中, 有些页面经常被访问,比如,含有全局变量、常用函数, 例程等得页面,FIFO算法并不能保证这些页面不被淘汰。 1.2.2LRU页面置换算法: 最近最久未使用(LRU)的页面置换算法是根据页面调入内存后的使用情况进行决策的。由于无法预测各页面 将来的使用情况,只能利用“最近的过去”作为“最近的 将来”的近似,因此,LRU置换算法是选择最近最久未 使用的页面予以淘汰。该算法赋予每个页面一个访问字 段,用来记录一个页面自上次被访问以来所经历的时间t, 当须淘汰一个页面时,选择有页面中t值最大的,即最近 最久为使用的页面以淘汰。 1.2.3最佳(Optimal)页面置换算法: Optimal算法是一种理论的算法,其所选择的被淘汰页面将是以后永久不使用的,或许是在最长(未来)时 间内不再被访问的页面。采用最佳置换算法,通常可保证 获得最低的缺页率。但由于人目前还无法预知一个进程在 内存的若干个页面中,哪一个页面是未来最长时间内不再 被访问的,因而该算法是无法实现的,便可以利用此算法 来评价其他算法。 1.3 分工情况:共同讨论并构思,杜志豪负责FIFO和LRU 算法的编程,孙嘉轶负责窗体界面和OPT算法的编写。编程中遇到 困难共同讨论并解决。 二、详细设计 2.1原理概述 定义一个整型变量int buffer=0来记录内存分块数,定 义一个string 类型的算法string suanfa来选择具体的算 法;用一个数组int[]xulie来存储页面序列,长度为20; 用一个数组int[]kuai来存储内存分配的物理块个数,长度 为5;用int s来记录具体的步骤数,用int num来记录页 面中断次数。空白表示物理块没有被使用。 2.2主要数据结构(代码)结构体: 输入的页面序列号: public Form1() //输入页面序列号 { InitializeComponent(); for (int i = 0; i < xulie.Length; i++) { xulie[i] = -1; } for (int i = 0; i < kuai.Length; i++) { kuai[i] = -1; } } 选择内存分块数目 private void fenkuai3_CheckedChanged(object sender, EventArgs e) //分块3按钮 { buffer = 3; } private void fenkuai4_CheckedChanged(object sender, EventArgs e) { buffer = 4; } private void fenkuai5_CheckedChanged(object sender, EventArgs e) { buffer = 5; } private void fifon_CheckedChanged(object sender, EventArgs e) //算法按钮 { suanfa = "fifo"; } private void lrun_CheckedChanged(object sender, EventArgs e) { suanfa = "lru"; } private void optn_CheckedChanged(object sender, EventArgs e) { suanfa = "opt"; }: 输入页面顺序数: private void input_TextChanged(object sender, EventArgs e) //输入页面顺序数 { zhuangtai.Visible = true; zhuangtai.Text = "输入页面顺序数:" + input.Text.Length; } 返回中断次数: public RichTextBox text() //返回中端次数 { return x; } public int num1() { return num;