学生姓名: 学 号: 专业班级:
实验类型:□√ 验证 □ 综合 □ 设计 □ 创新 实验日期: 实验成绩:
一、 实验项目名称
请求页式存储管理的页面置换算法
二、 实验目的
存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。
本实验的目的是通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。
三、 请求页式存储管理的实现原理
1.通过随机数产生一个指令序列,共 320 条指令,指令的地址按下述原则生产:
50%的指令是顺序执行的;
25%的指令是均匀分布在前地址部分;
25%的指令是均匀分布在后地址部分。
2.将指令序列变换成为页地址流
设页面大小为 1K;用户内存容量为 4 页到 32 页;用户虚存容量为 32K。
在用户虚存中,按每 K 存放 10 条指令排列虚存地址,即 320 条指令在虚存中的存放方式
为:第 0 条至第 9 条指令为第 0 页;第 10 条至 19 条指令为第 1 页;…第 310 条至 319 条指
令为第 31 页。
3.计算并输出下述各种算法在不同内存容量下的命中率。
(1) 先进先出算法(FIFO)
(2) 最近最少使用算法(LRU)
(3) 最佳使用算(OPT)
命中率=1-页面失效次数/页地址流长度
本实验中,页地址流长度为 320,页面失效次数为每次访问相应指令时,该指令所
对应的页不在内存的次数。
四、 主要程序代码
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#define Myprintf printf("|---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---|\n") /*表格控制*/
#define bsize 4 //物理块大小
#define psize 16 //进程大小
typedef struct page
{
int num; /*记录页面号*/
int time; /*记录调入内存时间*/
}Page; /* 页面逻辑结构,结构为方便算法实现设计*/
Page b[bsize]; /*内存单元数*/
int c[bsize][psize]; /*暂保存内存当前的状态:缓冲区*/
int queue[100]; /*记录调入队列*/
int K; /*调入队列计数变量*/
int phb[bsize]={
0}; //物理块标号
int pro[psize]={
0}; //进程序列号
int flag[bsize] = {
0}; //进程等待次数(存放最久未被使用的进程标志)
int i = 0, j = 0,k = 0; //i 表示进程序列号,j 表示物理块号
int m = -1, n = -1; //物理块空闲和进程是否相同判断标志
int max = -1,maxflag = 0; //标记替换物理块进程下标
int count = 0; //统计页面缺页次数
//**************************************************************//
//**************************************************************//随机产生序列号函数
//**************************************************************
int* build()
{
printf("随机产生一个进程序列号为:\n");
int i = 0;
srand ( time(NULL) );
for(i=0; i<psize; i++)
{
pro[i] = 10*rand()/(RAND_MAX+1)+1;
printf("%d ",pro[i]);
}
printf("\n");
return(pro);
}
//**************************************************************//查找空闲物理块
//**************************************************************
int searchpb()
{
for(j=0; j<bsize; j++)
{
if<