FIFO页面调度算法处理缺页中断Word格式文档下载.docx

上传人:b****5 文档编号:21503406 上传时间:2023-01-30 格式:DOCX 页数:14 大小:138.24KB
下载 相关 举报
FIFO页面调度算法处理缺页中断Word格式文档下载.docx_第1页
第1页 / 共14页
FIFO页面调度算法处理缺页中断Word格式文档下载.docx_第2页
第2页 / 共14页
FIFO页面调度算法处理缺页中断Word格式文档下载.docx_第3页
第3页 / 共14页
FIFO页面调度算法处理缺页中断Word格式文档下载.docx_第4页
第4页 / 共14页
FIFO页面调度算法处理缺页中断Word格式文档下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

FIFO页面调度算法处理缺页中断Word格式文档下载.docx

《FIFO页面调度算法处理缺页中断Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《FIFO页面调度算法处理缺页中断Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。

FIFO页面调度算法处理缺页中断Word格式文档下载.docx

输入页号,输出缺页序列,实现先进先出算法的模拟

(d)测试数据:

包括正确的输入及其输出结果和错误的输入及其输出结果。

①输入值为空:

②输入值越界:

③正确的输入值:

2)概要设计:

说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。

本程序中定义了一个数组int[]mainstore={3,2,1,0};

用于模拟主存存放页;

此外还定义了一个数组int[]flag={0,0,0,0,0,0,0};

用于表明页号的修改标志位,便于之后的操作。

该程序的只要流程如下:

3)

详细设计:

实现概要设计中定义的所有数据类型,对每个操作只需要写出伪码算法;

对主程序和其他模块也都需要写出伪码算法(伪码算法达到的详细程度建议为:

按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序);

画出函数和过程的调用关系图。

usingSystem;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Threading.Tasks;

usingSystem.Windows.Forms;

usinglru;

usingchange;

namespace操作系统

{

publicpartialclassForm1:

Form

{

publicForm1()

InitializeComponent();

}//定义一个窗口类,在类里面定义一个窗口

int[]mainstore={3,2,1,0};

//定义数组用于存放页

int[]flag={0,0,0,0,0,0,0};

//定义修改标志位的数组

intblo=0;

//用来控制在表格的哪一列输出页号序列

privatevoidbutton1_Click(objectsender,EventArgse)//定义一个事件响应,即对输入进行操作

if(string.IsNullOrEmpty(txt.Text))

MessageBox.Show("

请输入页号!

"

);

elseif(int.Parse(txt.Text)>

6||int.Parse(txt.Text)<

0)

输入页号不合法,请重新输入!

//判断输入是否合法

else

intpage=int.Parse(txt.Text);

inti=0;

if(page!

=mainstore[0]&

&

page!

=mainstore[1]&

=mainstore[2]&

=mainstore[3])//插入页内存中不存在,进行FIFO算法

intlll;

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;

当前调走页号"

+lll.ToString()+"

\n存入页号为"

+page.ToString());

l0.Text="

0"

;

l1.Text="

l2.Text="

l3.Text="

l4.Text="

l5.Text="

l6.Text="

//标志位初始化;

for(intj=0;

j<

4;

j++)

if(mainstore[j]==0)

1"

if(mainstore[j]==1)

if(mainstore[j]==2)

if(mainstore[j]==3)

if(mainstore[j]==4)

if(mainstore[j]==5)

if(mainstore[j]==6)

}//根据插入页号,将标志位置1

for(intk=0;

k<

7;

k++)

if(lll==0)

ll0.Text="

if(lll==1)

ll1.Text="

if(lll==2)

ll2.Text="

if(lll==3)

ll3.Text="

if(lll==4)

ll4.Text="

if(lll==5)

ll5.Text="

if(lll==6)

ll6.Text="

}//根据情况,将修改标志位置1

该页已在主存中!

);

blo++;

if(blo==1){

txt10.Text=mainstore[0].ToString();

txt11.Text=mainstore[1].ToString();

txt12.Text=mainstore[2].ToString();

txt13.Text=mainstore[3].ToString();

}

