FIFO页面调度算法处理缺页中断
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机科学与技术系
实验报告
专业名称网络工程
课程名称操作系统原理
项目名称FIFO页面调度算法处理缺页中断
班级 12网络工程(1)班
学号 1204031030
姓名方彬
同组人员朱佳宝、王卫、凌含涛、胡星瑞
实验日期 2014.12.02
一、实验目的与要求:
(1)熟悉、掌握先进先出FIFO算法,并实现用先进先出FIFO算法页面调度算法处理缺页中断.
(2)理解基于先进先出FIFO的内存管理调度算法,更好的掌握算法的思想,结合实验理解算法更直观,深刻具体。通过对先进先出FIFO的调度算法的模拟实验可以清楚的了解内存管理是如何调度的,以及加深对内存管理的了解。
二、实验内容
1)任务分析:以无歧义的陈述说明实验任务,并明确规定:
(a)输入的形式和输入值的范围;
在输入文本框中输入,输入值的范围在0~6之间
(b) 输出的形式;
输出为缺页序列的表格
(c) 程序所能达到的功能;
输入页号,输出缺页序列,实现先进先出算法的模拟
(d) 测试数据:包括正确的输入及其输出结果和错误的输入及其输出结果。
①输入值为空:
②输入值越界:
③正确的输入值:
2)概要设计:说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。
本程序中定义了一个数组int[] mainstore = {3,2,1,0 };用于模拟主存存放页;此外还定义了一个数组int[] flag = {0,0,0,0,0,0,0 };用于表明页号的修改标志位,便于之后的操作。
该程序的只要流程如下:
3)详细设计:实现概要设计中定义的所有数据类型,对每个操作只需要写出伪码算法;对主程序和其他模块也都需要写出伪码算法(伪码算法达到的详细程度建议为:按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序);画出函数和过程的调用关系图。
using System;
using System.Collections.Generic;
using ponentModel;
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 };//定义数组用于存放页
int[] 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("输入页号不合法,请重新输入!");
//判断输入是否合法
else
{
int page = int.Parse(txt.Text);
int i=0;
if (page != mainstore[0] && page != mainstore[1] && page != mainstore[2] && page != mainstore[3])//插入页内存中不存在,进行FIFO算法
{
int lll;
lll = mainstore[0];
if (flag[mainstore[0]] == 0)//修改标志位为0,直接覆盖
{
mainstore[0] = page;
flag[lll] = 1;
}
Else//修改标志位为1,数组执行FIFO
{
for (i = 0; i < 3; i++)
mainstore[i] = mainstore[i + 1];
mainstore[3] = page;
}
MessageBox.Show("当前调走页号"+lll.ToString ()+"\n存入页号为"+page.ToString ());
l0.Text = "0";
l1.Text = "0";
l2.Text = "0";
l3.Text = "0";
l4.Text = "0";
l5.Text = "0";
l6.Text = "0";
//标志位初始化;
for (int j = 0; j < 4; j++)
{
if (mainstore[j] == 0)
l0.Text = "1";
if (mainstore[j] == 1)
l1.Text = "1";
if (mainstore[j] == 2)
l2.Text = "1";
if (mainstore[j] == 3)
l3.Text = "1";
if (mainstore[j] == 4)
l4.Text = "1";
if (mainstore[j] == 5)
l5.Text = "1";
if (mainstore[j] == 6)
l6.Text = "1";
}//根据插入页号,将标志位置1
for (int k = 0;k < 7; k++)
{
if (lll == 0)
ll0.Text = "1";
if (lll == 1)
ll1.Text = "1";