实 验 报 告
(2014 / 2015 学年 第 一 学期)
课程名称 实验名称
计算机操作系统
虚拟存储中页面置换算法的模拟实现 2014
实验时间 指导单位 指导教师
年 12 月 19 日
南京邮电大学
崔衍
学生姓名 学院(系)
物联网院
班级学号 专 业
网络工程
实 验 报 告
实验名称 虚拟存储中页面置换算法的模拟实现 实验类型 上机实验 实验学时 一、 实验目的和要求 目的: 通过请求页式存储管理中页面置换算法模拟设计, 了解虚拟存储技术的技术特点, 掌握请求页式存储管理的页面置换算法 要求: (1)设计实现下面算法,并输出下述各种算法的命中率。 ①先进先出的算法(FIFO); ②最近最少使用算法(LRR); ③最佳淘汰算法(OPT)先淘汰最不常用的页地址。 (2)多次反复运行改进后的程序,观察并记录运行结果,并分析原因。 指导教师 崔衍 4 实验时间 2014.12.19 二、实验环境(实验设备) Vc++6.0 - 2 -
二、 实验原理及内容
实验三
#include
typedef struct BLOCK//声明一种新类型——物理块类型 {
int pagenum;//页号
int accessed;//访问字段,其值表示多久未被访问
}BLOCK;
int pc;//程序计数器,用来记录指令的序号 int n;//缺页计数器,用来记录缺页的次数 static int temp[320];//用来存储320条随机数
BLOCK block[Bsize]; //定义一大小为4的物理块数组
//************************************************************* void init( ); //程序初始化函数
int findExist(int curpage);//查找物理块中是否有该页面 int findSpace( );//查找是否有空闲物理块 int findReplace( );//查找应予置换的页面 void display ( );//显示
void suijishu( );//产生320条随机数,显示并存储到temp[320] void pagestring( );//显示调用的页面队列 void OPT( );//OPT算法 void LRU( );// LRU算法 void FIFO( );//FIFO算法
//************************************************************* void init( ) {
for(int i=0;i block[i].pagenum=-1; block[i].accessed=0; - 3 - 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) return i;//找到空闲的block,返回block中的位置 } return -1; } //------------------------------------------------------------- int findReplace( ) { int pos = 0; for(int i=0; i if(block[i].accessed >block[pos].accessed) pos = i;//找到应予置换页面,返回BLOCK中位置 } return pos; } //------------------------------------------------------------- void display( ) - 4 - { for(int i=0; i if(block[i].pagenum != -1) { printf(\ } cout< //------------------------------------------------------------- void suijishu( ) { int flag=0; cin>>pc; cout<<\按照要求产生的320个随机数:*******\ for(int i=0;i<320;i++) { temp[i]=pc; if(flag%2==0) pc=++pc20; if(flag==1) pc=rand( )% (pc-1); if(flag==3) pc=pc+1+(rand( )%(320-(pc+1))); flag=++flag%4; printf(\ if((i+1)==0) cout< //------------------------------------------------------------- void pagestring( ) { for(int i=0;i<320;i++) { printf(\ if((i+1)==0) cout< //------------------------------------------------------------- void OPT( ) { int exist,space,position ; - 5 -