三种页面置换算法的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) - ...
随机推荐
- 运维常用 MySQL 命令
目录 设置用户密码 方法一 方法二 丢失root密码找回 添加用户 设置用户密码 方法一 SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NewPass ...
- FileReader.result
FileReader.result 该属性返回文件的内容.此属性仅在读取操作完成后才有效,并且数据的格式取决于用于启动读取操作的方法.FileReader]**result** 句法 var file ...
- 获取JVM转储文件的Java工具类
在上期文章如何获取JVM堆转储文件中,介绍了几种方法获取JVM的转储文件,其中编程方法是里面唯一一个从JVM内部获取的方法.这里就不演示了其他方法获取正在运行的应用程序的堆转储,重点放在了使用编程来获 ...
- Python正则表达式,看完这篇文章就够了...#华为云·寻找黑马程序员#【华为云技术分享】
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...
- eclipse svn 问题记录
1. 标记为合并,则是 舍弃的是资源库中的文件:覆盖,则是 舍弃本地文件
- ajax异步请求的常见方式
首先先介绍下ajax,ajax(ASynchronous JavaScript And XML)为异步的javascript和xml.所谓的异步和同步是指: 同步:客户端必须等待服务器的响应,在等待期 ...
- Spring Boot缓存Ehcache
Spring Boot 整合 Ehcache 修改 pom 文件 <!-- Spring Boot 缓存支持启动器 --> <dependency> <groupId ...
- UVA-11107 Life Forms(求出现K次的子串,后缀数组+二分答案)
题解: 题意: 输入n个DNA序列,你的任务是求出一个长度最大的字符串,使得它在超过一半的DNA序列中出现.如果有多解,按照字典序从小到大输入所有解. 把n个DNA序列拼在一起,中间用没有出现过的字符 ...
- Django 07
目录 ORM查询优化 only与defer(单表) select_related与prefetch_related(跨表) choices参数 MTV与MVC模型 Ajax简介 前后端传输数据编码格式 ...
- 量化投资学习笔记01——初识Pyalgotrade量化交易回测框架
年初学习量化投资,一开始想自己从头写,还是受了C/C++的影响.结果困在了计算回测数据那里,结果老也不对,就暂时放下了.最近试了一下python的各个量化投资框架,发现一个能用的——pyalgotra ...