实验**如下:
#include<>
#include<>
#include<>
#define mempagecount 4 //内存物理块数目。
#define instructioncount 20 //指令页面数目。
struct page
int serial; /页面号。
int time; /时间计数。
mempage[mempagecount];
int main()
int i,j,k,m,n; /指令页面集合,可以考虑让页面指令集合随机生成。
int instruction[instructioncount];
int mem_counter; /内存页面集合计数器。
int switch_counter; /置换次数。
int switch_flag; /置换的位置标志。
int lost_counter; /缺页次数。
int exist_flag; /判断是否已经在内存中的标志。
int distance[mempagecount];/用于标记内存中已有页面哪个是最久的将来不使用的。
srand(time(null));time(null)是得到当前时间,srand()是取一个种子好生成随机数*/
for(n=0;n instruction[n]=rand()%10;
printf("当前随机生成的页面号为:");
for(n=0;n printf(" d",instruction[n]);
printf("");
do{lost_counter=0;
switch_counter=0;
mem_counter=0;
switch_counter=0;
lost_counter=0;
switch_flag=0;
exist_flag=0;
printf("请选择算法: 0、结束 1、fifo算法 2、opt算法 3、lru算法:")
scanf("%d",&m);
printf("置换顺序依次为:");
switch(m)
case 1:
for(i=0;imempage[i].serial=-1;
mempage[i].time=0;
依次调入新的指令页面,如果内存页面满且新页面不存在,则置换页面。
for(i=0;i
for(j=0;jif(mempage[j].serial==instruction[i]){
exist_flag=1;
break;
如果内存中没有该页面,执行缺页和置换步骤。
if(exist_flag!=1){
内存页面集合未满,缺页不置换。
if(mem_countermempage[mem_counter].serial=instruction[i];
mempage[mem_counter].time=0;
mem_counter=mem_counter+1;
else{ /缺页且发生置换。
switch_flag=0;
取得最先进入的页面在memepage中的位置。
for(j=1;jif(mempage[switch_flag].timeswitch_flag=j;
mempage[switch_flag].serial=instruction[i]; 置换页面。
mempage[switch_flag].time=0;
switch_counter=switch_counter+1;
lost_counter=lost_counter+1;
for(j=0;jprintf("%d ",mempage[j].serial);
printf("|
end if(exist_flag!=1)
for(j=0;jmempage[j].time=mempage[j].time+1;
exist_flag=0;
printf("缺页次数:%d 次、",lost_counter);
printf("置换次数:%d 次",switch_counter);
break;
case 2:
for(i=0;imempage[i].serial=-1;
mempage[i].time=0;
依次调入新的指令页面,如果内存页面满且新页面不存在,则置换页面。
for(i=0;ifor(j=0;jif(mempage[j].serial==instruction[i]){
exist_flag=1;
break;
if(exist_flag!=1){ 如果内存中没有该页面,执行缺页和置换步骤。
if(mem_countermempage[mem_counter].serial=instruction[i];
mempage[mem_counter].time=0;
mem_counter=mem_counter+1;
else{ /缺页且发生置换。
for(j=0;jdistance[j]=9999;
for(j=0;j记录下内存页面中,再次被使用的距离。
for(k=i+1;kif(instruction[k]==mempage[j].serial){
distance[j]=k;
break;
switch_flag=0;
寻找未来最长时间内不被使用的页面在mempage中的位置。
即寻找distance最大值。
for(k=1;kif(distance[switch_flag]switch_flag=k;
mempage[switch_flag].serial=instruction[i];
switch_counter=switch_counter+1;
lost_counter=lost_counter+1;
for(j=0;jprintf("%d ",mempage[j].serial);
printf("|
if(exist_flag!=1)
exist_flag=0;
printf("缺页次数:%d 次、",lost_counter);
printf("置换次数:%d 次",switch_counter);
break;
case 3:
for(i=0;imempage[i].serial=-1;
mempage[i].time=0;
依次调入新的指令页面,如果内存页面满且新页面不存在,则置换页面。
for(i=0;ifor(j=0;jif(mempage[j].serial==instruction[i]){
exist_flag=1;
mempage[j].time=0; /如果在内存中,time 值置为零,表示刚刚被使用过。
break;
页面置换算法课程设计
操作系统课程设计报告。题目页面置换算法 专业计算机科学与技术 1.设计目的 2 2.课设要求 2 3.系统分析 3 4.系统设计 3 4.1问题分析 3 4.2程序整体框图 5 4.3 fifo算法 5 4.4 lru算法 6 4.5 opt算法 7 5.功能与测试 8 5.1开始界面 8 5.2 ...
页面置换算法课程设计
操作系统原理 课程设计任务书。题目 常用页面置换算法模拟实验。学生姓名学号 班级 计算机科学与技术 2 班。题目类型 软件工程 r指导教师 一 设计目的。学生通过该题目的设计过程,可以初步掌握操作系统中有关文件系统的原理 软件开发方法并提高解决实际问题的能力。二 设计任务。设计一个虚拟存储区和内存工...
课程设计页面置换算法 先进先出算法
淮阴工学院。操作系统课程设计报告。选题名称 页面置换算法。系 院 管理工程学院。专业 信息管理与信息系统。班级 信管1131 姓名 周夏青 张婷婷。学号 指导教师 陆华奇 邱军林。学年学期 2015 2016学年第1学期 2015 年 12 月 20 日。页面置换算法。先进先出算法。一 实验目的 操...