模拟页面置换算法FIFOLRU的实现.docx

上传人:b****2 文档编号:12915152 上传时间:2023-04-22 格式:DOCX 页数:11 大小:113.99KB
下载 相关 举报
模拟页面置换算法FIFOLRU的实现.docx_第1页
第1页 / 共11页
模拟页面置换算法FIFOLRU的实现.docx_第2页
第2页 / 共11页
模拟页面置换算法FIFOLRU的实现.docx_第3页
第3页 / 共11页
模拟页面置换算法FIFOLRU的实现.docx_第4页
第4页 / 共11页
模拟页面置换算法FIFOLRU的实现.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

模拟页面置换算法FIFOLRU的实现.docx

《模拟页面置换算法FIFOLRU的实现.docx》由会员分享,可在线阅读,更多相关《模拟页面置换算法FIFOLRU的实现.docx(11页珍藏版)》请在冰豆网上搜索。

模拟页面置换算法FIFOLRU的实现.docx

模拟页面置换算法FIFOLRU的实现

实验报告五

实验名称:

模拟页面置换算法FIFO、LRU的实现

日期:

2015-12-9班级:

13级计科学号:

姓名:

一、实验目的

了解页面置换的概念,理解页面置换的算法加深对页面置换算法的理解。

二、实验内容

Java编程语言实现FIFO和LUR页面算法。

三、项目要求与分析

FIFO算法当需要置换页面时,主要通过置换最早进入内存的页面从而达到先进先出的目的。

LRU算法当需要置换页面时,主要通过置换进入内存中最久没有被访问的页面而达到最近最久未使用的目的。

程序中可以通过标志位进行记录。

四、具体实现

1.FIFO算法实现代码以及运行结果:

publicclassFIFO{

/**

*内存块的个数

*/

publicstaticintN;

/**

*内存块数组

*/

Object[]array=newObject[N];

/**

*要访问的页面数组

*/

publicstaticint[]visit;

privateintsize;

/**

*内存是非空为否

*@return

*/

publicbooleanisEmpty(){

if(0==size)

returntrue;

else

returnfalse;

}

/**

*内存是非空满

*@return

*/

publicbooleanisFulled(){

if(size>=N)

returntrue;

else

returnfalse;

}

/**

*元素(页框)的个数

*@return

*/

publicintsize(){

returnsize;

}

/**

*查找元素o在数组中的位置

*@paramo

*@return

*/

publicintindexOfElement(Objecto){

for(inti=0;i

if(o==array[i]){

returni;

}

}

return-1;

}

/**

*页面转换

*@paramobj

*/

publicObjecttrans(Objectobj){

Objecte=null;

intt=0;

if(indexOfElement(obj)!

=-1){

t=indexOfElement(obj);

for(inti=t;i

array[i]=array[i+1];

}

array[size-1]=obj;

}else{

if(!

isFulled()){

array[size]=obj;

size++;

}else{

for(inti=0;i

array[i]=array[i+1];

}

array[size-1]=obj;

}

}

if(-1==t){

returnnull;

}else{

returnarray[t];

}

}

/**

*输出内存区中的各数据

*/

publicvoidshowMemoryBlock(){

for(inti=0;i

System.out.print(array[i]+"");

}

}

/**

*清空队列(页框)

*/

publicvoidclear(){

}

/**

*@paramargs

*/

publicstaticvoidmain(String[]args){

Scannersc=newScanner(System.in);

System.out.print("请输入内存块的数量:

");

N=sc.nextInt();

System.out.print("请输入总页面数目:

");

intn=sc.nextInt();

visit=newint[n];

System.out.println("请输入各个页的页面号码:

");

for(inti=0;i

visit[i]=sc.nextInt();

FIFOfifo=newFIFO();

for(inti=0;i

fifo.trans(visit[i]);

fifo.showMemoryBlock();

System.out.println();

}

运行结果:

2.LUR算法实现代码以及运行结果:

publicclassLRU{

staticintvolum;//栈的容量

staticListlist=newLinkedList();

//链表用来模拟栈存放页面

staticint[]visit;//要访问的页面数组

staticintcount=0;//记录缺页次数

publicstaticvoidmain(String[]args)

{

Scannersc=newScanner(System.in);

System.out.print("请输入栈的容量:

");

volum=sc.nextInt();

System.out.print("请输入总页面数目:

");

intn=sc.nextInt();

visit=newint[n];

System.out.println("请输入各个页的页面号码:

");

for(inti=0;i

visit[i]=sc.nextInt();

sLRU();//调用最近最久未使用算法

System.out.println("置换页面的数目为:

"+count);

}

publicstaticvoidsLRU()

{

intindex=0;

while(index

{

booleanflag=false;

if(list.size()<=volum)

{

for(inti=0;i

{

if((int)(list.get(i))==visit[index])

{

list.remove(i);//先删除

list.add(visit[index]);//再添加到尾部

flag=true;

break;

}

}

if(!

flag)

{

if(list.size()

{//如果栈未满,而且此页面没有在栈中,就将它入栈

list.add(visit[index]);

}

else

{//如果栈已经满了,且该页面号码没有在栈中,就把栈底元素删除,将新页插入

inttemp=list.get(0);

list.remove(0);//最开始一个换出

list.add(visit[index]);//加到末尾

count++;

System.out.println("开始换页了,将栈底的"+temp+"换出");

System.out.println("这也是没有办法的事情,毕竟栈是有限的");

}

}

System.out.print("经过第"+(index+1)+"个页面的栈内容为");

for(intk=0;k

System.out.print(list.get(k)+"");

System.out.println();

index++;

}

运行结果:

五、所遇问题与解决方法

问题:

针对于FIFO算法定义选择在内存中驻留时间最久的页面予以淘汰,对于内存中的驻留时间理解复杂了不知道如何下手。

解决方案:

我们只需要设置一个先进先出队列就可以。

最先进入内存的页面最早被转换出去。

六、实验总结

1.通过本次实验,加深了对操作系统的页面置换有了一定的了解,并能够用高级语言进行模拟演示。

通过查阅相关资料基本掌握了JAVA应用程序编写的基本方法。

2.两种页面置换算法FIFO和LUR理解起来相当容易,但在实际编程实现的时候需要注意各种细节,需要耐心细致,实际编程过程中遇到一些细节性的问题确实需要仔细考虑才行。

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

当前位置:首页 > IT计算机

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

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