南京邮电大学实验报告模版 2 - 图文 下载本文

内容发布更新时间 : 2024/6/24 20:05:42星期一 下面是文章的全部内容请认真阅读。

实 验 报 告

(2014 / 2015 学年 第 一 学期)

课程名称 实验名称

计算机操作系统

虚拟存储中页面置换算法的模拟实现 2014

实验时间 指导单位 指导教师

年 12 月 19 日

南京邮电大学

崔衍

学生姓名 学院(系)

物联网院

班级学号 专 业

网络工程

实 验 报 告

实验名称 虚拟存储中页面置换算法的模拟实现 实验类型 上机实验 实验学时 一、 实验目的和要求 目的: 通过请求页式存储管理中页面置换算法模拟设计, 了解虚拟存储技术的技术特点, 掌握请求页式存储管理的页面置换算法 要求: (1)设计实现下面算法,并输出下述各种算法的命中率。 ①先进先出的算法(FIFO); ②最近最少使用算法(LRR); ③最佳淘汰算法(OPT)先淘汰最不常用的页地址。 (2)多次反复运行改进后的程序,观察并记录运行结果,并分析原因。 指导教师 崔衍 4 实验时间 2014.12.19 二、实验环境(实验设备) Vc++6.0 - 2 -

二、 实验原理及内容

实验三

#include #include #include #include #define Bsize 4

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 -