页面置换算法(操作系统试验)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验4 页面置换算法(2学时)

一、实验目的

通过实验加强对虚拟存储管理中页面置换算法的理解和掌握。

二、实验内容

编写程序实现虚拟存储管理中OPT,FIFO,LRU页面置换算法。

三、实验要求

1、任意给出一组页面访问顺序(如页面走向是1、

2、5、7、5、7、1、4、

3、5、6、

4、3、2、1、

5、2)。

2、分配给该作业一定的物理块(如3块、4块等)。

3、利用OPT,FIFO,LRU页面置换算法模拟页面置换过程并计算其缺页率。

4、每访问一个页面均需给出内存中的内容(内存中的页面号),若有淘汰还需给出淘汰的页面号。

5、通过给出特殊的页面访问顺序,分配不同的物理块,利用FIFO 算法计算其缺页率,进一步理解Belady现象。

6、(附加)实现CLOCK置换算法,修改位可在确定页面号时直接任意给出。

代码部分:

#include

#include

#include

void rand(int n,int p[])//这函数是产生n个1~10的随机数放到p[]数组里面

{

int START=1;

int END=10;

int v;

int i;

int a;

srand(time(NULL));

for(i=0; i

{v=rand()%(END-START+1)+START;

p[i]=v;

cout<

}

}

struct Pro

{

int num,time;

//num存放具体的内容,time在不同算法里面有不同的意义

}; //它们是物理块和页面的数据结构

int Input(int m,int N,Pro *p,Pro *page)//完成p[]数组和page[]的初始化工作{ //p[]数组是存放页面的空间,m是页面的长度

//page[]是可以使用的物理块,N是物理块的大小

cout<

int *p2=new int[m];

rand(m,p2);

for(int i=0;i

{

p[i].num=p2[i];

p[i].time=0;

}

for(i=0;i

{

page[i].num=0;

page[i].time=N+2-i;

}

return m;

}

int Search(int e,Pro *page,int N)//算法里面都要用到它。

{//它是找e页是否在page物理块中,N是物理块的大小

for(int i=0;i

if(e==page[i].num)

return i;//如果找到,就返回在物理块中的位置给Search

return -1;//找不到,就返回-1

}

int Max(Pro *page,int N)//LRU算法用到的

{//找出在page块中,time最大的值和位置,同时位置返回

//time最大,就代表了最久没被使用的数

int e=page[0].time,i=0;

int k=0;

while(i

{

if(e

{

k=i;

}

i++;

}

return k;

}

int Compfu(Pro *page,int i,int t,Pro p[],int m)//OPT算法用到的

{

//找出如果page[t]要等于p,并且zai p[i]~p[m]这个区间内,走的次数,最大的数

int count=0;//count是保存走的步数

for(int j=i;j

{

if(page[t].num==p[j].num )break;//如果相等,跳出循环

相关文档
最新文档