# include
# include
# define pagesize 8 // 页面尺寸大小
typedef struct BLOCK // 声明一种新类型 --物理块类型
{
int pagenum; // 页号
int accessed; // 访问量,其值表示多久未被访问
}BLOCK;
int pc; // 程序计数器,用来记录对应的页号
int n; // 缺页计数器,用来记录缺页的次数
static int num[320]; // 用来存储 320 条随机数
BLOCK block[pagesize]; //定义一大小为 8 的物理块数组
void init(); // 程序初始化函数
int findExist(int curpage); // 查找物理块中是否有该页面
int findSpace(); // 查找是否有空闲物理块
int findReplace(); // 查找应予置换的页面
void display (); // 显示
void randam(); // 产生 320 条随机数 ,显示并存储到 num[320]
void pagestring(); // 显示调用的页面队列
void OPT();
void LRU();
void FIFO();
void main()
{
int select;
printf(" 请输入第一个随机数 (0~320):");
randam();
printf("***** 对应的调用页面队列 *******\n");
pagestring();
do
{
printf("****************************************\n");
printf("1:OPT 2:LRU 3:FIFO 4:退出 \n");
printf("****************************************\n");
printf(" 请选择一种页面置换算法 :");
scanf("%d",&select);
printf("*******************************\n");
init();
switch(select)
{
case 1:
printf(" 最佳置换算法 OPT:\n");
printf("*****************\n");
OPT();
break;
case 2:
printf(" 最近最久未使用置换算法 LRU:\n");
printf("*************************\n*");
LRU();
break;
case 3:
printf(" 先进先出置换算法 FIFO:\n");
printf("*********************\n");
FIFO();
break;
}
}while(select!=4);
}
void init()
{
for(int i=0;i
{
block[i].pagenum=-1;
block[i].accessed=0;
pc=n=0;
}
}
int findExist(int curpage)
{
for(int i=0; i
{
if(block[i].pagenum == curpage )
return i; // 检测到内存中有该页面,返回 block 中的位置
}
return -1;
}
int findSpace()
{
for(int i=0;i
{
if(block[i].pagenum==-1)