操作系统课程设计-虚拟内存系统的页面置换算法模拟

目录

前言

1 实验题目

2 实验目的

3 实验内容

3.1 步骤

3.2 关键代码

3.2.1 生成指令序列

3.2.2 OPT函数

3.2.3 FIFO函数

3.2.4 LRU函数

3.2.5 CLOCK函数

4 实验结果与分析

5 代码


前言

         本实验为课设内容,博客内容为部分报告内容,仅为大家提供参考,请勿直接抄袭,另外,本次实验所用平台是dev c++5.11

1 实验题目

        实验八 虚拟内存系统的页面置换算法模拟

2 实验目的

       通过对页面、页表、地址转换和页面置换过程的模拟,加深对虚拟页式内存管理系统的页面置换原理和实现过程的理解。

3 实验内容

3.1 步骤

        (1)通过随机数产生一个指令序列,共 320 条指令。 
                ① 50%的指令是顺序执行的; 
                ② 25%的指令是均匀分布在前地址部分; 
                ③ 25%的指令是均匀分布在后地址部分; 
        (2)实现OPT算法函数。
        (3)实现LRU算法函数。
        (4)实现FIFO算法函数。
        (5)实现CLOCK算法函数。

3.2 关键代码

3.2.1 生成指令序列

void createOpt(){
	srand((unsigned)time(0));
	int i=0;
	while(i=optNum)break;
		
		int m1=rand()%(m+2); //生成[0,m+1]之间的随机数
		opt[i++]=m1; //把随机的m1指令放入数组 
		if(i>=optNum)break;
		if(m1==optNum-1)continue; //如果生成的是319,则m1+1不能放进去 
		opt[i++]=m1+1; //把m1+1放进去 
		if(i>=optNum)break;
		
		m=(rand()%(optNum-m1-2))+m1+2; //0,319-m1-2,生成[m1+2,319]之间的随机数 
		opt[i++]=m;
	}
}

3.2.2 OPT函数

void OPT(){
	int pageNum=0;
	int err=0; 
	for(int i=0;i

3.2.3 FIFO函数

void FIFO(){
	int pageNum=0;
	int err=0; 
	for(int i=0;i

3.2.4 LRU函数

void LRU(){
	int pageNum=0;
	int err=0; 
	for(int i=0;ipage[j].num){
						min=j;
					}
				} 
				page[min].index=opt[i]/10;
				page[min].num=i;
			}
			//cout<<"F "<

3.2.5 CLOCK函数

void CLOCK(){
	int pageNum=0;
	int err=0; 
	int p=0; //指针 
	for(int i=0;i

4 实验结果与分析

根据指导书要求,若访问的指令已在内存中就直接输出其物理地址,若不在内存中,则发生缺页先输出F,置换后再输出其物理地址,运行结果如下面两张图片所示,经统计和计算,每个算法的缺页次数和缺页率是正确的。

操作系统课程设计-虚拟内存系统的页面置换算法模拟_第1张图片

图1.1 OPT算法和FIFO算法

操作系统课程设计-虚拟内存系统的页面置换算法模拟_第2张图片

图1.2 LRU和CLOCK算法

5 代码

#include
using namespace std;
typedef long long ll;

#define optNum 320 // 指令数 
#define proPageNum 4 //程序可用页数
#define pageOptNum 10 //一页的指令数 

struct memClock{
	int index; //页号 
	int num; //使用次数 
};

int test[]={20,30,20,10,50,20,40,50,30,20,50,20};
memClock test1[]={{20,0},{30,0},{20,0},{10,0},{50,0},{20,0},{40,0},{50,0},{30,0},{20,0},{50,0},{20,0}};

int opt[optNum]; //指令数数组 
memClock page[proPageNum]; //程序可用页面 

void createOpt(){
	srand((unsigned)time(0));
	int i=0;
	while(i=optNum)break;
		
		int m1=rand()%(m+2); //生成【0,m+1】之间的随机数
		opt[i++]=m1; //把随机的m1指令放入数组 
		if(i>=optNum)break;
		if(m1==optNum-1)continue; //如果生成的是319,则m1+1不能放进去 
		opt[i++]=m1+1; //把m1+1放进去 
		if(i>=optNum)break;
		
		m=(rand()%(optNum-m1-2))+m1+2; //0,319-m1-2,生成【m1+2,319】之间的随机数 
		opt[i++]=m;
	}
}

void OPT(){
	int pageNum=0;
	int err=0; 
	for(int i=0;ipage[j].num){
						min=j;
					}
				} 
				page[min].index=opt[i]/10;
				page[min].num=i;
			}
			cout<<"F "<

你可能感兴趣的:(操作系统,算法,c++,windows)