OPT

结果

实现一个如上图所示那样简明扼要OPT算法
简要说明:手动输入页面个数和物理块数,自动生成页面信息,“*”表示缺页。

代码

#include"pch.h"
#include <iostream>
#include<math.h>
#include <vector>
#include <windows.h>using namespace std;class test {private:HANDLE hout;COORD coord;int count = 0;int count1 = 0;int count_num = 0;int block_num, page_num;std::vector<int> page;//页面走向std::vector<int> block;//物理块public:test();void opt();void new_out(int, int, int);void out();
};test::test()
{cout << "请输入页面个数" << endl;cin >> page_num;cout << "请输入物理块数" << endl;cin >> block_num;for (int i = 0; i < page_num; i++){int k;while (1){k = rand() % 10;if (k != 0)break;}page.push_back(k);}for (int i = 0; i < page.size(); i++)cout << page[i] << "  ";cout << endl;
}void test::out()
{cout << "缺页率" << (float)count_num / page.size() << endl;
}void test::new_out(int i, int t, int out)
{count1++;coord.X = i + count;coord.Y = t + 4;hout = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hout, coord);cout << out << endl;
}void test::opt()
{int k = 0;int u = 0;for (int i = 0; i < page.size(); i++){if (k == 0){block.push_back(page[i]);test::new_out(i, 2, block[0]);k++;coord.X = i + count;coord.Y = block.size() + 6;hout = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hout, coord);cout << "*" << endl;count_num++;if (count1 == block.size()){count1 = 0;count += 2;}}else{if (block.size() < block_num){for (int m = 0; m < block.size(); m++){if (page[i] == block[m])u = 1;}if (u == 1){u = 0;for (int m = 0; m < block.size(); m++){test::new_out(i, m + 2, block[m]);if (count1 == block.size()){count1 = 0;count += 2;}}Sleep(500);}else{block.push_back(page[i]);for (int m = 0; m < block.size(); m++){test::new_out(i, m + 2, block[m]);}Sleep(500);coord.X = i + count;coord.Y = block.size() + 6;hout = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hout, coord);cout << "*" << endl;count_num++;if (count1 == block.size()){count1 = 0;count += 2;}}}else{for (int m = 0; m < block.size(); m++){if (page[i] == block[m])u = 1;}if (u == 1)  //不缺页{u = 0;for (int m = 0; m < block.size(); m++){test::new_out(i, m + 2, block[m]);if (count1 == block.size()){count1 = 0;count += 2;}cout << endl;}Sleep(500);}else //缺页{std::vector<int> test;int max_span = 0;int w = 0;if (i < page.size() - 2){for (int n = i + 1; n < page.size(); n++){for (int m = 0; m < block.size(); m++){if (page[n] == block[m]){max_span = page[n];if (w == 0){test.push_back(max_span); w = 1;break;}else{int y = 0;for (int g = 0; g < test.size(); g++){if (test[g] == max_span){y = 1; break;}}if (y == 0)test.push_back(max_span);}}}}if (test.size() == block.size()){for (int m = 0; m < block.size(); m++){if (block[m] == test[test.size() - 1]){block[m] = page[i];break;}}}else{int y = 0;for (int m = 0; m < block.size(); m++){for (int g = 0; g < test.size(); g++){if (block[m] == test[g]){y = 1; break;}}if (y == 0){block[m] = page[i]; break;}y = 0;}}test.clear();for (int m = 0; m < block.size(); m++){test::new_out(i, m + 2, block[m]);}Sleep(500);coord.X = i + count;coord.Y = block.size() + 6;hout = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hout, coord);cout << "*" << endl;count_num++;if (count1 == block.size()){count1 = 0;count += 2;}}else if (i < page.size() - 1){for (int m = 0; m < block_num; m++){if (page[i + 1] != block[m]){block[m] = page[i];break;}}for (int m = 0; m < block.size(); m++){test::new_out(i, m + 2, block[m]);}Sleep(500);coord.X = i + count;coord.Y = block.size() + 6;hout = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hout, coord);cout << "*" << endl;count_num++;if (count1 == block.size()){count1 = 0;count += 2;}}else{for (int m = 0; m < block_num; m++){if (page[i] != block[m]){block[m] = page[i]; break;}}for (int m = 0; m < block.size(); m++){test::new_out(i, m + 2, block[m]);}Sleep(500);coord.X = i + count;coord.Y = block.size() + 6;hout = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hout, coord);cout << "*" << endl;count_num++;if (count1 == block.size()){count1 = 0;count += 2;}}}}}}
}int test_circulation(int n);
int test_circulation(int n)
{if (n){test s;cout << endl;s.opt();s.out();system("pause");system("cls");}n = 0;return cin.get() != '#';
}int main()
{while (test_circulation(1)){test s;cout << endl;s.opt();s.out();system("pause");system("cls");}return 0;
}

C++实现OPT最佳页面替换算法,结果简明扼要相关推荐

  1. fifo算法模拟_[源码和文档分享]基于C++的请求分页虚拟页面替换算法

    一.需求分析 实现OPT.FIFO.LRU.Clock等页面替换算法.接收用户输入参数,包括程序长度(页面数).页框个数及页面大小,输出结果采用不同颜色区分命中.替换及直接加入空闲块. OPT(最佳置 ...

  2. 操作系统4小时速成:内存管理,程序执行过程,扩充内存,连续分配,非连续分配,虚拟内存,页面替换算法

    操作系统4小时速成:内存管理,程序执行过程,扩充内存,连续分配,非连续分配,虚拟内存,页面替换算法 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测 ...

  3. 页面置换算法最佳页面置换算法模拟JAVA实现

    操作系统存储管理页面置换算法-----最佳页面置换算法模拟(JAVA实现) 话不多说,我们直接展示 package com.company;import java.util.Arrays;/*** @ ...

  4. 页面置换算法先进先出java_页面替换算法(FCFS,LRU,OPT三种)

    import java.util.Scanner; import java.util.Arrays; import java.util.LinkedList; class PageReplacemen ...

  5. 最佳页面置换算法代码_(存储管理)页面置换算法

    1. 最佳(OPT,Optimal) 所选择的被换出的页面将是永久或者是最长时间内不再被访问,通常可以保证获得最低的缺页率.是一种理论上的算法,因为无法知道一个页面多长时间不再被访问.所以常用于评价其 ...

  6. 最佳页面置换算法详解

    最佳置换算法,OPT, 简单说,最佳置换算法选择的是被淘汰的页面以后永不使用,或者是在最长时间内不再访问,以便保证最低的缺页率,,但该算法只存于理论中,无法实现 ,其中置换的关键是,置换后面待用的最远 ...

  7. 【操作系统】关于LRU算法,FIFO算法,OPT算法页面调度算法及例子

    题目:一进程刚获得三个主存块的使用权,若该进程访问页面的次序是{1,3,2,1,2,1,5,1,2,3},采用LRU算法时,缺页数是______次. LRU算法 简介:算法根据数据的历史访问记录来进行 ...

  8. 模拟实现请求分页虚存页面替换算法_模拟卷二解答

    模拟卷二解答 (满分70分) 一.填空题(每空3分,共30分) 1.计算机软件系统中的核心软件是                . 2.将汇编语言翻译成机器语言需借助于            程序. ...

  9. java课程设计进程管理_GitHub - Shadow-Java/OS: 操作系统课程设计,关键词:进程同步与互斥、进程死锁、LRU页面替换算法、时间片轮转算法、时钟等...

    可视化仿真实现作业管理与虚页内存管理 ℹ️设计要求 在多任务的作业并发环境下,仿真实现作业及进程并发环境.MMU 地址变换.进程原语.页表生成与虚页调度算法(至少实现LRU).三级作业调度过程及算法( ...

最新文章

  1. SpringBoot第二十一篇: springboot集成JMS
  2. 研究速递:老年人的心智能力不一定在衰减,抗干扰的能力会更强
  3. Kali Linux网络扫描教程(内部资料)
  4. 插件、页面-在csdn写markdown,基于chrome插件-by小雨
  5. Linux C下实现线程池
  6. EOS 共识机制 (3)DPOS+BFT
  7. ACM入门之【图论习题】
  8. linux随机数示例:随机产生以139开头的电话号码
  9. 如何将两个虚拟机ping通?如何让虚拟机连网?
  10. Spring框架整合JUnit单元测试
  11. React条件渲染列表渲染
  12. TCP链接的建立与终止
  13. 程序员离无人值班有多远?
  14. 枫之谷m平板玩服务器维护,枫之谷 M无法连接服务器是什么原因
  15. 宝塔 python项目管理器2.0 部署django项目 uwsgi
  16. Linux的初学者写代码基本步骤(make、gcc和gdb)
  17. linux vnc 蓝屏,【典型问题分析 之 蓝屏问题】
  18. 华为研发工程师编程题:明明的随机数 [python]
  19. NeoKylin7文件管理(自用)
  20. 软件测试的基础知识点

热门文章

  1. 28天高效突击大礼包:微服务+分布式+框架,java开发spark视频
  2. 苹果的移动设备上跑flash
  3. DWC的1000M的MAC自环和PHY自环测试寄存器修改方式
  4. 硬件测试的思考和改进:有道词典笔的高效测试探索
  5. 比尔盖茨的风流情史,妻子同意他与前女友同居,婚内出轨损失 80 亿
  6. Jenkins与DevOps持续交付详解
  7. Java实现MD5和国密SM3摘要算法
  8. 凸优化第三章凸函数 3.3 共轭函数
  9. 新兴五只羊床垫,仅次于五星级的睡眠体验!
  10. softmax函数名字的由来(代数几何原理)——softmax前世今生系列(2)