OPT, LRU, FIFO页面调度算法的模拟
来源:互联网 发布:cocos2d.js sdk 编辑:程序博客网 时间:2024/06/05 15:03
#include <iostream>#include <cstdlib>#include <ctime>#include <deque>#include <map>#include <algorithm>using namespace std;int findLRU(map<int, int> managedMap);deque<int> fifo;map<int, int> lru;map<int, int>opt;const int LEN = 1000;//要访问的页面总数const int BLOCKNO = 3; //物理块数const int INF = 999999; //用于opt算法中在后续找不到该元素所用int main() {//初始化测试以数据srand((unsigned)time(NULL));int testData[LEN];//int testData[LEN] = {2,3,2,1,5,2,4,5,3,2,5,2};for (int i = 0; i < LEN; i++) {testData[i] = rand() % 5 + 1;}//初始化测试数据完毕int success=0;//命中次数int fail = 0;//缺页次数 + 物理块数//FIFO算法for (int i = 0; i < LEN; i++) {auto pos = find(fifo.cbegin(), fifo.cend(), testData[i]);if (pos != fifo.cend())success++;else {fail++;if (fifo.size() < BLOCKNO) {fifo.push_back(testData[i]);}else {fifo.pop_front();fifo.push_back(testData[i]);}}}cout << "测试数据:[" << testData[0];for (int i = 1; i <= LEN-1; i++) {cout << ", " << testData[i];}cout << "]" << endl<<endl;cout << "使用"<<BLOCKNO<<"个物理块"<<endl;cout << "FIFO算法" << endl;cout << "\t缺页数:" << fail - BLOCKNO;cout << "\t缺页率" << (double)fail / LEN;cout << "\t命中率" << (double)success / LEN<<endl<<endl;success = 0;fail = 0;//LRU算法 lru的map,map->first代表页面值,每过一个循环map->second全部都会+1,那么越久没用到的它的second就越大,那么替换的时候//就把second最大的替换出去for (int i = 0; i < LEN; i++) {auto pos = lru.find(testData[i]);if (pos != lru.end()) {success++;lru[testData[i]] = 0;}else {fail++;if (!(lru.size() < BLOCKNO)) {lru.erase(findLRU(lru));}lru[testData[i]] = 0;}map<int, int>::iterator it=lru.begin();for (; it != lru.end(); it++) {it->second++;}}cout << "LRU算法" << endl;cout << "\t缺页数:" << fail - BLOCKNO;cout << "\t缺页率" << (double)fail / LEN;cout << "\t命中率" << (double)success / LEN<<endl<<endl;success = 0;fail = 0;//OPT算法 与lru相同这个也用map实现,first含义与lru相同,second代表的是下一个相同的页面出现的位置,这个位置越远那么他越先被//替换,这个算法是命中率最高的,但在实际情况中是无法实现的。我们只能假装模拟一下for (int i = 0; i < LEN; i++) {auto pos = opt.find(testData[i]);if (pos != opt.end()) {success++;}else {fail++;if (!(opt.size() < BLOCKNO)) {opt.erase(findLRU(opt));}}//更新second数据int nextPos = -1;for (int j = i + 1; j < LEN; j++) {if (testData[j] == testData[i]) {nextPos = j;break;}}if (nextPos == -1)nextPos = INF;opt[testData[i]] = nextPos;}cout << "OPT算法" << endl;cout << "\t缺页数:" << fail - BLOCKNO;cout << "\t缺页率" << (double)fail / LEN;cout << "\t命中率" << (double)success / LEN;return 0;}int findLRU(map<int, int> managedMap) {int max = -1;int index;map<int, int> ::iterator it=managedMap.begin();for (; it != managedMap.end(); it++) {if (it->second > max) {max = it->second;index = it->first;}}return index;}
阅读全文
0 0
- OPT, LRU, FIFO页面调度算法的模拟
- 操作系统模拟页面调度算法(OPT、FIFO、LRU)演示(vc6.0调试通过)
- 操作系统模拟页面调度算法(OPT、FIFO、LRU)演示(vc2010调试通过)(二)
- FIFO、LRU、OPT页面调度算法及例子
- 页面调度算法 FIFO,LRU,OPT,及C++代码
- 页面置换算法(FIFO,LRU,OPT)c模拟
- 模拟分页,FIFO,LRU,OPT算法
- FIFO, LRU, OPT 页面置换算法
- 页面置换算法-FIFO、LRU、OPT
- 页面置换算法总结-FIFO-LRU-OPT
- FIFO,LRU,OPT页面置换算法
- 页面置换算法 FIFO,OPT,LRU
- 关于缓存调度算法FIFO、LRU、OPT这三种置换算法的缺页次数
- 操作系统实验(2)-- 模拟操作系统的页面置换 LRU OPT FIFO
- opt,fifo,lru算法实验
- FIFO,LRU,OPT置换算法
- LRU和FIFO算法的页面调度举…
- 转载:操作系统页面置换算法(opt,lru,fifo,clock)实现
- JZOJ5440. 【NOIP2017提高A组冲刺11.1】背包
- Java8函数式编程实践精华
- SVN 服务器与客户端搭建使用
- vue-cli安装步骤
- 关于在github中clone 文件产生的问题
- OPT, LRU, FIFO页面调度算法的模拟
- Vulkan规范:第一章
- 提交文件
- Rightmost Digit
- 相邻最大矩形面积
- TCP包结构简介
- 判断对象存活方法及回收方法
- 欢迎使用CSDN-markdown编辑器
- 【1701H1】【穆晨】【171101】连续第二十二天总结