系统结构实验二

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

实验二计算机存储体系的页面替换算法(3学时)

一、实验目的

当计算机内存已满而又发生页面失效时,替换算法就要选择主存中哪个页作为被替换的页。通过本实验可以帮助学生理解虚拟存储器中页面替换的基本思想,深刻体会各种页面替换算法的性能差异。

二、实验环境

开发工具使用windows平台下的vc++6.0。

三、实验内容

编写一个模拟算法,模拟实现虚拟存储器的先进先出、近期最少使用、优化等算法。在程序设计的过程中,要求体会各种页面替换算法的优点和缺点,并计算出各种替换算法的命中率。

四、实验结果及完成情况

一、整个实验过程的思路可以整理如下:

1、初始化虚拟存储空间。

定义void DataInput()用来申请物理块BlockNum和页面数DataMax

2、产生一个随机调用页面的序列。

void DataInput()还可以随机成生调用页面序列

3、实现各种页面替换算法。

void FIFO(); // FIFO 先进先出算法函数

void Optimal(); // Optimal优化替换算法函数

void LRU(); // LRU近期最少使用算法函数

4、计算各种页面替换算法的命中率。

void DataOutput()用来显示数据和命中率

主要变量和函数:

const int DataMax=100;

const int BlockNum = 10;

int DataShow[BlockNum][DataMax]; // 用于存储要显示的数组

bool DataShowEnable[BlockNum][DataMax]; // 用于存储数组中的数据是否需要显示int Data[DataMax]; // 保存数据

int Block[BlockNum]; // 物理块

int count[BlockNum]; // 计数器

int N ; // 页面个数

int M;//最小物理块数

int ChangeTimes;

void DataInput(); // 输入数据的函数

void DataOutput();//输出数据的函数

void FIFO(); // FIFO 先进先出算法函数

void Optimal(); // Optimal优化替换算法函数

void LRU(); // LRU近期最少使用算法函数

二、实验中的几点注意事项:

1.虚拟存储空间的大小要合适。

2.根据能够存储页面的多少确定随机调用页面的序列。

五、主要代码:

void FIFO()

{

int i,j;

bool find;

int point;

int temp; // 临时变量

ChangeTimes = 0;

for(j=0;j

for(i=0;i

DataShowEnable[j][i] = false; // 初始化为false,表示没有要显示的数据

for(i=0;i

{

count[i] = 0; // 大于等于BlockNum,表示块中没有数据,或需被替换掉所以经这样初始化(3 2 1),每次替换>=3的块,替换后计数值置1,同时其它的块计数值加1,成了(1 3 2 ),见下面先进先出程序段

}

for(i=0;i

{// 增加count

for(j=0;j

count[j]++;

find = false; // 表示块中有没有该数据

for(j=0;j

{

if( Block[j] == Data[i] )

{

find = true;

}

}

if( find ) continue; // 块中有该数据,判断下一个数据块中没有该数据

ChangeTimes++; // 缺页次数++

if( (i+1) > M ) // 因为i是从0开始记,而M指的是个数,从1开始,所以i+1

{//获得要替换的块指针

temp = 0;

for(j=0;j

{

if( temp < count[j] )

{

temp = count[j];

point = j; // 获得离的最远的指针

} }

}

else point = i;

// 替换

Block[point] = Data[i];

count[point] = 0; // 更新计数值

for(j=0;j

{

DataShow[j][i] = Block[j];

DataShowEnable[i

}

}

cout<< endl<<"FIFO算法:"<< endl;// 输出信息

DataOutput();

}

void Optimal()

{

int i,j,k;

bool find;

int point;

int temp; // 临时变量,比较离的最远的时候用

ChangeTimes = 0;

for(j=0;j

for(i=0;i

DataShowEnable[j][i] = false; // 初始化为false,表示没有要显示的数据

for(i=0;i

{

find = false; // 表示块中有没有该数据

for(j=0;j

{

if( Block[j] == Data[i] ) find = true;

}

if( find ) continue; // 块中有该数据,判断下一个数据块中没有该数据,最优算法ChangeTimes++; // 缺页次数++

for(j=0;j

{// 找到下一个值的位置

find = false;

for( k =i;k

{

if( Block[j] == Data[k] )

{

find = true;

count[j] = k;

break;

相关文档
最新文档