1、一、 源代码
#include
2、id init() { memset(pagelist,0,sizeof(pagelist)); //根据实验数据初始化 pagelist[0].textNumber=0; pagelist[0].flag=1; pagelist[0].block=5; pagelist[0].dirty=0; pagelist[0].disk=11; pagelist[1].textNumber=1; pagelist[1].flag=1; pagelist[1].block=8; pagelist[1].dirty=0; pagelist[1
3、].disk=12; pagelist[2].textNumber=2; pagelist[2].flag=1; pagelist[2].block=9; pagelist[2].disk=13; pagelist[3].textNumber=3; pagelist[3].flag=1; pagelist[3].block=1; pagelist[3].dirty=0; pagelist[3].disk=21; pagelist[4].textNumber=4; pagelist[4].flag=0; pagelist[4]
4、dirty=0; pagelist[4].disk=22; pagelist[5].textNumber=5; pagelist[5].flag=0; pagelist[5].dirty=0; pagelist[5].disk=23; pagelist[6].textNumber=6; pagelist[6].flag=0; pagelist[6].dirty=0; pagelist[6].disk=121; num=6; } void init_ex2() { po=0; P[0]=0;P[1]=1;P[2]=2;P[
5、3]=3; init(); } void work() { long p,q,i; char s[100]; bool stop=0; do { printf("请输入指令的页号、单元号,以及是否为存指令(输入exit结束循环):\n"); if (scanf("%ld%ld",&p,&q)!=2) { scanf("%s",s); if (strcmp(s,"exit")==0) { stop=1; } } else if(q>128) { printf("注意!所输入的地址
6、单元已经越界!\n请继续......\n"); q=-1; } else { scanf("%s",s); if (pagelist[p].flag) { printf("绝对地址=%ld\n",pagelist[p].block*SizeOfBlock+q); if (s[0]=='Y' || s[0]=='y') { pagelist[p].dirty=1;//已修改过 } } else { if (pagelist[P[po]].dirty)
7、 { //将更新后的内容写回外存 pagelist[P[po]].dirty=0; } pagelist[P[po]].flag=0;//修改要调出的页标志 printf("调出 %ld 调入 %ld\n",P[po],p); //显示调出调入页面 pagelist[p].block=pagelist[P[po]].block; pagelist[p].flag=1;//该页被调入内存 P[po]=p; po=(po+1)%M; } } }while (!stop); pr
8、intf("数组P 的值为:\n");
for (i=0;i 9、<=num;i++)
{
if(pagelist[i].flag==1)
printf("| %ld | %d | %ld | %d | %ld \n",pagelist[i].textNumber,pagelist[i].flag,pagelist[i].block,pagelist[i].dirty,pagelist[i].disk);
else
printf("| %ld | % 10、d | | %d | %ld \n",pagelist[i].textNumber,pagelist[i].flag,pagelist[i].dirty,pagelist[i].disk);
}
printf("____________________________________________________________________\n");
}
int main()
{
printf("初始化页表:\n");
init();
//打印页表
printInit();
init_ex2();
work(); //算法分析
return 0;
}
二、 结果如下:
A、初始化页表
B、测试数据
I、未发生缺页中断时
2、发生缺页中断时
3、退出时显示现在主存中的页面号(即数组的值)。






