三种页面置换算法的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) - ...
随机推荐
- SQL基础语句(详解版)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/CZXY18ji/article/deta ...
- nginx中proxy_pass小斜杠
nginx中proxy_pass小斜杠 1. 故事背景 相信做微信公众号开发的朋友都知道,要想在微信中预览效果,必须使用域名访问.很多朋友使用内网穿透工具.不仅不好用还不稳定.所以,发挥脸厚吃天下的态 ...
- Android触摸反馈
事件分发 当点击事件发生时,事件最先传递给Activity,Activity会首先将事件将被所属的Window进行处理,即调用 superDispatchTouchEvent() 方法.通过观察sup ...
- VMware中linux虚拟机的安装
打开安装的VMware 15,点击新建虚拟机 2.选择典型即可,点击下一步 3.选择“稍后安装操作系统”,点击下一步 4.选择想安的版本,点击下一步 5.设置虚拟机名称及安装位置(路径必须全英文!) ...
- vue基本开发环境搭建
先安装node运行环境下载网址 https://nodejs.org/en/或者http://nodejs.cn/ 检查node是否安装成功命令行窗口直接输入 $ node -v 如果输出版本号,说明 ...
- Java继承、构造、重写
Music mu=new Music(); Musc m=mu;//地址一样 继承:Java只支持单继承,不支持多继承. Java支持多层(重)继承(继承体系). 如果类之间存在着:is a 的关 ...
- pom父工程dependencyManagement中的jar包在子工程中不写版本号无法引入的问题
1.遇到的问题: 本人用的idea,然后在导入别人的项目的时候,pom文件中没有报错了,但是在maven栏目中jar包却一直报红,是因为我没写版本的原因吗?不对呀,我的父工程下已经写了springb ...
- 【华为云实战开发】9.如何进行PHP项目的快速搭建并实现CICD?【华为云技术分享】
1 概述 1.1 文章目的 本文主要想为研发PHP项目的企业或个人提供上云指导,通过本文中的示例项目 “workerman-todpole”,为开发者提供包括项目管理,代码托管,代码检查,编译构建,测 ...
- 了解BootLoader——基于MPC5744P Bootloader例程
一.BootLoader的作用:BootLoader是固化在PFlash中的一个程序,其作用可以分为两部分:boot和load. (1)boot:MCU上电时首先会运行BootLoader程序(因为它 ...
- flutter最简单轻量便捷的路由管理方案NavRouter
大家好,我是CrazyQ1,今天给大家推荐一个路由管理方案,用的非常不错的,叫nav_router. 项目地址是:https://github.com/fluttercandies/nav_route ...