最佳置换算法

news/2024/11/29 8:50:50/

最佳置换算法(OPT):从主存中移出永远不再需要的页面;如无这样的页面存在,则选择最长时间不需要访问的页面。于所选择的被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证获得最低的缺页率。 

最佳置换算法可以用来评价其他算法。假定系统为某进程分配了三个物理块,并考虑有以下页面号引用串:
    7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1
进程运行时,先将7, 0, 1三个页面依次装入内存。进程要访问页面2时,产生缺页中断,根据最佳置换算法,选择第18次访问才需调入的页面7予以淘汰。然后,访问页面0时,因为已在内存中所以不必产生缺页中断。访问页面3时又会根据最佳置换算法将页面1淘汰……依此类推,如图所示。从图中可以看出釆用最佳置换算法时的情况。

访问页面70120304230321201701
物理块17772 2 2  2  2   7  
物理块2 000 0 4  0  0   0  
物理块3  11 3 3  3  1   1  
#include<iostream>
#include<list>
#include<vector>
#include<iterator>
#include<fstream>
#include<algorithm>
using namespace std;class Optimal
{
public:int index;int dis;
public:friend istream & operator>>(istream & i, Optimal&o);friend ostream & operator<<(ostream &s, const Optimal&o);Optimal(int i){this->index = i;dis = 0;}Optimal(){dis = 0;}~Optimal(){}bool operator<(Optimal&s){if (this->dis < s.dis)return true;return false;}bool operator>(Optimal&s){if (this->dis > s.dis)return true;return false;}bool operator==(const Optimal&s){if (this->dis==s.dis  )return true;return false;}
};
istream & operator>>(istream & i, Optimal&o)
{i >> o.index;return i;
}
ostream & operator<<(ostream &s,const  Optimal&o)
{s <<"["<<o.index << "\t" <<"下次位置:"<<o.dis <<"]";return s;
}void main()
{fstream out("data.txt");list<Optimal> v;list<Optimal> w;copy(istream_iterator<Optimal>(out), istream_iterator<Optimal>(), back_inserter(v));//copy(v.begin(),v.end(),ostream_iterator<Optimal>(cout,"\t"));while (v.size()){if (w.size()<3){copy(w.begin(), w.end(), ostream_iterator<Optimal>(cout, "\t"));cout << endl;Optimal p = v.front();v.pop_front();w.push_front(p);}else{bool istrue = false;for (auto ib = w.begin(); ib != w.end(); ib++){if (ib->index==v.front().index){istrue = true;}}if (istrue == false){for (auto ib = w.begin(); ib != w.end(); ib++){int x = 0;for (auto vib = v.begin(); vib != v.end(); vib++){if ((*ib).index == (*vib).index){break;}(*ib).dis = x++;}}copy(w.begin(), w.end(), ostream_iterator<Optimal>(cout, "\t"));cout << endl;list<Optimal>::iterator s = max_element(w.begin(), w.end());w.remove(*s);Optimal p = v.front();v.pop_front();w.push_front(p);}else{v.pop_front();}}}copy(w.begin(), w.end(), ostream_iterator<Optimal>(cout, "\t"));cout << endl;cin.get();
}

其中data.txt文件内容为

实验结果是

 


http://www.ppmy.cn/news/660596.html

相关文章

置换的轮换表示

置换的轮换表示 问题描述知识回顾置换的轮换表示不相杂轮换 题目解读编程实现 问题描述 给出一个置换&#xff0c;写出该置换的轮换表示。比如 表示为(1 3 6 7 8 4 2)(5 9) 输入&#xff1a;置换后的序列 输出&#xff1a;不相杂的轮换乘积&#xff0c;每行表示一个轮换&…

【置换矩阵】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 [TOC](文章目录) 参考https://blog.csdn.net/jhshanvip/article/details/105388563 前言一、置换矩阵是什么&#xff1f;二、特点1.矩阵左乘置换矩阵交换行2.矩阵右…

24 置换基本概念

目录 一 互换与轮换 二 置换交换律与结合律 三 置换的化简方法 四 轮换的乘方计算方法 五 轮换的其他规律 六 置换凯来图 七 置换代数运算 一 互换与轮换 要了解群论&#xff0c;置换必不可少。而且置换在生活、工作中也非常常见。虽然说置换&#xff0c;有点小儿科&…

置换

置换 定义 集合 X 的置换是 X 到其自身的双射。 n个元素的集合X恰有 n! 个置换。 置换也可看成集合 X 中元素的重排。 比如 {1, 2, 3} 的重排有&#xff1a; 123&#xff1b;132&#xff1b;213&#xff1b;231&#xff1b;312&#xff1b;321 X的一次重排i_1&#xff0c;i_2&a…

固定分配,可变分配,局部置换,全局置换

准备或运行时&#xff0c; 固定分配&#xff1a; 给进程的 每个物理块 分配数量固定&#xff0c; 运行时数量固定&#xff0c;按照分配数量。 可变分配&#xff1a; 分配数量固定&#xff0c; 运行时数量不固定。 缺页时&#xff0c; 局部置换&#xff1a; 缺页进程独立&am…

置换矩阵

置换矩阵 题解 首先对于有大于1个环的情况&#xff0c;明显行列式值是为零的。 因为这种情况必定有一个环的长度小于 ∣ n 2 ∣ \left|\frac{n}{2}\right| ∣∣​2n​∣∣​&#xff0c;所以就一定可以将一个环的区域全部消成0&#xff0c;这样答案就肯定为0了。 那么对于 p …

置换贴图(Displacement map),凹凸贴图(Bump map)与法线贴图(Normal map)的区别

英文原文地址《Difference between Displacement , Bump and Normap Maps》 By Pluralsight on August 14, 2014 你是否在学习如何为你的3D素材制作贴图的时候遇到了点小挫折&#xff1f;不要灰心&#xff01;很多贴图或3D领域的艺术家在初次遇到凹凸贴图(Bump map)&#xff0c…

《操作系统》by李治军 | 实验9 - proc文件系统的实现

目录 一、实验目的 二、实验内容 三、实验准备 1. procfs 简介 2. 基本思路 四、实验过程 1. 增加新的文件类型 2. 让 mknod() 支持新的文件类型 &#xff08;1&#xff09;修改 mknod 系统调用 &#xff08;2&#xff09;初始化 procfs 3. 让 proc 文件可读 &…