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

  • 格式:doc
  • 大小:150.00 KB
  • 文档页数:12

-------------精选文档-----------------

可编辑 实验报告五

实验名称: 模拟页面置换算法FIFO、LRU的实现

日期:2015-12-9 班级:13级计科 学号: 姓名:

一、 实验目的

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

二、 实验内容

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

三、 项目要求与分析

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

LRU算法当需要置换页面时,主要通过置换进入内存中最久没有被访问的页面而达到最近最久未使用的目的。程序中可以通过标志位进行记录。

四、 具体实现

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

public class FIFO {

/**

* 内存块的个数

*/

public static int N ;

/**

* 内存块数组

*/ -------------精选文档-----------------

可编辑 Object[] array = new Object[N];

/**

* 要访问的页面数组

*/

public static int[]visit;

private int size;

/**

* 内存是非空为否

* @return

*/

public boolean isEmpty() {

if(0 == size)

return true;

else

return false;

}

/**

* 内存是非空满

* @return

*/

public boolean isFulled() {

if(size >= N) -------------精选文档-----------------

可编辑 return true;

else

return false;

}

/**

* 元素(页框)的个数

* @return

*/

public int size() {

return size;

}

/**

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

* @param o

* @return

*/

public int indexOfElement(Object o) {

for(int i=0; i

if(o == array[i]) {

return i;

}

} -------------精选文档-----------------

可编辑 return -1;

}

/**

* 页面转换

* @param obj

*/

public Object trans(Object obj){

Object e = null;

int t = 0;

if(indexOfElement(obj) != -1) {

t = indexOfElement(obj);

for(int i=t; i

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

}

array[size-1] = obj;

} else {

if(!isFulled()){

array[size] = obj;

size ++;

} else {

for(int i=0; i

array[i] = array[i+1]; -------------精选文档-----------------

可编辑 }

array[size-1] = obj;

}

}

if( -1 == t) {

return null;

} else {

return array[t];

}

}

/**

* 输出内存区中的各数据

*/

public void showMemoryBlock() {

for(int i=0; i

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

}

}

/**

* 清空队列(页框)

*/

public void clear(){ -------------精选文档-----------------

可编辑

}

/**

* @param args

*/

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

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

N=sc.nextInt();

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

int n=sc.nextInt();

visit=new int[n];

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

for(int i=0;i

visit[i]=sc.nextInt();

FIFO fifo = new FIFO();

for(int i=0; i

fifo.trans(visit[i]);

fifo.showMemoryBlock();

System.out.println();

}

运行结果: -------------精选文档-----------------

可编辑

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

public class LRU {

static int volum;// 栈的容量

static Listlist=new LinkedList();

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

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

static int count=0;//记录缺页次数

public static void main(String []args)

{

Scanner sc = new Scanner(System.in); -------------精选文档-----------------

可编辑 System.out.print("请输入栈的容量:");

volum=sc.nextInt();

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

int n=sc.nextInt();

visit=new int[n];

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

for(int i=0;i

visit[i]=sc.nextInt();

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

System.out.println("置换页面的数目为:"+count);

}

public static void sLRU()

{

int index=0;

while(index

{

boolean flag=false;

if(list.size()<=volum)

{

for(int i=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

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