ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

308-置换策略FIFO算法的实现

2021-05-12 12:58:32  阅读:203  来源: 互联网

标签:308 int flag pos FIFO 队列 算法 dq


置换策略FIFO算法的实现

先进先出(FIFO)

FIFO策略把分配给进程的页框看做是一个循环缓冲区,按循环方式移动页。
它所需要的只是一个指针,这个指针在该进程的页框中循环。
因此这是一种实现起来最简单的页面置换策略。除了它的简单性,这种选择方法所隐含的逻辑是置换驻留在内存中时间最长的页:一个在很久以前取入内存的页,到现在可能已经不会再用到了。这个推断常常是错误的,因为经常会出现一部分程序或数据在整个程序的生命周期中使用频率都很高的情况,如果使用FIFO算法,则这些页会反复地需要被换入换出。
下图的例子,FIFO策略导致了6次缺页中断
2 3 2 1 5 2 4 5 3 2 5 2 测试数据
在这里插入图片描述

代码实现及注释

2 3 2 1 5 2 4 5 3 2 5 2 测试数据

#include <deque>
#include <cstdio>
#include <algorithm>
#include<iostream>
using namespace std;

const int maxn = 105;
int a[maxn];
int main()
{
	deque<int>  dq;//定义一个队列
	deque<int >::iterator pos;//定义一个迭代器
	int numyk, numqueye = 0;
	cout << "请输入物理页框块数:";
	cin >> numyk;//物理页框块数

	int n;
	cout << endl << "请输入页面走向个数:";
	cin >> n;//输入一共需要访问的页面的个数

	for (int i = 0; i < n; i++)//依次输入页面的页号
	{
		cin >> a[i];
	}

	for (int i = 0; i < n; i++)//依次遍历要访问的页面
	{
		cout << "第" << i << "个" << endl;
		int in;
		in = a[i];//获取当前页面的页号并赋值给in
		if (dq.size() < numyk)//存在空余页框
		{
			int flag = 0;//标记值初始化为0
			for (pos = dq.begin(); pos != dq.end(); pos++)//遍历队列 
				if ((*pos) == in)//队列中的某个元素页的页号和当前访问的页的页号一致
				{
					flag = 1;
					break;
				}
			if (!flag) //队列中不存在此页面元素
			{
				dq.push_back(in);//放入队列 
			}
		}
		else //不存在多余页框
		{
			int flag = 0;//标记值初始化为0
			for (pos = dq.begin(); pos != dq.end(); pos++)
				if ((*pos) == in)
				{
					flag = 1;
					break;
				}//存在该元素
			if (!flag)//不存在此元素 则置换最先进入的项 
			{
				numqueye++;//缺页数+1
				dq.pop_front();//最先进入的出队列 
				dq.push_back(in);//进队列 
			}
		}
	}
	cout << "FIFO缺页次数为:" << numqueye << endl;
	cout << "FIFO缺页中断率为:" << (double)numqueye * 1.0 / n << endl;
}

运行截图

在这里插入图片描述
回车!
在这里插入图片描述

标签:308,int,flag,pos,FIFO,队列,算法,dq
来源: https://blog.csdn.net/LINZEYU666/article/details/116703610

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有