本人想请详细解释一下置换算法里的循环体的意思 求帮助

C++语言 码拜 9年前 (2016-04-09) 880次浏览
#include<stdio.h>
#include <windows.h>  //system的前提
#define MSIZE 10      //最大物理块数
#define PSIZE 50      //最大页面数
char flag,pflag[PSIZE]; //缺页标志
int table[MSIZE][PSIZE]; //存放置换记录
int sum=0;               //记录每个算法的缺页次数
void OPT(int page[],int pSize,int mSize); //最佳置换算法
void FIFO(int page[],int pSize,int mSize); //先进先出置换算法
void LRU(int page[],int pSize,int mSize);  //最久未使用置换算法
void showTable(int page[],int pSize,int mSize); //输出置换过程
void main()
{
}
void showTable(int page[], int pSize, int mSize)
{
int i,j;
printf(“\n输出置换过程,”Y”标记缺页中断处\n”);
for (i=0;i<mSize;i++)     //i为块(列),j为页码(行)
{
for(j=0;j<pSize;j++)
printf(“%3d”,table[i][j]);
printf(“\n”);
}
for(i=0;i<pSize;i++)
printf(“%3c”,pflag[i]);
printf(“\n–\n”);
printf(“总的缺页次数:%d\n”,sum);
printf(“缺页中断率为:%.2f%%\n”,100.0*sum/pSize);
printf(“\n”);
}
void LRU(int page[],int pSize,int mSize)
{
int i,j,k;
int memery[MSIZE]={0};      //存储装入物理块中的页面
sum=0;
for(i=0;i<pSize;i++)        //对输入序列进行循环
{
j=0;
while((j<mSize)&&(page[i]!=memery[j]))  //对内存块进行循环,先从前往后查找有没有与即将访问页号相同的
j++;
if(j==mSize)
{
flag=”Y”;                           //缺页,则置标志为”Y”
sum+=1;                             //累计一次缺页
k=j-1;
}
else
{
flag=” “;
k=j;
}
pflag[i]=flag;          //记录当前页的缺页情况,即把当前i页面标记”Y”或” “.
while(k>0)              //总是把最长时间内未被使用的页放在最后一页
{
memery[k]=memery[k-1];
k–;
}
memery[0]=page[i];      //调入当前页面,放在第一个位置
for(k=0;k<mSize;k++)    //记录每一次的置换情况,一列一列记录,为了下面showTable
table[k][i]=memery[k];
}
showTable(page,pSize,mSize);
}
上面是代码,本人想问下LRU函数中那个for循环的详细解释 特别是memery[j]这个到底是什么 还有就是k=k-1和k=j又能表示什么
解决方案

20

代码功能归根结底不是别人帮本人看或讲解或注释出来的;而是被本人静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生本人领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

90

注释说明白了,就是循环查找page[i]有没有在memery中
然后假如找不到(if(j==mSize) ),那么就设置k为最后一个的索引
否则就是当前找到的索引

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明本人想请详细解释一下置换算法里的循环体的意思 求帮助
喜欢 (0)
[1034331897@qq.com]
分享 (0)