}
代码详细说明:
在本例中,我设定了页面调度页块数为3,要访问的页面序列长度为20.从随机数获取20个访问的页面后进行页面调度算法,并将每次调度完的结果打印到控制台面板上,页面调度的具体算法为:
维护一个useTime数组,其中存储着三个页块的上次使用时间,在每次向页块中调度内容/页块或页面访问命中页块时,更新被访问的页块的使用时间,如果页面访问不命中页块时,则选择useTime数组中最小的那一块,即最久没使用的页块,置换其中的内容。
下面是针对代码的说明:
srand(time(NULL));
intvisit[20][2];
memset(visit,-1,sizeof(visit));
for(inti=0;i<20;i++)
visit[i][0]=rand()%8;
intpage[3][20];
memset(page,-1,sizeof(page));
intuseTime[3];
memset(useTime,0,sizeof(useTime));
以上几行代码的作用为生成一个随机的20位的页面访问序列,由于对8作了取余操作,所以生成的访问序列下标为0-7,并存储在visit数组的第0位中,且在visit数组的第1位中赋值-1。
同时生成page数组以实现对3个页块的随时间变化的追踪,维护useTime数组以保存3个页块的上次使用时间。
下面介绍代码的调度实现部分
intpick(intpage[][20],intvisit[][2],inttime,intuseTime[]){
//如果命中了,就返回下标-3,比如如果0帧命中,返回-3
//如果不命中,选择一个最久没有访问到的帧,返回帧下标
cout<<"输出usetime:
";
cout<for(inti=0;i<3;i++){//先遍历一遍,看有没有命中的
if(page[i][time-1]==visit[time][0]){
cout<<"time"<