操作系统页面置换算法

好久没有更新博客了,现在开始不定时更新博客。嘿嘿嘿
今天更新的是操作系统的页面置换算法。今天这篇文章主要讲的是FIFO(先进先出算法)还有LRU(最近最久不使用算法)。都用的是数组的方法。
FIFO算法顾名思义就是先进物理块的页面先出去。
LRU算法,我采用的是栈的方法实现的,但是这个栈跟咱们数据结构意义上的栈不太一样,其实还是数组把。
具体的思路就不讲解了,直接看代码把,其他的博主还会画图,我不会。看代码,我的注释自认为还是挺详细的。不懂可以私聊我。

# include<iostream>
using namespace std;

int main (void)
{
	int n,m,t=0,a[100],b[100],num=0,flag;
	double sum;
	cout<<"请输入页面数n和物理块数m"<<endl;
	cout<<"页面数:"<<endl;
	cin>>n;
	cout<<"物理块数"<<endl;
	cin>>m; 
	cout<<"请输入具体页面"<<endl; 
	for(int i=0;i<m;i++)
	{
		b[i]=-1;//对数组进行初始化 
	}
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
	}
	//FIFO算法 
	printf("开始FIFO算法演示\n"); //FIFO算法的本质就是根据你进入的时间进行淘汰。 
	for(int j=0;j<n;j++)
	{
		for(int k=0;k<m;k++)
		{
			if(b[k]==a[j]) //如果我的物理块内已经有了该页面,无需任何操作 
			{
				flag=1;
				break;
			}
			else flag=0;
		}
		if(flag==0)//如果物理块中没有找到该页面,进行更新。具体方法为找到上次更新的物理块,在他的下一个物理块进行置换操作 
		{
			b[t%m]=a[j];
			t++;//用来标记一下次需要进行置换的物理块位置 
			num++;
		}
		for(int k=0;k<m;k++)
		{
			cout<<b[k]<<" ";//打印检查 
		}
		cout<<endl;
	}
	printf("缺页次数是%d次数",num);
	sum=num/(n*1.0);
	printf("缺页率为%lf\n",sum);
	//LRU算法 
	printf("开始LRU算法演示\n");//运用栈的方法进行演算。数组即是栈。数字小的就是栈顶。最不经常访问的页面在栈底。 
	int zhan[100];
	num=0;
	for(int i=0;i<m;i++)
	{
		zhan[i]=-1;//同样进行初始化 
	}
	for(int j=0;j<n;j++)
	{
		for(int k=0;k<m;k++)
		{
			if(zhan[k]==a[j]) //在能找到的情况下,对栈里面的数据进行更新,访问到的页面放到栈顶的位置,即数组的第一个位置。 
			{
				flag=1;
				int tmp=zhan[k];
				if(k==0) break;//如果找到的位置在第一个栈 ,直接跳出循环,无需进行任何操作 
				for(int z=k-1;z>=0;z--)
				{
					zhan[z+1]=zhan[z];//以我找的为标记,然后用前面的覆盖后面。 
				 } 
				 zhan[0]=tmp;//将访问到的页面更新到栈顶 
				break;
			}
			else flag=0;
		}
		if(flag==0)//如果没有找到,直接对栈内元素进行覆盖,用第一个的数据覆盖第二个的,以此类推。将栈顶的位置空出来用来存放新的页面 
		{
			for(int z=m-2;z>=0;z--)
				{
					zhan[z+1]=zhan[z];
			    } 
			zhan[0]=a[j];
			num++;
		}
		for(int k=0;k<m;k++)
		{
			cout<<zhan[k]<<" ";
		}
		cout<<endl;
	}
	printf("缺页次数是%d次数",num);
	sum=num/(n*1.0);
	printf("缺页率为%lf",sum);
	return 0;
 } 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值