elseif(blo==2){

txt20.Text=mainstore[0].ToString();

txt21.Text=mainstore[1].ToString();

txt22.Text=mainstore[2].ToString();

txt23.Text=mainstore[3].ToString();

elseif(blo==3){

txt30.Text=mainstore[0].ToString();

txt31.Text=mainstore[1].ToString();

txt32.Text=mainstore[2].ToString();

txt33.Text=mainstore[3].ToString();

elseif(blo==4){

txt40.Text=mainstore[0].ToString();

txt41.Text=mainstore[1].ToString();

txt42.Text=mainstore[2].ToString();

txt43.Text=mainstore[3].ToString();

elseif(blo==5){

txt50.Text=mainstore[0].ToString();

txt51.Text=mainstore[1].ToString();

txt52.Text=mainstore[2].ToString();

txt53.Text=mainstore[3].ToString();

elseif(blo==6){

txt60.Text=mainstore[0].ToString();

txt61.Text=mainstore[1].ToString();

txt62.Text=mainstore[2].ToString();

txt63.Text=mainstore[3].ToString();

elseif(blo==7){

txt70.Text=mainstore[0].ToString();

txt71.Text=mainstore[1].ToString();

txt72.Text=mainstore[2].ToString();

txt73.Text=mainstore[3].ToString();

elseif(blo==8){

txt80.Text=mainstore[0].ToString();

txt81.Text=mainstore[1].ToString();

txt82.Text=mainstore[2].ToString();

txt83.Text=mainstore[3].ToString();

//根据插入数量,决定在输出表的指定列输出

privatevoid刷新ToolStripMenuItem_Click(objectsender,EventArgse)

Form1the_new=newForm1();

the_new.Show();

privatevoid退出ToolStripMenuItem_Click(objectsender,EventArgse)

this.Close();

4)调试分析:

(a)调试过程中遇到哪些问题,是如何解决的;

Q1:

一开始的程序只能输入9个页号序列,超过之后就不能够再显示新的页号序列;

(定义了一个变量BLO,用于记录输入页号数量,做求模运算mod9,这样当超过九个之后又会从第一列开始覆盖)

Q2:

考虑到程序的用户友好性,增加了序列刷新功能,刷新输出区域;

(定义了一个button,点击后将输出区域初始化)

Q3:

开始没有理解修改标志位的作用,所以功能没有实现;

(经过与同学的讨论,定义了一个数组flag[],将页号作为flag[]的下标选择置1或置0)

(b)算法的时空分析:

算法的时间复杂度和空间复杂度分析;

5)测试结果:

包括输入和输出,测试数据应该完整和严格。

①输入页号为5,则存入页号为5,调出页号为3

②因为此时3的修改标志为0,所以插入的页直接覆盖;

3被调出到磁盘,则修改标志置1;

③输入页号为3,则存入页号为3,调出页号为5

④因为此时5的修改标志为0,所以插入的页直接覆盖

5被调出到磁盘,则修改标志置1;

⑤输入页号为4,则存入页号为4,调出页号为3

④因为此时3的修改标志为1,所以FIFO,执行出队列,4入队;

6)使用说明:

如何使用编写的程序,详细列出每一步的操作步骤。

操作界面如上图所示:

操作步骤如下:

①打开“操作系统.exe”,弹出程序界面

②在页号输入框中输入页号,点击“插入”按钮

③在输出表格中显示执行后的页号序列,同时标志位,修改标志位会相应发生改变

三、实验分析与小结

请求分页存储管理是目前最常用的一种实现虚拟存储器的方式。

每当所要访问的页面不在内存时,便产生一缺页中断,请求OS将所缺之页调入内存。

如果内存已无空闲空间,应该将哪个页面调出,须根据一定的算法来确定。

先进先出(FIFO)是最早出现的页面置换算法,该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。

本次实验是通过模拟FIFO(先进先出)调度算法处理缺页中断,主要思想是先把进程调入页面,按次序链接成一个队列,并设置指针一直指向相对最先进入主存的页面。

然后将该页面调出,调入输入的页面。

通过对先进先出FIFO算法的模拟实现,我加深了对内存管理调度的理解,理解了其如何调度分配内存的过程。

实验通过c#语言编写完成。

因为c#语言是以前没学过的,现在用起来比较生疏,所以在实验的过程中出现了许多错误。

面对这些问题,我们小组成员通过查阅资料、询问同学等方式解决各个问题,最终我们编写出了正确的FIFO页面置换算法的模拟程序。

此次实验作业的学习,不仅让我体会到c#语言等此类基础知识的重要性,也让我体会到团队合作的重要性,同时,最重要的收获就是对FIFO页面置换算法有了更直观深刻的认识和了解。

在日后的学习中我会记住此次实验的收获,并付诸于行动!

四、其它

(带注释的程序清单)

得分(百分制)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 商业计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1