• 大小: 11KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-13
  • 语言: C/C++
  • 标签: 操作系统  OPT  LRU  

资源简介

本实验使用一下算法 使用rand()函数随机产生页面号,用数组装入页面号,模拟页面调入内存中发生页面置换的过程。 整个过程,都是使用数组来实现每个算法,模拟队列,模拟堆栈的功能,实现每一个置换算法。 页面置换算法 最佳置换算法(OPT):选择永不使用或是在最长时间内不再被访问(即距现在最长时间才会被访问)的页面淘汰出内存。用于算法评价参照。 随机置换算法 (S):产生一个取值范围在0和N-1之间的随机数,该随机数即可表示应被淘汰出内存的页面。 先进先出置换算法(FIFO):选择最先进入内存即在内存驻留时间最久的页面换出到外存。 最近最久未使用置换算法(LRU): 以“最近的过去”作为“最近的将来”的近似,选择最近一段时间最长时间未被访问的页面淘汰出内存 Clock置换算法:为进入内存的页面设置一个访问位,当内存中某页被访问,访问位置一,算法在选择一页淘汰时,只需检查访问位,若为0,则直接换出,若为1,置该访问位为0,检测内存中的下一个页面的访问位。 改进型Clock置换算法: ①从查寻指针当前位置起扫描内存分页循环队列,选择A=0且M=0的第一个页面淘汰;若未找到,转② ② 开始第二轮扫描,选择A=0且M=1的第一个页面淘汰,同时将经过的所有页面访问位置0;若不能找到,转①

资源截图

代码片段和文件信息

#include
#include


using namespace std;


int const InsideCount = 6;//内存中存放的页面数
int count = 0;
int Inside[InsideCount];



int const PageCount   =10;//总的页面数
int Page[PageCount];


int insert = 0;//先到先出置换算法fcfo中表示 当内存满的时候,新进入的页号放的位置
int suiji   = 0; //随机置换算法randchange  当内存满的时候,新进入的页号放的位置

int state[InsideCount];//clock置换算法中,内存中的每个页面号对应的状态
int state2[InsideCount][2];// 二维数组,第一行第一列为访问位,第一行的第二列为修改位

double lost = 0.0;

bool isInside(int num)//检测页号是否在内存中
{
for(int i = 0; i < InsideCount; i++)
{
if(Inside[i] == Page[num])
{
state[i] = 1;
return true;
}
}

return false;
}

bool change()     //判断页面是否已经被修改
{
if((rand()%2+1) == 1 )
{
cout<<“该页面被修改“< return true;
}
else
return false;
}


bool isInside2(int num)//用于改进型clock置换算法,检测页号是否在内存中并把访问位和修改位置1
{
for(int i = 0; i < InsideCount; i++)
{
if(Inside[i] == Page[num])
{
if(change())
{
state2[i][0] = 1;
state2[i][1] = 1;
}
else
{
state2[i][0] = 1;
}
return true;
}
}

return false;
}


int whichpage()//用于改进型clock置换算法,判断内存中第几个需要被置换
{
int j;


for(j=0; j < InsideCount;j++ )
{
if(state2[j][0] == 0&&state2[j][1] == 0)
{

return j;

}
}

for(j=0; j < InsideCount;j++ )
{
if(state2[j][0] == 0&&state2[j][1] == 1)
{

return j;

}
state2[j][0] = 0 ;

}
for(j=0; j < InsideCount;j++ )
{
state2[j][0] = 0 ;

}

return whichpage();


void improveclock(int num) //改进型clock置换算法
{
int j;

if(isInside2(num))
{
cout<<“命中“<
for(int i=0 ; i     cout<<“                                              内存Inside[“< }

else
if(count == InsideCount)
{
lost++;

j =  whichpage();


Inside[j] = Page[num];
state2[j][0] = 1;

for(int i=0 ; i     cout<<“                                              内存Inside[“< }
else
{
//lost++;
Inside[count] = Page[num];
//state2[count][0] = 1;
count++;

for(int i=0 ; i     cout<<“                                              内存Inside[“< }

}
void clock(int num)//简单Clock置换算法
{
int j;

if(isInside(num))
{
cout<<“命中“<
for(int i=0 ; i     cout<<“                                              内存Inside[“< }

else
if(count == InsideCount)
{
lost++;
/*for(int j=0; j < InsideCount; j++)
{
for( k = num; k >0;k--)   //从当前的页号向前看,发现页号与内存中的页号相同,break ;比较内存中三个页号,看哪一个走的远,用max记录
{
if(Inside[j] == Page[k])
break;
}

if(  num - k > max)
{
  max = num - k;    
  maxchange =j;//j 表示把 内存中第j个Inside中的页面从内存拿出,把新的页面放入
}
}*/
for(j=0; j < InsideCount; )

评论

共有 条评论