OS_页面置换算法:C++实现
一、实验目的:
通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点,掌握虚拟存储请求页式存储管理中几种页面置换算法的基本思想和实现过程,并比较它们的效率。
二、实验内容:
本实验要求使用C语言编程模拟一个拥有若干个虚页的进程在给定的若干个实页中运行、并在缺页中断发生时分别使用FIFO、OPT和LRU算法进行页面置换的情形。
三、实验要求:
- 虚页的个数可以事先给定(例如10个),对这些虚页访问的页地址流(其长度可以事先给定,例如20次虚页访问)可以由程序随机产生,也可以事先保存在文件中。
- 要求程序运行时屏幕能显示出置换过程中的状态信息并输出访问结束时的页面命中率(命中率=1-页面失效次数/页地址流长度)。
- 程序应允许通过为该进程分配不同的实页数,来比较几种置换算法的稳定性。
首先贯彻我们的初始风格,我们给出头文件和定义
#include<iostream>
using namespace std;
int page[] = {7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1,-1};//-1结束标志
int t[3] = {-1,-1,-1}; //三个物理块,由结束标志可以判断是否中间有内容
#define N 3
这个page就是我们的页,我们即将申请的页,t是物理块,都是以-1作为结束标志。
在我们的main函数中其实就是调用这些页面置换算法,看缺页次数和命中率即可。
接下来来到我们的第一个算法:先进先出FIFO
//先进先出
//主要算法思想:可以取一个时间数组记载每个物理块的时间,控制可以采取也可以采取递减
//我采用的是递减:我们可以使用一个bool记录是否被改变,未改变说明是刚刚使用的这个块我们立马
//使用,一共三块,然后继续,当我们要置换时,我们
//我们先去判断是否被改变过这个块,假设已经都改变过了,就看其时间
//时间长的就会减一减一,当我们要置换时,最先插入的已经被递减成了时间最短的,最短是0
//基本思想总结:每个插入就标记最长时间,每一次进入内存都在原在的时间-1,等到要置换的看有没有为0,
void FIFO(){
t[0]=t[1]=t[2] = -1;//init物理块
int time[3] = {0,0,0};//记录每个页面时间到达的先后
int num = 0,error = 0;//缺页次数
cout<<"+++++++++++FIFO++++++++++++"<<endl;
while(page[num] != -1){
if(cunzai(t,page[num])){
cout << page[num]<<','<<endl;//页面已经存在,不需要置换
}
else{
error++;
bool haschanged = false;
for(int i = 0;i<3;i++){
if(time[i] == 0&& haschanged == false){
time[i] = 2;
t[i] = page[num];
haschanged = true;
}
if(t[i]!= page[num] && time[i]!=0)time[i]--;
}
show(num);
cout<<endl;
}
num++;
}
cout<<"缺页次数:"<<error<<endl;
cout<<"命中率"<<1-((float)error/20)<<endl;
}
这里有两个方法,因为后面两个算法都要进行,所以我将其封装成了函数
cunzai()顾名思义判断是否存在在物理块中
show()是展示物理块中的情况,如果没有也就是等于-1我们可以用*代替,每次进行一次页面查找或置换我们都可以让它输出一次情况
最后输出缺页次数和命中率,代码很明显可以看懂,再此不进行叙述了。
ORT和LRU
基本思想我已经给出,希望读者自行体会
//最近最久未使用
//time还是一个计时变量,最开始进入物理块的时候是2,在已经存在的时候使用也会更新
//最后如果没有就找为0的将其替换,或者--使其为0再替换即可
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//最佳置换:<淘汰最长时间内不再被访问的页面 / 向后看>
//基本思想:用一个d来记录当前物理块中各个页再次出现的长度,如果不出现则是最长,
//将最长的与新的进行置换即可完成
对此已经完成了我们的需求
结束结束!休息
OS_页面置换算法:C++实现的更多相关文章
- 操作系统页面置换算法(opt,lru,fifo,clock)实现
选择调出页面的算法就称为页面置换算法.好的页面置换算法应有较低的页面更换频率,也就是说,应将以后不会再访问或者以后较长时间内不会再访问的页面先调出. 常见的置换算法有以下四种(以下来自操作系统课本). ...
- [Operate System & Algorithm] 页面置换算法
页面置换算法是什么?我们看一下百度百科对页面置换算法给出的定义:在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断.当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必 ...
- 操作系统 页面置换算法LRU和FIFO
LRU(Least Recently Used)最少使用页面置换算法,顾名思义,就是替换掉最少使用的页面. FIFO(first in first out,先进先出)页面置换算法,这是的最早出现的置换 ...
- (待续)C#语言中的动态数组(ArrayList)模拟常用页面置换算法(FIFO、LRU、Optimal)
目录 00 简介 01 算法概述 02 公用方法与变量解释 03 先进先出置换算法(FIFO) 04 最近最久未使用(LRU)算法 05 最佳置换算法(OPT) 00 简介 页面置换算法主要是记录内存 ...
- 页面置换算法 - FIFO、LFU、LRU
缓存算法(页面置换算法)-FIFO. LFU. LRU 在前一篇文章中通过leetcode的一道题目了解了LRU算法的具体设计思路,下面继续来探讨一下另外两种常见的Cache算法:FIFO. LFU ...
- 页面置换算法(最佳置换算法、FIFO置换算法、LRU置换算法、LFU置换算法)
页面置换产生的原因是:分页请求式存储管理(它是实现虚拟存储管理的方法之一,其中一个特性是多次性-->多次将页面换入或换出内存) 效果最好的页面置换算法:最佳置换算法 比较常用的页面置换算法有:F ...
- 操作系统笔记(六)页面置换算法 FIFO法 LRU最近最久未使用法 CLOCK法 二次机会法
前篇在此: 操作系统笔记(五) 虚拟内存,覆盖和交换技术 操作系统 笔记(三)计算机体系结构,地址空间.连续内存分配(四)非连续内存分配:分段,分页 内容不多,就不做index了. 功能:当缺页中断发 ...
- 虚存管理页面置换算法 — FIFO和RUL算法模拟实现
本篇博文为追忆以前写过的算法系列第一篇(20081021) 温故知新 目的: 为了解决内存容量有限与多作业执行的冲突.运用了虚拟存储技术.能从逻辑上对内存进行扩充,达到扩充内存的效果.分页存储管理是实 ...
- 页面置换算法——最近最久未使用算法(c语言实现)
操作系统实验:用C语言编程实现最近最久未使用置换算法(LRU) 最近最久未使用置换算法(LRU),全称Least Recently Used,是一种页面置换算法. 对于在内存中但又不用的数据块(内存块 ...
随机推荐
- mac下安装rabbitmq和php+rabbitq
一.首先使用brew安装rabbitmq brew install rabbitmq 安装完成,终端会出现如下内容,如图: 启动RabbitMQ 前台运行rabbitmq-server 后台运行bre ...
- 百万年薪架构师一文整理RabbitMQ、ActiveMQ、RocketMQ、Kafka
一般来说,大型应用通常会被拆分成多个子系统,这些子系统可能会部署在多台机器上,也可能只是一台机器的多个进程中,这样的应用就是分布式应用.在讨论分布式应用时,很多初学者会把它和集群这个概念搞混,因为从部 ...
- Chrome自带全网页截图
1.等待网页打开完毕 2.组合键 ctrl+shift+i 打开开发者工具 3.按 ctrl+shift+p 调出一个面板 4.输出 full 5.在下一行出现 capture full size s ...
- Rocket - tilelink - Fragmenter
https://mp.weixin.qq.com/s/kNQrhlf33AErK7IzalnUDw 简单介绍Fragmenter的实现. 1. 基本介绍 用于把上游节点地址空间范 ...
- 一文带你了解js数据储存及深复制(深拷贝)与浅复制(浅拷贝)
背景 在日常开发中,偶尔会遇到需要复制对象的情况,需要进行对象的复制. 由于现在流行标题党,所以,一文带你了解js数据储存及深复制(深拷贝)与浅复制(浅拷贝) 理解 首先就需要理解 js 中的数据类型 ...
- 初步理解 MySQL数据库
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 1. 索引是做什么的? 索引用于快速找出在某个列中有一特定值的行.不使用索引,MYSQL必须从第1条记录 ...
- Java实现蓝桥杯模拟组织晚会
问题描述 小明要组织一台晚会,总共准备了 n 个节目.然后晚会的时间有限,他只能最终选择其中的 m 个节目. 这 n 个节目是按照小明设想的顺序给定的,顺序不能改变. 小明发现,观众对于晚上的喜欢程度 ...
- Java实现 蓝桥杯VIP 算法训练 数组查找及替换问题
描述 给定某整数数组和某一整数b.要求删除数组中可以被b整除的所有元素,同时将该数组各元素按从小到大排序.如果数组元素数值在A到Z的ASCII之间,替换为对应字母.元素个数不超过100,b在1至100 ...
- Java实现 LeetCode 35 搜索插入位置
35. 搜索插入位置 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会被按顺序插入的位置. 你可以假设数组中无重复元素. 示例 1: 输入: [1, ...
- java实现手机尾号评分
30年的改革开放,给中国带来了翻天覆地的变化.2011全年中国手机产量约为11.72亿部.手机已经成为百姓的基本日用品! 给手机选个好听又好记的号码可能是许多人的心愿.但号源有限,只能辅以有偿选号的方 ...