(完整word版)LFU页面置换算法

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

#include<>

#define m 9 //m表示页数

#define n 3 //n表示物理块数

#define o 10//表示最大物理块的个数

float interrupt=0; //产生缺页中断的次数

int k=0; //指向最先进入内存的页,即被淘汰的页

int PageTable[m+1]; //定义页表,总共m页,数组中数值是状态位=1表示该页在内存中,=0表示不在内存中,默认处置为0

int Block[n]; //定义物理块,总共n个,数组中数值表示对应物理块中装入的页的编号

int process[20]; //进程访问序列

int number=1; //用于标志访问次数

void Visit(int); //访问函数

static g=0;

int *pa=new int [o];

/****************************************************************************** **

主函数

******************************************************************************* */

void main (void)

{

int input;

cout<<"某进程共有"<

for(int length=0;input!=9;length++) //将输入序列存入process数组,长度为length

{

process[length]=input;

cin>>input;

}

int j=0;

for(j=0;j

pa[j]=0;

for(j=0;j

Block[j]=-1;

for(j=0;j

Visit(process[j]); //依次访问页process[j]

cout<<"共"<

}

/****************************************************************************** **

访问函数

******************************************************************************* */

void Visit(int x)//j是实参传给x,即页面的编号

{

int i,j,l=0,q=0,w=0;

cout<

for(i=0;i

{

if(Block[i]==-1) //访问页x时没有命中,且内存未装满,产生缺页中断,直接调入访问页

{

interrupt++; //缺页中断次数加1

PageTable[x]=1; //修改状态位

Block[i]=x; //页x调入物理块

cout<<"缺页中断内存未满调入页"<

for(j=0;j<=i;j++)cout<

cout<<"\n";

break;

}

if(PageTable[x]==1) //访问页x时命中

{

for(j=0;j

if(Block[j]==x)

break;

pa[j]++;

cout<<"命中物理块内的页为";

for(j=0;j

cout<<"\n";

break;

}

}

if(i==n) //访问页x时内存已装满,且没有命中,产生缺页中断,调入该页至内存,淘汰最先进入的页

{

int min=0;

for(j=0;j

if(pa[j]

min=pa[j];

for(l=0;l

{

if(pa[l]==min)

{

pa[l]=0;

cout<<"缺页中断淘汰页"<

interrupt++; //缺页中断次数加1

PageTable[Block[l]]=0; //页Block[k]被淘汰,状态位修改为0

Block[l]=x; //页x调入物理块

PageTable[x]=1; //页x状态位修改为1

for(j=0;j

cout<<"\n";

break;

}

}

}

number++; //访问次数加1

}

相关文档
最新文档