姓名
学号
系
计算机
课教师
指导教师
评阅教师
实验点
综合楼B102
实验时间
2012926
实验课表现
出勤表现Q1(15+15(组长评分)30分)
分:
实验
总分
(Q1+Q2+Q3+Q4)
实验完成情况Q2(45分(组长教师评分加权均))
分:
实验编号实验名称:
实验七常页面置换算法模拟实验
实验目:
通模拟实现请求页式存储理种基页面置换算法解虚拟存储技术特点掌握虚拟存储请求页式存储理中种基页面置换算法基思想实现程较效率
实验容求(详见实验讲义实验指导书):
求:
1)求熟悉程序设计语言编写调试页面置换模拟程序求函数中测试
2)实验报告中必须包括:设计思想数定义(包括详细说明)处理流程(详细算法描述算法流程图)源代码运行结果体会等部分
3)必须模拟实验容中提算法中少2种页面置换算法
4) 较页面置换算法效率
容:编写程序页面置换算法中某2种分模拟分页系统统计页面访问序列情况页面置换算法引发缺页中断次数
1第二次机会算法(Second Chance)
2少算法(Least Recently UsedLRU )
3常算法(Not Frequently UsedNFU)
4未算法(Not Recently Used NRU)
5时钟页面置换算法
6老化算法(aging)
页框数量固定4虚拟页面数8实验输入访问页面序列01 3 271
实验软件(:)
DevC++Visio
实验容关键步骤(代码)Q3(15分)
分:
流程图:输入页面访问序列
取访问页号
查页表
否缺页?
置缺页标志flag’*’
算法淘汰页面
调入访问页面
否
FIFO算法流程图 LRU算法流程图:
函数关系解释图:
实现结果:
图1
图2
代码:
#include
#include
#define MEMORY_SIZE 4 *物理块数*
#define PROESS_SIZE 8 *页面号引串数*#include
#include
*全局变量*
int mSIZE4
int pSIZE8
static int memery[4]{0} *物理块中页号*
static int page[8]{0} *页面号引串*
static int temp[8][4]{0} *辅助数组*
*置换算法函数*
void FIFO()
void LRU()
void OPT()
void designBy()
*辅助函数*
void print(unsigned int t)
*函数*
int main()
{
int ikcode
designBy()
system(color 0A)
puts(请次输入页面号(8):)
for(i0i
system(cls)
system(color 0E)
do{
puts(输入页面号引串:)
for(k0k<(pSIZE1)20k++)
{
for(i20*k(i
if(((i+1)200)||(((i+1)20)&&(ipSIZE1)))
printf(d\npage[i])
else
printf(d page[i])
}
}
printf(* * * * * * * * * * * * * * * * * * * * * * *\n)
printf(* 请选择页面置换算法:\t\t\t *\n)
printf(* *\n)
printf(* 1先进先出(FIFO) 2久未(LRU) *\n)
printf(* 3退出 *\n)
printf(* * * * * * * * * * * * * * * * * * * * * * *\n)
printf(请选择操作:[ ]\b\b)
scanf(d&code)
switch(code)
{
case 1
FIFO()
break
case 2
LRU()
break
case 3
system(cls)
system(color 0A)
exit(0)
default
printf(输入错误请重新输入:)
}
printf(意键重新选择置换算法:>>>)
getch()
system(cls)
}while (code3)
getch()
}
void print(unsigned int t)
{
int ijkl
int flag
for(k0k<(pSIZE1)20k++)
{
for(i20*k(i
if(((i+1)200)||(((i+1)20)&&(ipSIZE1)))
printf(d\npage[i])
else
printf(d page[i])
}
for(j0j
for(i20*k(i
if(i>j)
printf( |d|temp[i][j])
else
printf( | |)
}
for(imSIZE+20*k(i
for(flag0l0l
flag++
if(flagmSIZE)*页面物理块中*
printf( )
else
printf( |d|temp[i][j])
}
*行显示20*
if(i200)
continue
printf(\n)
}
}
printf(\n)
printf(缺页次数:d\t\tt+mSIZE)
printf(缺页率:dd\nt+mSIZEpSIZE)
printf(置换次数:d\t\tt)
printf(访问命中率:d\n(pSIZE(t+mSIZE))*100pSIZE)
printf(\n)
}
*先进先出页面置换算法*
void FIFO()
{
int memery[10]{0}
int time[10]{0} *记录进入物理块时间*
int ijkm
int max0 *记录换出页*
int count0 *记录置换次数*
*前mSIZE数直接放入*
for(i0i
memery[i]page[i]
time[i]i
for(j0j
}
for(imSIZEi
*判断新页面号否物理块中*
for(j0k0j
if(memery[j]page[i])
k++
}
if(kmSIZE) *果物理块中*
{
count++
*计算换出页*
maxtime[0]