FIFO页面调度算法处理缺页中断_第1页
FIFO页面调度算法处理缺页中断_第2页
FIFO页面调度算法处理缺页中断_第3页
FIFO页面调度算法处理缺页中断_第4页
FIFO页面调度算法处理缺页中断_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、计算机科学与技术系 实 验 报 告专业名称 网络工程 课程名称 操作系统原理 项目名称FIFO页面调度算法处理缺页中断 班 级 12网络工程(1)班 学 号 1204031030 姓 名 方 彬 同组人员 朱佳宝、王卫、凌含涛、胡星瑞 实验日期 2014.12.02 一、实验目的与要求:(1) 熟悉、掌握先进先出FIFO算法,并实现用先进先出FIFO算法页面调度算法处理缺页中断.(2) 理解基于先进先出FIFO的内存管理调度算法,更好的掌握算法的思想,结合实验理解算法更直观,深刻具体。通过对先进先出FIFO的调度算法的模拟实验可以清楚的了解内存管理是如何调度的,以及加深对内存管理的了解。二、实

2、验内容1) 任务分析:以无歧义的陈述说明实验任务,并明确规定:(a) 输入的形式和输入值的范围; 在输入文本框中输入,输入值的范围在06之间(b) 输出的形式; 输出为缺页序列的表格(c) 程序所能达到的功能; 输入页号,输出缺页序列,实现先进先出算法的模拟(d) 测试数据:包括正确的输入及其输出结果和错误的输入及其输出结果。输入值为空:输入值越界:正确的输入值:2) 概要设计:说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。 本程序中定义了一个数组int mainstore = 3,2,1,0 ;用于模拟主存存放页;此外还定义了一个数组 int f

3、lag = 0,0,0,0,0,0,0 ;用于表明页号的修改标志位,便于之后的操作。 该程序的只要流程如下:开始检查内存是否有空闲块选择最先进入的页面置换读入访问页面信息存入页面输出置换出的页面序号结束未读完已读完有无3) 详细设计:实现概要设计中定义的所有数据类型,对每个操作只需要写出伪码算法;对主程序和其他模块也都需要写出伪码算法(伪码算法达到的详细程度建议为:按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序);画出函数和过程的调用关系图。using System;using System.Collections.Generic;using System.ComponentMode

4、l;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using lru;using change;namespace 操作系统 public partial class Form1 : Form public Form1() InitializeComponent(); /定义一个窗口类,在类里面定义一个窗口 int mainstore = 3,2,1,0 ;/定义数组用于存放页 i

