三种页面置换算法的C++模拟
#include<iostream>
using namespace std;
int page[] = { ,,,,,,,,,,,,,,,,,,,,- };
void FIFO();
void OPT();
void RLU();
bool inArray(int* a, int n, int p);
int main(void) {
FIFO();
OPT();
RLU();
system("pause");
}
void FIFO() {
int temp[] = { -,-,- };
int time[] = { ,, };
int num = ;
int error = ;
cout << "FIFO:" << endl;
while (page[num] != -) {
if (inArray(temp, , page[num])) {
std::cout << page[num] << ',';
std::cout << endl;
}
else {
error++;
bool hasChanged = false;
for (int i = ; i < ; i++) {
if (time[i] == && hasChanged == false) {
time[i] = ;
temp[i] = page[num];
hasChanged = true;
}
if (time[i] != ) {
time[i]--;
}
}
std::cout << page[num] << ',' << ' ';
for (size_t i = ; i < ; i++) {
if (temp[i] == -) {
std::cout << '*' << ' ';
}
else {
std::cout << temp[i] << ' ';
}
}
std::cout << endl;
}
num++;
}
cout << "错误率:" << error << endl;
}
bool inArray(int* a, int n, int p) {
for (int i = ; i < n; i++) {
if (p == a[i]) {
return true;
}
}
return false;
}
void OPT() {
int temp[] = { -,-,- };
int num = ;
int error = ;
//OPT已知未来的页数为20
cout << "OPT:" << endl;
while (page[num] != -) {
int a = page[num];
if (inArray(temp, , page[num])) {
std::cout << page[num] << ',';
std::cout << endl;
}
else {
error++;
bool fuck = false;
for (size_t i = ; i < ; i++){
if (temp[i] == -) {
temp[i] = page[num];
fuck = true;
break;
}
} if (fuck == false) {
int distance[] = { ,, };
for (int i = ; i >= num; i--) {
for (int j = ; j < ; j++) {
if (temp[j] == page[i] && (i - num) < distance[j]) {
distance[j] = i - num;
}
}
}
int k = ;
int max = -;
for (size_t i = ; i < ; i++) {
if (max < distance[i]) {
max = distance[i];
k = i;
}
}
temp[k] = page[num];
}
std::cout << page[num] << ',' << ' ';
for (size_t i = ; i < ; i++) {
if (temp[i] == -) {
std::cout << '*' << ' ';
}
else {
std::cout << temp[i] << ' ';
}
}
std::cout << endl;
}
num++;
}
cout << "错误率:" << error << endl;
}
void RLU(){
int temp[] = { -,-,- };
int time[] = { -,-,- };
int num = ;
int error = ;
cout << "RLU:" << endl;
while (page[num] != -) {
int a = page[num];
if (inArray(temp, , page[num])) {
std::cout << page[num] << ',';
std::cout << endl;
//bool Changed = false;
for (int i = ; i < ; i++) {
if (temp[i] == page[num]) {
time[i] = ;
//Changed = true;
}
if (temp[i] != page[num]&&time[i]!=) {
time[i]--;
}
}
}
else {
error++;
//bool hasChange = false;
for (size_t i = ; i < ; i++){
if (temp[i] == -) {
temp[i] = page[num];
time[i] = ;
break;
}
if(time[i] == ) {
temp[i] = page[num];
time[i] = ;
}
else {
time[i]--;
}
}
std::cout << page[num] << ',' << ' ';
for (size_t i = ; i < ; i++) {
if (temp[i] == -) {
std::cout << '*' << ' ';
}
else {
std::cout << temp[i] << ' ';
}
}
std::cout << endl;
}
num++;
}
cout << "错误率:" << error << endl;
}
三种页面置换算法的C++模拟的更多相关文章
- OS_页面置换算法:C++实现
一.实验目的: 通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点,掌握虚拟存储请求页式存储管理中几种页面置换算法的基本思想和实现过程,并比较它们的效率. 二.实验内容: 本实 ...
- 页面置换算法——最近最久未使用算法(c语言实现)
操作系统实验:用C语言编程实现最近最久未使用置换算法(LRU) 最近最久未使用置换算法(LRU),全称Least Recently Used,是一种页面置换算法. 对于在内存中但又不用的数据块(内存块 ...
- (待续)C#语言中的动态数组(ArrayList)模拟常用页面置换算法(FIFO、LRU、Optimal)
目录 00 简介 01 算法概述 02 公用方法与变量解释 03 先进先出置换算法(FIFO) 04 最近最久未使用(LRU)算法 05 最佳置换算法(OPT) 00 简介 页面置换算法主要是记录内存 ...
- 虚存管理页面置换算法 — FIFO和RUL算法模拟实现
本篇博文为追忆以前写过的算法系列第一篇(20081021) 温故知新 目的: 为了解决内存容量有限与多作业执行的冲突.运用了虚拟存储技术.能从逻辑上对内存进行扩充,达到扩充内存的效果.分页存储管理是实 ...
- 操作系统笔记(六)页面置换算法 FIFO法 LRU最近最久未使用法 CLOCK法 二次机会法
前篇在此: 操作系统笔记(五) 虚拟内存,覆盖和交换技术 操作系统 笔记(三)计算机体系结构,地址空间.连续内存分配(四)非连续内存分配:分段,分页 内容不多,就不做index了. 功能:当缺页中断发 ...
- 页面置换算法之Clock算法
1.前言 缓冲池是数据库最终的概念,数据库可以将一部分数据页放在内存中形成缓冲池,当需要一个数据页时,首先检查内存中的缓冲池是否有这个页面,如果有则直接命中返回,没有则从磁盘中读取这一页,然后缓存到内 ...
- 操作系统页面置换算法(opt,lru,fifo,clock)实现
选择调出页面的算法就称为页面置换算法.好的页面置换算法应有较低的页面更换频率,也就是说,应将以后不会再访问或者以后较长时间内不会再访问的页面先调出. 常见的置换算法有以下四种(以下来自操作系统课本). ...
- 操作系统-1-存储管理之LFU页面置换算法(leetcode460)
LFU缓存 题目:请你为 最不经常使用(LFU)缓存算法设计并实现数据结构.它应该支持以下操作:get 和 put. get(key) - 如果键存在于缓存中,则获取键的值(总是正数),否则返回 -1 ...
- 操作系统-2-存储管理之LRU页面置换算法(LeetCode146)
LRU缓存机制 题目:运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制. 它应该支持以下操作: 获取数据 get 和 写入数据 put . 获取数据 get(key) - ...
随机推荐
- 【JavaEE】之MyBatis输出映射
MyBatis中的输出映射有两种:resultType和resultMap. 1.resultType 使用resultType进行结果映射时,只有当查询结果中有至少一列的名称和resultType指 ...
- 基于ManagedDataAccess开发的OracleDBHelpe工具集伸手党的福音
在使用前先加入ManagedDataAccessDLL文件方可使用 添加方法:右键项目.点击管理NuGet程序包,点击浏览,在输入框内输入ManagedDataAccess,再点击安装即可 Oracl ...
- 在vue中使用基于d3为基础的dagre-d3.js搞定一个流程图组件
项目中想搞定一个流程图,开始使用了阿里的G6,但是G6目前不支持手势,这样就很郁闷了,因为公司的领导都是使用iPad看的,你不支持手势是不行的,后来又想到了百度的echarts,试了试,感觉还不错,手 ...
- js中的宏任务与微任务
如果你已经知道了js中存在宏任务和微任务,那么你一定已经了解过promise了.因为在js中promise是微任务的一个入口. 先来看一道题: setTimeout(function(){ conso ...
- HashMap踩坑实录——谁动了我的奶酪
说到HashMap,hashCode 和 equals ,想必绝大多数人都不会陌生,然而你真的了解这它们的机制么?本文将通过一个简单的Demo还原我自己前不久在 HashMap 上导致的线上问题,看看 ...
- 配置中心入门案例以及出现Could not resolve placeholder 'XXX' in value "${XXX}"的解决方式
编写配置中心的服务端 创建项目 修改 pom 文件添加 config-server 坐标 <?xml version="1.0" encoding="UTF-8&q ...
- zuul+security跨域Cors问题解决
zuul+security跨域Cors问题解决 简介 场景 在服务后台都会出现跨域cors问题,不过一般spring解决起来比较方便,在框架+框架的基础上,问题就显得特别明显了,各种冲突,不了解源码的 ...
- CodeChef FAVNUM FavouriteNumbers(AC自动机+数位dp+二分答案)
All submissions for this problem are available. Chef likes numbers and number theory, we all know th ...
- Codeforces 题解 CF863A 【Quasi-palindrome】
此题本质上是:求一个数去掉后缀零后是否是回文串 因此,代码分为: >>> 读入 >>> 删除后缀0 >>> 判断回文 >>> 转 ...
- 笔记||Python3之列表与元组
列表List: 特性:①列表也是一种Squence类型 ②下标 ③能切片 ④可以存储任何类型的数据,每个元素是任意类型 ⑤内容可以改变:增删改查 1 -- 值 列表的元素值是可以改变的 a ...