操作系统综合实践报告
课程号:220011050
设计题目:页面置换算法
姓 名 刘衍鸣
学 院 信息与电气工程学院
专 业 计算机科学与技术
年 级 2019级专升本
学 号 20192203172
成绩评定:
2019 年 12 月 25 日
一、 课程设计选题
1.选题内容
编程序实现先进先出算法(FIFO)、最近最久未使用算法(LRU)、最佳置换算法(OPT)的具体实现过程,并计算访问命中率。
2.选题要求
①计主界面以灵活选择某算法,且以上算法都要实现。
②用随机数方法产生页面走向。
③假定初始时页面都不在内存。
二、 课程设计需求分析
在进程运行过程中,若其所要访问的页面不在内存,而需把它们调入内存,但内存已无空闲空间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数据送到磁盘的对换区中。但应将哪个页面调出,须根据一定的算法来确定。通常,把选择换出页面的算法称为页面置换算法(Page-Replacement Algorithms)。 置换算法的好坏将直接影响到系统的性能。
三、 概要设计
在程序中定义两个数组分别存放内存块的内容和页面引用序列,让页面引用序列进入内存块,如果内存块已满进行页面置换,实现先进先出算法时,定义一个时间数组,让先进内存块对应的数组值最大的用于置换;实现最近最久未使用算法时,定义一个使用数组,让最近未被使用的内存块对应数组最大值用于置换;实现最佳置换算法时,分别将内存块内容与剩余页面内容序列相同时的最大值的块用于页面置换。
四、 模块的基本算法
CreatePage():初始化页面序列,在页面序列数组Page[PNum]中随机生成PNum个数。
FIFO():先进先出页面置换算法。
LRU():最近最久未使用算法。
OPT():最佳置换算法。
五、 系统实现
- 流程图
2.代码
#include <stdio.h>
#include <stdlib.h>
#define PNum 12
#define BNum 3
int Page[PNum]={
0};
typedef struct{
int block;
int time;
}BLock;
typedef struct LNode{
BLock B[3];
}Mem;
Mem M;
void CreatePage(){
//初始化页面
printf("页面走向:\n");
for(int i=0;i<PNum;i++){
Page[i]=rand()%9+1;
printf("%d ",Page[i]);
}
printf("\n");
}
int max(int a,int b,int c){
int x,z;
if(a>=b)
x=a;
else x=b;
if(x>=c)
z=x;
else
z=c;
return z;
}
void InitM(){
for(int q=0;q<PNum;q++){
M.B[q].block=0;
}
for(int q=0;q<PNum;q++){
M.B[q].time=0;
}
}
void FIFO(){
//先进先出页面置换算法
printf("具体实现过程:\n");
InitM();
int i=0,j=0;
int a=-1,b=-1;
int Max=-1;
int MaxT=0;
int count=0;
for(i=0;i<PNum;i++){
for(j=0;j<BNum;j++)
if(M.B[j].block==0){