操作系统请求分页式存储管理页面置换算法课程设计报告.doc_第1页
操作系统请求分页式存储管理页面置换算法课程设计报告.doc_第2页
操作系统请求分页式存储管理页面置换算法课程设计报告.doc_第3页
操作系统请求分页式存储管理页面置换算法课程设计报告.doc_第4页
操作系统请求分页式存储管理页面置换算法课程设计报告.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

22操作系统程序设计 课程设计报告课 题: 请求分页式存储管理页面置换算法姓 名: 学 号: 同组姓名: 专业班级: 指导教师: 设计时间: 评阅意见:评定成绩: 指导老师签名: 年 月 日目录1. 系统描述32. 分析与设计32.1.系统功能模块图32.2.系统文件结构描述32.3.系统功能流程图42.4UI设计以及操作说明:42.5.测试数据及期望113.系统测试124.总结心得体会125.参考文献136.核心代码131. 系统描述系统使用.net framework 4.0开发的,图形用户界面使用winform程序设计,功能模块分别实现了请求分页式存储管理的LRU算法 ,FIFO 算法。 通过虚拟系统存储的概念和实现方法,进行运行的时候不需要把所有页面都装入内存中,只需要将部分页面调入内存,就可以运行。在运行过程中,若要访问的页面不在内存中,则需用请求调入的功能将其装入内存中,如果此时内存中没有空白的物理块,就通过页面置换功能淘汰一个页面,根据LRU,FIFO两种淘汰算法来进行页面置换,并能计算出FIFO,LRU两种算法在不同内存容量中的的命中率。系统运行时通过输入访问内存的顺序,以及分配的内存页面数,来进行二种算法的页面置换,实现了虚拟存储的功能和特点。2. 分析与设计2.1.系统功能模块图 图4.1 页式存储管理模块划分 2.2.系统文件结构描述 2.3.系统功能流程图2.4UI设计以及操作说明:主窗体:#region 访问顺序 private void btnSure_Click(object sender, EventArgs e) if (txtOrder.Text.Equals() MessageBox.Show(访问顺序字符串不能为空!, 警告, MessageBoxButtons.OK, MessageBoxIcon.Warning); return; order = txtOrder.Text; listBox1.Items.Clear(); string page = order.Split( ); foreach (string pg in page) listBox1.Items.Add(pg); txtOrder.Text = ; allocation alca = new allocation(); this.Hide(); DialogResult d = alca.ShowDialog(); if (d = DialogResult.OK) this.Show(); btnAlloc.Enabled = true; btnFifo.Enabled = true; btnlru.Enabled = true; alpage = alca.page; #endregion输入访问内存顺序,点击确定:#region 确定内存页分配 private void button1_Click(object sender, EventArgs e) if (textBox1.Text.Equals() MessageBox.Show(内存页面数不能为空!, 警告, MessageBoxButtons.OK, MessageBoxIcon.Warning); return; page = Convert.ToInt32(textBox1.Text.Trim(); this.Close(); #endregion输入分配内存页面数,点击确定:点击FIFO置换:FIFO 算法:淘汰最先进入的页面,也就是淘汰进入内存中驻留时间最长的页面,先进先出。FIFO 计算#region 第二步,计算 /第二步,计算 /查看是否命中 for (fangwenyemianshu = 0; fangwenyemianshu cunchufangwenyemian.Length; fangwenyemianshu+) /对于某一列进行处理 lie = fangwenyemianshu; if (lie = 0)/如果为第台一列 cunchujisuanguocheng0, lie = Convert.ToInt32(cunchufangwenyemianlie); cunchushifoumingzhong0 = 0;/没命中为a else /如果不为a第台一列 shifoumingzhong = 0;/假设没命中 for (hang = 0; hang alpage; hang+) if (cunchujisuanguochenghang, lie - 1 = Convert.ToInt32(cunchufangwenyemianlie) shifoumingzhong = hang + 1;/如果相同,则是否命中为命中位置 cunchushifoumingzhonglie = shifoumingzhong; if (lie != 0) if (shifoumingzhong != 0)/是否命中 /如?果命中,则不变 for (hang = 0; hang 0; hang-) cunchujisuanguochenghang,lie= cunchujisuanguochenghang - 1, lie - 1; cunchujisuanguocheng0,lie= Convert.ToInt32(cunchufangwenyemianlie); #endregionLRU 算法:最近久未使用的置换算法的替换规则,根据内存调入页面后的使用情况,该算法赋予页面一个访问字段,用来记录一个页面自上次访问以来所经过的时间,当需要淘汰一个页面时选择现有页面其时间值最大的进行淘汰。Lru计算: for (int j = 0; j alpage; j+)/行列小于分配内存页面时,不需要淘汰页 for (int k = 0; k alpage; k+) for (fangwenyemianshu = 0; fangwenyemianshu ref_chars.Length; fangwenyemianshu+) lie = fangwenyemianshu; if (lie = 0)/如果为a第一列 cunchujisuanguocheng0, lie = Convert.ToInt32(ref_charslie); cunchushifoumingzhong0 = 0; else shifoumingzhong = 0; for (hang = 0; hang alpage; hang+) if (cunchujisuanguochenghang, lie - 1 = Convert.ToInt32(ref_charslie) shifoumingzhong = hang + 1;/如果相同,则是否命中为a命中位置 cunchushifoumingzhonglie = shifoumingzhong; if (lie != 0) if (shifoumingzhong != 0)/是否命中 /如果命中,则不变 for (hang = 0; hang alpage; hang+) cunchujisuanguochenghang, lie = cunchujisuanguochenghang, lie - 1; else /如果没有命中,则向下移一位,新的进来置换过程 for (hang = 0; hang alpage; hang+) cunchujisuanguochenghang, lie = cunchujisuanguochenghang, lie - 1; cunchujisuanguochenglie, lie = Convert.ToInt32(ref_charslie); bool flag = false; for (int loop = alpage; loop ref_chars.Length; loop+)/需要淘汰页时需要癮计算替换 flag = false; for (int i = 0; i alpage; i+) if (Phy_Blki.data = Convert.ToInt32(ref_charsloop) flag = true; if (flag)/不缺页,不置换,但是要计数 for (int i = 0; i alpage; i+) cunchushifoumingzhongloop = i; Phy_Blki.count = 0; for (int l = 0; l i; l+) Phy_Blki.count+; for (int k = i + 1; k alpage; k+) Phy_Blkk.count+; else/ 缺页,置换所有的页都不相等 for (int i = 0; i alpage; i+) if (maxCount = Phy_Blki.count) Phy_Blki.data = Convert.ToInt32(ref_charsloop); cunchushifoumingzhongloop = 0; Phy_Blki.count = 0; hang = i; for (int l = 0; l hang; l+) Phy_Blkhang.count+; for (int k = hang + 1; k alpage; k+) Phy_Blkk.count+; for (int hang = 0; hang alpage; hang+) cunchujisuanguochenghang, loop = Convert.ToInt32(Phy_Blkhang.data); arryMaxhang = Phy_Blkhang.count; maxCount = max(arryMax); StringBuilder strFang = new StringBuilder(); for (lie = 0; lie fangwenyemianshu; lie+) strFang.Append( + ref_charslie); txtFWYMS.Text = strFang.ToString(); DataGridViewTextBoxColumn column = new DataGridViewTextBoxColumn(); column.HeaderText = ref_charslie.ToString(); dataGridView1.Columns.Add(column); #endregion2.5.测试数据及期望输入内存顺序 分配物理块为:5 如 1 6 2 5 4 8 9 3 7 来计算缺页率为100%如 3 4 5 6 7 2 1 8 缺页率为85%,经过比较发现 LRU算法比FIFO 更加适用3.系统测试输入内存访问顺序为 1 6 2 5 4 8 9 3 7 分配页面数为4FIFO和LRU缺页率为100% 图3.21 FIFO 页面置换 图 3.2 LRU 页面置换4.总结心得体会 通过这次课程设计, 使自己更加深刻了解了虚拟存储管理的功能,以及如何实现,对LRU和FIFO两种算法也是理解更加彻底,锻炼了自己的实践能力。曾经对LRU 以及LRU算法有些模糊,但是现在已经完全区别开。现在对页面机制以及计算机系统的虚拟存储有了进一步的认识,比起之前确实有了进步。 另外,这次图形用户界面的程序设计,让我对平台有了更加深入的了解,对winform程序开发有了产生了新的兴趣。5.参考文献 1.张荛学 史美林 计算机操作系统 第三版 清华大学出版社2.汤小丹 汤子赢 计算机操作系统教程 西安电子科技大学出版社6.核心代码FIFO:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace 请求分页式存储管理 public partial class FIFO : Form #region 初始化 public FIFO() InitializeComponent(); #endregion #region 变量以及属性 public string order get; set; public int alpage get; set; string cunchufangwenyemian; int, cunchujisuanguocheng = new int100, 100; int cunchushifoumingzhong = new int100; int lie, hang; int shifoumingzhong; int fangwenyemianshu; int queyeshu; #endregion #region 窗体加载事件 private void FIFO_Load(object sender, EventArgs e) #region 第一步,初始化数据 /第一步,初始化数据 string f_order = order; int f_page = alpage; cunchufangwenyemian = f_order.Split( ); fangwenyemianshu = cunchufangwenyemian.Length; for (lie = 0; lie fangwenyemianshu; lie+)/初始化计算过程数组 for (hang = 0; hang f_page; hang+) cunchujisuanguochenghang, lie = -1; for (lie = 0; lie fangwenyemianshu; lie+)/初始化是否没有命中数组 cunchushifoumingzhonglie = 0; #endregion #region 第二步,计算 /第二步,计算 /查看是否命中 for (fangwenyemianshu = 0; fangwenyemianshu cunchufangwenyemian.Length; fangwenyemianshu+) /对于某一列进行处理 lie = fangwenyemianshu; if (lie = 0)/如果为第一列 cunchujisuanguocheng0, lie = Convert.ToInt32(cunchufangwenyemianlie);/将页面落下来 cunchushifoumingzhong0 = 0;/没命中为0 else /如果不为第一列 shifoumingzhong = 0;/假设没命中 for (hang = 0; hang alpage; hang+) if (cunchujisuanguochenghang, lie - 1 = Convert.ToInt32(cunchufangwenyemianlie) shifoumingzhong = hang + 1;/如果相同,则是否命中为命中位置 cunchushifoumingzhonglie = shifoumingzhong;/存储命中位置 if (lie != 0) if (shifoumingzhong != 0)/是否命中 /如果命中,则不变 for (hang = 0; hang 0; hang-) cunchujisuanguochenghang, lie = cunchujisuanguochenghang - 1, lie - 1; cunchujisuanguocheng0, lie = Convert.ToInt32(cunchufangwenyemianlie); #endregion #region 第三步,输出 /第三步,输出 StringBuilder strFang = new StringBuilder(); for (lie = 0; lie fangwenyemianshu; lie+) strFang.Append( + cunchufangwenyemianlie); txtFWYMS.Text = strFang.ToString(); DataGridViewTextBoxColumn column = new DataGridViewTextBoxColumn(); column.HeaderText = cunchufangwenyemianlie.ToString(); dataGridView1.Columns.Add(column); /输出cunchufangwenyemianlie /输出计算过程 for (hang = 0; hang alpage; hang+) int index = dataGridView1.Rows.Add(); for (lie = 0; lie fangwenyemianshu; lie+) dataGridView1.Rowsindex.Cellslie.Value = cunchujisuanguochenghang, lie.ToString(); if (dataGridView1.Rowsindex.Cellslie.Value.ToString() = -1) dataGridView1.Rowsindex.Cellslie.Value = *; /输出 cunchujisuanguochenghang,lie; /输出是否命中 StringBuilder strMing = new StringBuilder(); for (lie = 0; lie fangwenyemianshu; lie+) if (cunchushifoumingzhonglie.ToString() = 0) queyeshu+; strMing.Append( + cunchushifoumingzhonglie); txtQY.Text = strMing.ToString(); double num1 = Convert.ToDouble(queyeshu); double num2 = Convert.ToDouble(fangwenyemianshu); lbQueyelv.Text = Math.Round(num1 / num2) * 100), 2).ToString() + %; #endregion #endregion LRU:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace 请求分页式存储管理 public partial class LRU : Form #region 窗体初始化 public LRU() InitializeComponent(); #endregion #region 结构体定义页面 public struct stPage/页面定义 public int data;/数据项 public int count;/计数项 #endregion #region 变量以及属性 public string order get; set; public int alpage get; set; int cunchushifoumingzhong = new int100; int, cunchujisuanguocheng = new int100, 100; int hang, lie; int shifoumingzhong; int fangwenyemianshu; int queyeshu; #endregion #region 判断最大值的方法,用于判断淘汰页 int max(int a)/判断数组中的最大值 int max = 0; for (int i = 0; i max) max = ai; return max; #endregion #region 窗体加载事件 private void LRU_Load(object sender, EventArgs e) #region 第一步,初始化数据 /第一步,初始化数据 stPage Phy_Blk = new stPagealpage; string ref_chars = order.Split( ); int arryMax = new intalpage; int maxCount; fangwenyemianshu = ref_chars.Length; for (lie = 0; lie fangwenyemianshu; lie+)/初始化计算过程数组 for (hang = 0; hang alpage; hang+) cunchujisuanguochenghang, lie = -1; for (int i = 0; i alpage; i+)/物理块数组初始化 Phy_Blki.data = Convert.ToInt32(ref_charsi); Phy_Blki.count = 0; Phy_Blki.count += alpage - i - 1; arryMaxi = Phy_Blki.count; maxCount = max(arryMax); #endregion

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论