先进先出算法(c语言)——大三操作系统实验

目录

1.算法原理

2.实验要求

3.算法流程图

4.代码分析

 1.sort函数的构建

2.IN函数的构建

3.print函数的构建

4.主函数的构建

5.总代码

5.测试结果及其分析


1.算法原理

基本思想是淘汰最先进入内存的页面,即选择在内存驻留时间最长的页面予以淘汰。实现简单。按页面调入内存的先后链结为队列,设置一个替换指针,总是指向最先进入内存的页面。缺点在与进程实际运行规律不符,性能不好。

2.实验要求

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

3.算法流程图

4.代码分析

 1.sort函数的构建

void sort(int a[3],int temp){//顶替内存的第一个页面,并排序 
	a[0]=a[1];
	a[1]=a[2];
	a[2]=temp;
}

输入为在内存中的三个页面以及即将要进入内存的页面,但这个页面和我们在main函数直接输入的页面不一样,因为这个页面是一定与内存中页面不相同的

索引值也相当于时间先后顺序,0为最先进入内存的

排序后a[1],a[2]都会前移,新来的temp放在最后

2.IN函数的构建

int IN(int a[3],int temp){//找出即将进来的进程是否在内存的三个页面中 
	int flag=0;
	for(int i=0;i<3;i++){
		if(a[i]==temp){
			flag=1;
			break;
		}
	}
	return flag;
}

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

如果重复,则flag置为1,否则不变,还是0,最后返回flag

3.print函数的构建

void print(int a[3],int temp){
	if(IN(a,temp)==0){//如果即将进来的进程不在内存的三个页面中 
		sort(a,temp);
	}
	cout<<"现在系统内的三个页面为:"<<a[0]<<" "<<a[1]<<" "<<a[2]<<endl;
}

print函数是总流程,输入为内存的三个页面以及即将进入内存的页面

调用了IN函数后,如果返回的为0,则说明没有重复的,那么temp就要进入内存的三个页面中,即执行sort函数,然后再输出

返回为1,就默认直接输出,因为并不改变内存里的三个页面。

4.主函数的构建

int main(){
	int a[3],b[100],n;
	for(int i=0;i<3;i++){
		cout<<"请输入第"<<i<<"个页面:";
		cin>>a[i];
	}
	cout<<"现在系统内的三个页面为:"<<a[0]<<" "<<a[1]<<" "<<a[2]<<endl;
	cout<<"请按时间先后顺序输入即将进入系统的页面数目:";
	cin>>n; 
	for(int i=0;i<n;i++){
		cout<<"请输入要访问的页面:";
		cin>>b[i];
		print(a,b[i]);
	}
}

数组a是内存中的三个页面,b是即将进入内存的页面,n是即将进入内存页面的数量

5.总代码

#include<iostream>
using namespace std;
void sort(int a[3],int temp){//顶替内存的第一个页面,并排序 
	a[0]=a[1];
	a[1]=a[2];
	a[2]=temp;
}
int IN(int a[3],int temp){//找出即将进来的进程是否在内存的三个页面中 
	int flag=0;
	for(int i=0;i<3;i++){
		if(a[i]==temp){
			flag=1;
			break;
		}
	}
	return flag;
}
void print(int a[3],int temp){
	if(IN(a,temp)==0){//如果即将进来的进程不在内存的三个页面中 
		sort(a,temp);
	}
	cout<<"现在系统内的三个页面为:"<<a[0]<<" "<<a[1]<<" "<<a[2]<<endl;
}

int main(){
	int a[3],b[100],n;
	for(int i=0;i<3;i++){
		cout<<"请输入第"<<i<<"个页面:";
		cin>>a[i];
	}
	cout<<"现在系统内的三个页面为:"<<a[0]<<" "<<a[1]<<" "<<a[2]<<endl;
	cout<<"请按时间先后顺序输入即将进入系统的页面数目:";
	cin>>n; 
	for(int i=0;i<n;i++){
		cout<<"请输入要访问的页面:";
		cin>>b[i];
		print(a,b[i]);
	}
}

5.测试结果及其分析

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

 测试结果分析

起始输入125142145
a[0]1143251114
a[1]4432514442
a[2]3325142225

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

最近最久未使用页面置换算法(C语言)——大三操作系统实验_西瓜妹妹的唯一男朋友的博客-CSDN博客

  • 6
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值