ICode9

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

《操作系统》页面淘汰——最不经常使用算法c++实现

2022-05-18 00:02:20  阅读:156  来源: 互联网

标签:操作系统 int cache c++ times 用例 size 页面


前言:
我只是通过了老师的用例,正确性不能保证hh(非常害怕误导大家
就算错了也许也能给大家提供思路~

算法描述

  • 收到一个页面,cache里面有没有?
    • 有就不用管
    • 没有
      • cache有没有满?
        • 没满,将该页面加入cache
        • 满了,看看cache里哪个页面使用次数最少,把它替换即可
  • q数组存输入的页面序列,cache数组存内存里的页,**times存某个页的使用次数*。如:times[65]=2表示A用过了两次(A的ascii是65
  • 得到cache里面每个页的使用次数之后,通过比较大小,把使用最少的页替换即可(即小的被替换

输入用例描述

实验给的用例

3
20
7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1

4 
12 
4 3 2 1 4 3 5 4 3 2 1 5

5 
11
4 7 0 7 1 0 1 2 1 2 6

实现代码

#include<iostream>
using namespace std;
const int N = 100;
char q[N];
char cache[N];
int times[N];//记录cache里每个页用到了多少次
int hh = -1;//记录cache里面的页数
int main()
{
	printf("软件202 唐熙\n");
	int size, n, num = 0;//size表示cache大小,n表示输入页数,num表示中断次数
	cin >> size >> n;
	for (int i = 0; i < n; i++)
		cin >> q[i];
	for (int i = 0; i < n; i++)
	{
		cout << "当前cache数组:";
		for (int i = 0; i < size; i++)
			cout << cache[i] << " ";
		cout << endl;
		int pause = 1, j;
		for (j = 0; j < size; j++)//看看cache里面有没有当前页面,有的话不用管
			if (q[i] == cache[j])
				pause = 0;
		if (pause)//没有的话
		{
			num++;
			if (hh < size - 1)
				cache[++hh] = q[i];
			else
			{
				int min = times[q[0]], index = 0;
				for (int k = 0; k < size; k++)
				{
					if (times[cache[k]] < min)
					{
						index = k;
						min = times[cache[k]];
					}
				}
				cache[index] = q[i];
			}
		}
		times[q[i]]++;
	}
	cout << "当前cache数组:";
	for (int i = 0; i < size; i++)
		cout << cache[i] << " ";
	cout << endl;

	cout << "缺页次数:" << num << " 缺页率:" << double(num) / n;
	return 0;
}

实验用例运行结果



标签:操作系统,int,cache,c++,times,用例,size,页面
来源: https://www.cnblogs.com/tangxibomb/p/16282972.html

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

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

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

ICode9版权所有