FIFO页面调度算法处理缺页中断Word格式文档下载.docx
- 文档编号:21503406
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:14
- 大小:138.24KB
FIFO页面调度算法处理缺页中断Word格式文档下载.docx
《FIFO页面调度算法处理缺页中断Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《FIFO页面调度算法处理缺页中断Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。
输入页号,输出缺页序列,实现先进先出算法的模拟
(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页面置换算法有了更直观深刻的认识和了解。
在日后的学习中我会记住此次实验的收获,并付诸于行动!
四、其它
(带注释的程序清单)
得分(百分制)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FIFO 页面 调度 算法 处理 中断