赞
踩
算法思想
OPT算法在每次需要进行页面置换时,会选择当前内存中包含的所有页面中,未来最长时间内不会被访问的页面进行替换。
算法特点
是所有算法中耗时最短的一种算法,但是在实际情况中基本无法实现,其原因是未知未来多久哪些页面会被访问,哪些页面不会被访问,故实现起来十分困难,但可以用作其他算法优良的参考,还能起到鉴别其他算法合理性。
算法实现
1)当需要进行页面置换时,对当前物理块中的所有页面进行扫描。
2)对于每个页面,计算它在未来又一次被访问的时间节点。
3)选择具有最长不访问时间的页面进行置换。
注:本文将一开始向空的物理块调入页面也作为缺页处理,可能会与其他文章有所不同。
#include<bits/stdc++.h> using namespace std; int arr[] = {7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};//测试数据 int page[3] = {7,0,1};//假设有三个物理块,可以根据实际需求进行修改 void OPT() { int pos[3] = {0,1,2};//记录初始位置 int cishu = 3;//表示页面缺页的次数,初始值为3 bool flag[3] = {false,false,false}; for(int arr_pos = 3; arr_pos<sizeof(arr)/sizeof(arr[0]); arr_pos++) { bool change = true; flag[0] =false,flag[1] = false,flag[2] = false; for(int i = 0; i<3; i++) { cout<<"arr_pos:"<<arr_pos<<"值:"<<arr[arr_pos]<<" i: "<<i<<" 值: "<<page[i]<<endl; if(page[i]==arr[arr_pos])change = false; //页面有这个块号 } if(change==true)continue; for(int i = 3; i<sizeof(arr)/sizeof(arr[0]); i++) { for(int j = 0; j<3; j++) { if(arr[i]==page[j]&&flag[j]==false) { pos[j] = i; } } } int now = -1; //找最大 if(pos[0]<pos[1]) { if(pos[1]<pos[2]) { now = 2; } else { now = 1; } } else { if(pos[0]<pos[2]) { now = 2; } else { now = 0; } } page[now] = arr[arr_pos]; cishu++; } cout<<"缺页次数:"<<cishu<<" 缺页率:"<<(float)cishu/(float)(sizeof(arr)/sizeof(arr[0]))<<endl; } int main() { OPT(); return 0; }
实验结果如下:
本文结束,希望上述的代码对你理解OPT算法有所帮助,如有出现错误的地方,还请批评指正,谢谢
如果你对操作系统其他的页面置换算法实现存在疑问,可以查看下列博客:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。