#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++模拟的更多相关文章

  1. OS_页面置换算法:C++实现

    一.实验目的: 通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点,掌握虚拟存储请求页式存储管理中几种页面置换算法的基本思想和实现过程,并比较它们的效率. 二.实验内容: 本实 ...

  2. 页面置换算法——最近最久未使用算法(c语言实现)

    操作系统实验:用C语言编程实现最近最久未使用置换算法(LRU) 最近最久未使用置换算法(LRU),全称Least Recently Used,是一种页面置换算法. 对于在内存中但又不用的数据块(内存块 ...

  3. (待续)C#语言中的动态数组(ArrayList)模拟常用页面置换算法(FIFO、LRU、Optimal)

    目录 00 简介 01 算法概述 02 公用方法与变量解释 03 先进先出置换算法(FIFO) 04 最近最久未使用(LRU)算法 05 最佳置换算法(OPT) 00 简介 页面置换算法主要是记录内存 ...

  4. 虚存管理页面置换算法 — FIFO和RUL算法模拟实现

    本篇博文为追忆以前写过的算法系列第一篇(20081021) 温故知新 目的: 为了解决内存容量有限与多作业执行的冲突.运用了虚拟存储技术.能从逻辑上对内存进行扩充,达到扩充内存的效果.分页存储管理是实 ...

  5. 操作系统笔记(六)页面置换算法 FIFO法 LRU最近最久未使用法 CLOCK法 二次机会法

    前篇在此: 操作系统笔记(五) 虚拟内存,覆盖和交换技术 操作系统 笔记(三)计算机体系结构,地址空间.连续内存分配(四)非连续内存分配:分段,分页 内容不多,就不做index了. 功能:当缺页中断发 ...

  6. 页面置换算法之Clock算法

    1.前言 缓冲池是数据库最终的概念,数据库可以将一部分数据页放在内存中形成缓冲池,当需要一个数据页时,首先检查内存中的缓冲池是否有这个页面,如果有则直接命中返回,没有则从磁盘中读取这一页,然后缓存到内 ...

  7. 操作系统页面置换算法(opt,lru,fifo,clock)实现

    选择调出页面的算法就称为页面置换算法.好的页面置换算法应有较低的页面更换频率,也就是说,应将以后不会再访问或者以后较长时间内不会再访问的页面先调出. 常见的置换算法有以下四种(以下来自操作系统课本). ...

  8. 操作系统-1-存储管理之LFU页面置换算法(leetcode460)

    LFU缓存 题目:请你为 最不经常使用(LFU)缓存算法设计并实现数据结构.它应该支持以下操作:get 和 put. get(key) - 如果键存在于缓存中,则获取键的值(总是正数),否则返回 -1 ...

  9. 操作系统-2-存储管理之LRU页面置换算法(LeetCode146)

    LRU缓存机制 题目:运用你所掌握的数据结构,设计和实现一个  LRU (最近最少使用) 缓存机制. 它应该支持以下操作: 获取数据 get 和 写入数据 put . 获取数据 get(key) - ...

随机推荐

  1. 二进制安装 k8s 1.15.6 集群

    目录: 第一篇 环境介绍与基础配置 第二篇 部署前期准备工作 第三篇 ETCD 集群部署 第四篇 master节点的部署介绍和前置工作 第五篇 kube-nginx 和 keepalived 部署安装 ...

  2. 使用Python将xmind脑图转成excel用例(一)

    最近接到一个领导需求,将xmind脑图直接转成可以导入的excel用例,并且转换成gui可执行的exe文件,方便他人使用. 因为对Python比较熟悉,所以就想使用Python来实现这个功能,先理一下 ...

  3. 关于ios沙盒

    沙盒下主要有四个文件夹:document,caches,tmp,library document 的路径  程序运行时生成的文件,这个文件不要存比较放大的文件,比如音频,视频类,因为这里的东西会被上传 ...

  4. 微信小程序——页面栈

    刚开始用小程序的时候没怎么在意页面的跳转,也没仔细看文档中说的页面栈的内容.只要能跳转就行,wx.navigateTo,wx.redirectTo 这些方法一顿乱用.最后在做一个十层页面(以前页面栈是 ...

  5. 带着canvas去流浪系列之八 碰撞

    [摘要] canvas动画-碰撞仿真 示例代码托管在:http://www.github.com/dashnowords/blogs 经过前面章节相对枯燥的练习,相信你已经能够上手canvas的原生A ...

  6. 在Linux下生成crypt加密密码

    [摘要]当我们用红帽Kickstart脚本或useradd或其他方式写东西的时候,经常会需要用到crypt命令加密生成的密码格式.那么,有没有其他方式可以生成这种格式的密码?事实上,方法有很多 1.我 ...

  7. 转:mysql 安装失败 start service执行不下去

    简单说一下自己安装mysql的经历坑点,新手应该都会遇到.新买了一个电脑,第一次安装的情况:在网上下载好几个不同的mysql,安装都在最后一步执行的时候,执行不下去,最后打开客户端,就是闪一下就消失了 ...

  8. luogu P1379 八数码难题

    题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了 ...

  9. 入门级实操教程!从概念到部署,全方位了解K8S Ingress!

    Kubernetes Ingress用于添加规则,以将流量从外部路由到Kubernetes集群的服务中.在本文中你将了解ingress 的概念,以及用于路由外部流量到Kubernetes deploy ...

  10. jquery.countdown 倒计时插件的学习

    1.第一种简单的使用 第一个时间是你的倒计时截止时间,finalDate格式可以是YYYY/MM/DD MM/DD/YYYY YYYY/MM/DD hh:mm:ss MM/DD/YYYY hh:mm: ...