RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:8:30-17:00
你可能遇到了下面的问题
关闭右侧工具栏

新闻中心

这里有您想知道的互联网营销解决方案
最近最久未使用页面置换算法(C语言)——大三操作系统实验-创新互联

目录

为叙州等地区用户提供了全套网页设计制作服务,及叙州网站建设行业解决方案。主营业务为成都网站制作、做网站、外贸营销网站建设、叙州网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

1.算法原理

2.实验要求

3.算法流程图

4.代码分析 

1.定义结构体页面

2.long_max函数的构建

3.IN函数的构建

4.print函数的构建

5.主函数的构建

6.总代码

5.测试结果及其分析


1.算法原理

最近未访问的页面,将来一段时间也不会访问。利用局部性原理,根据一个进程在执行过程中过去的页面访问踪迹来推测未来的行为。最近的过去 → 最近的将来     思想:选择最近最久未使用的页面予以淘汰。利用页表中的访问字段,记录页面自上次被访问以来所经历的时间t,需要淘汰页面时,选择在内存页面中t值大的,即最近最久未使用的页面予以淘汰。

2.实验要求

在某请求分页管理系统中,作业执行时依次访问如下页面:1,4,3,1,2,5,1,4,2,1,4,5,分配给该作业的主存块数为3

3.算法流程图

4.代码分析  1.定义结构体页面
struct Page//定义结构体页面 
{
	int time;//已经待的时间 
	int number;//页面序号 
};
2.long_max函数的构建
int long_max(struct Page a[3]){//寻找出待在内存中时间最长的页面,并对相关time进行修改 
	int index=0,min_time=a[0].time;//初始值赋值为内存的第一个页面 
	for(int i=1;i<3;i++){//找出大的time以及对应的页面 
		if(a[i].time>min_time){
			min_time=a[i].time;
			index=i;
		}
	}
	if(index==0){//如果是页面0,则将1,2的时间修改加一,因为它们这一轮没被顶替,需要等待一个时间段 
		a[1].time++;
		a[2].time++;
	}
	if(index==1){//如果是页面1 
		a[0].time++;
		a[2].time++;
	}
	if(index==2){//如果是页面2 
		a[1].time++;
		a[0].time++;
	}
	a[index].time=0;//将被顶替出的页面时间置位0,因为其是刚进来 
	return index;
}

输入为内存中的三个页面,函数是求内存中待时间最长的页面的索引值,并对三个页面时间进行修改

3.IN函数的构建
int IN(struct Page a[3],int temp){//找出即将进来的进程是否在内存的三个页面中 
	int flag=3;//flag为相同的页面,如果为3,说明不在 
	for(int i=0;i<3;i++){
		if(a[i].number==temp){
			flag=i;
			break;
		}
	}
	return flag;
}

IN函数输入为内存的三个页面以及即将进入内存的页面,是为了判断内存页面中是否和它重复

如果重复,则flag为重复的页面的索引值,如果没重复,就为3.

4.print函数的构建
void print(struct Page a[3],int temp){
	int index,m;
	index=IN(a,temp);//判断是否在里面 
	if(index!=3){//如果在 
		a[index].time=0;
		if(index==0){
			a[1].time++;
			a[2].time++;
		}
		if(index==1){
			a[0].time++;
			a[2].time++;
		}
		if(index==2){
			a[1].time++;
			a[0].time++;
		}
	}
	else{//如果不在,则number需要变化 
		m=long_max(a);//找出需要变化页面的索引 
		a[m].number=temp;
	}
	cout<<"现在系统内的三个页面为:"<

index其实就是重复的索引值,如果重复就对相应数据就行修改,否则就更新内存三页面再修改

最后输出

5.主函数的构建
int main(){
	struct Page a[3];
	struct Page b[100];
	int n;
	for(int i=0;i<3;i++){
		cout<<"请输入第"<>a[i].number;
		a[i].time=3-i;//即前三个时间为3,2,1 
	}
	cout<<"现在系统内的三个页面为:"<>n; 
	for(int i=0;i>b[i].number;
		print(a,b[i].number);
	}
}

数组a(处于内存中的三个页面),数组b(即将要进入内存的页面总集)

6.总代码
#includeusing namespace std;

struct Page//定义结构体页面 
{
	int time;//已经待的时间 
	int number;//页面序号 
};

int long_max(struct Page a[3]){//寻找出待在内存中时间最长的页面,并对相关time进行修改 
	int index=0,min_time=a[0].time;//初始值赋值为内存的第一个页面 
	for(int i=1;i<3;i++){//找出大的time以及对应的页面 
		if(a[i].time>min_time){
			min_time=a[i].time;
			index=i;
		}
	}
	if(index==0){//如果是页面0,则将1,2的时间修改加一,因为它们这一轮没被顶替,需要等待一个时间段 
		a[1].time++;
		a[2].time++;
	}
	if(index==1){//如果是页面1 
		a[0].time++;
		a[2].time++;
	}
	if(index==2){//如果是页面2 
		a[1].time++;
		a[0].time++;
	}
	a[index].time=0;//将被顶替出的页面时间置位0,因为其是刚进来 
	return index;
}

int IN(struct Page a[3],int temp){//找出即将进来的进程是否在内存的三个页面中 
	int flag=3;//flag为相同的页面,如果为3,说明不在 
	for(int i=0;i<3;i++){
		if(a[i].number==temp){
			flag=i;
			break;
		}
	}
	return flag;
}
void print(struct Page a[3],int temp){
	int index,m;
	index=IN(a,temp);//判断是否在里面 
	if(index!=3){//如果在 
		a[index].time=0;
		if(index==0){
			a[1].time++;
			a[2].time++;
		}
		if(index==1){
			a[0].time++;
			a[2].time++;
		}
		if(index==2){
			a[1].time++;
			a[0].time++;
		}
	}
	else{//如果不在,则number需要变化 
		m=long_max(a);//找出需要变化页面的索引 
		a[m].number=temp;
	}
	cout<<"现在系统内的三个页面为:"<>a[i].number;
		a[i].time=3-i;//即前三个时间为3,2,1 
	}
	cout<<"现在系统内的三个页面为:"<>n; 
	for(int i=0;i>b[i].number;
		print(a,b[i].number);
	}
}
5.测试结果及其分析

测试数据就用实验要求给出的

测试结果分析

起始输入125142145
a[0]1(3)1(0)1(1)1(2)1(0)1(1)1(2)1(0)1(1)1
a[1]4(2)4(3)2(0)2(1)2(2)4(0)4(1)4(2)4(0)4
a[2]3(1)3(2)3(3)5(0)5(1)5(2)2(0)2(1)2(2)5

最佳置换算法(C语言)——大三操作系统实验_西瓜妹妹的唯一男朋友的博客-博客

先进先出算法(c语言)——大三操作系统实验_西瓜妹妹的唯一男朋友的博客-博客

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


本文名称:最近最久未使用页面置换算法(C语言)——大三操作系统实验-创新互联
本文路径:http://lswzjz.com/article/cogohs.html