5、nt flag = 0,0,0,0,0,0,0 ;/定义修改标志位的数组 int blo = 0;/用来控制在表格的哪一列输出页号序列 private void button1_Click(object sender, EventArgs e)/定义一个事件响应,即对输入进行操作 if (string.IsNullOrEmpty(txt.Text) MessageBox.Show("请输入页号!"); else if (int.Parse(txt.Text) > 6 | int.Parse(txt.Text) < 0) MessageBox.Show("

6、;输入页号不合法,请重新输入!");/判断输入是否合法 else int page = int.Parse(txt.Text); int i=0; if (page != mainstore0 && page != mainstore1 && page != mainstore2 && page != mainstore3)/插入页内存中不存在,进行FIFO算法 int lll; lll = mainstore0; if (flagmainstore0 = 0)/修改标志位为0,直接覆盖 mainstore0 = page; flagl

7、ll = 1; Else/修改标志位为1,数组执行FIFO for (i = 0; i < 3; i+) mainstorei = mainstorei + 1; mainstore3 = page; MessageBox.Show("当前调走页号"+lll.ToString ()+"n存入页号为"+page.ToString (); l0.Text = "0" l1.Text = "0" l2.Text = "0" l3.Text = "0" l4.Text = &q

8、uot;0" l5.Text = "0" l6.Text = "0" /标志位初始化; for (int j = 0; j < 4; j+) if (mainstorej = 0) l0.Text = "1" if (mainstorej = 1) l1.Text = "1" if (mainstorej = 2) l2.Text = "1" if (mainstorej = 3) l3.Text = "1" if (mainstorej = 4) l4.Te

9、xt = "1" if (mainstorej = 5) l5.Text = "1" if (mainstorej = 6) l6.Text = "1" /根据插入页号,将标志位置1 for (int k = 0;k < 7; k+) if (lll = 0) ll0.Text = "1" if (lll = 1) ll1.Text = "1" if (lll = 2) ll2.Text = "1" if (lll = 3) ll3.Text = "1&quo

10、t; if (lll = 4) ll4.Text = "1" if (lll = 5) ll5.Text = "1" if (lll = 6) ll6.Text = "1" /根据情况,将修改标志位置1 else MessageBox.Show("该页已在主存中!" ); blo+; if(blo=1) txt10.Text = mainstore0.ToString(); txt11.Text = mainstore1.ToString(); txt12.Text = mainstore2.ToString();

11、 txt13.Text = mainstore3.ToString(); else if(blo=2) txt20.Text = mainstore0.ToString(); txt21.Text = mainstore1.ToString(); txt22.Text = mainstore2.ToString(); txt23.Text = mainstore3.ToString(); else if(blo=3) txt30.Text = mainstore0.ToString(); txt31.Text = mainstore1.ToString(); txt32.Text = main

12、store2.ToString(); txt33.Text = mainstore3.ToString(); else if(blo=4) txt40.Text = mainstore0.ToString(); txt41.Text = mainstore1.ToString(); txt42.Text = mainstore2.ToString(); txt43.Text = mainstore3.ToString(); else if(blo=5) txt50.Text = mainstore0.ToString(); txt51.Text = mainstore1.ToString();

13、 txt52.Text = mainstore2.ToString(); txt53.Text = mainstore3.ToString(); else if(blo=6) txt60.Text = mainstore0.ToString(); txt61.Text = mainstore1.ToString(); txt62.Text = mainstore2.ToString(); txt63.Text = mainstore3.ToString(); else if(blo=7) txt70.Text = mainstore0.ToString(); txt71.Text = main

14、store1.ToString(); txt72.Text = mainstore2.ToString(); txt73.Text = mainstore3.ToString(); else if(blo=8) txt80.Text = mainstore0.ToString(); txt81.Text = mainstore1.ToString(); txt82.Text = mainstore2.ToString(); txt83.Text = mainstore3.ToString(); /根据插入数量,决定在输出表的指定列输出 private void 刷新ToolStripMenuI

15、tem_Click(object sender, EventArgs e) Form1 the_new = new Form1(); the_new.Show(); private void 退出ToolStripMenuItem_Click(object sender, EventArgs e) this.Close(); 4) 调试分析:(a) 调试过程中遇到哪些问题,是如何解决的; Q1:一开始的程序只能输入9个页号序列,超过之后就不能够再显示新的页号序列;(定义了一个变量BLO,用于记录输入页号数量,做求模运算mod 9,这样当超过九个之后又会从第一列开始覆盖) Q2:考虑到程序的用户

16、友好性,增加了序列刷新功能,刷新输出区域;(定义了一个button,点击后将输出区域初始化) Q3:开始没有理解修改标志位的作用,所以功能没有实现;(经过与同学的讨论,定义了一个数组flag,将页号作为flag的下标选择置1或置0) (b) 算法的时空分析:算法的时间复杂度和空间复杂度分析;5) 测试结果:包括输入和输出,测试数据应该完整和严格。 输入页号为5,则存入页号为5,调出页号为3因为此时3的修改标志为0,所以插入的页直接覆盖; 3被调出到磁盘,则修改标志置1;输入页号为3,则存入页号为3,调出页号为5因为此时5的修改标志为0,所以插入的页直接覆盖 5被调出到磁盘,则修改标志置1;输入

17、页号为4,则存入页号为4,调出页号为3因为此时3的修改标志为1,所以FIFO,执行出队列,4入队;6) 使用说明:如何使用编写的程序,详细列出每一步的操作步骤。操作界面如上图所示:操作步骤如下:打开“操作系统.exe”,弹出程序界面在页号输入框中输入页号,点击“插入”按钮在输出表格中显示执行后的页号序列,同时标志位,修改标志位会相应发生改变三、实验分析与小结请求分页存储管理是目前最常用的一种实现虚拟存储器的方式。每当所要访问的页面不在内存时,便产生一缺页中断,请求OS将所缺之页调入内存。如果内存已无空闲空间, 应该将哪个页面调出,须根据一定的算法来确定。先进先出(FIFO)是最早出现的页面置换算法,该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。本次实验是通过模拟FIFO(先进先出)调度算法处理缺页中断,主要思想是先把进程调入页面,按次序链接成一个队列,并设置指针一直指向相对最先进入主存的页面。然后将该页面调出,调入输入的页面。通过对先进先出FIFO算法的模拟实现,我加

温馨提示

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

评论

0/150

提交评论