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,是一种页面置换算法. 对于在内存中但又不用的数据块(内存块 ...
随机推荐
- 【ubuntu】开机一直“/dev/sda3:clean, XXX files, XXXX blocks”解决方法
由于该电脑是实验室公用跑模型的机子,在解决过程中,发现是 cuda 导致一直进不了系统.原因是装了两个不同版本的cuda,一个9.2,另一个10.0,因为是公用的,目前尚不清楚,怎么同时装上两个的,也 ...
- 【C++】简介
注意:以下内容摘自文献[1],修改了部分内容. 前言 关于软件产业发展史,不妨访问“首次全面深度解密华为方舟编译器”一文,不仅详细介绍了软件产业的发展,还有华为方舟编译器产生的背景,值得一看! 1. ...
- Spring boot Sample 005之spring-boot-profile
一.环境 1.1.Idea 2020.1 1.2.JDK 1.8 二.目的 通过yaml文件配置spring boot 属性文件 三.步骤 3.1.点击File -> New Project - ...
- Rocket - config - implicit Parameters
https://mp.weixin.qq.com/s/OH_Z1gdSUpfgM-tjx0OlrA 追溯配置信息的源头. 0. HasRocketCoreParameters Has ...
- xss(跨站脚本攻击)
xss(跨站脚本攻击) 原理:攻击者可以通过在页面中注入恶意链接或者脚本代码,当受害者访问时,脚本代码会在其浏览器中执行,这个时候,我们可以获取当前用户的cookie或者进行重定向等操作. xss造成 ...
- Java实现 蓝桥杯VIP 算法训练 拦截导弹
1260:[例9.4]拦截导弹(Noip1999) 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 4063 通过数: 1477 [题目描述] 某国为了防御敌国的导弹袭击,发展出一 ...
- Java实现 LeetCode 303 区域和检索 - 数组不可变
303. 区域和检索 - 数组不可变 给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点. 示例: 给定 nums = [-2, 0, 3, ...
- Java实现 蓝桥杯VIP 算法提高 林丹大战李宗伟
问题描述 我们用0表示林丹,1表示李宗伟. 输入数据中每行会给出一个0或者1,表示对应选手得1分. 当一方得分达到21分时,只要该方与对方分差超过1分,该方即胜出. 你需要输出最后获胜选手的代号. 输 ...
- Java实现 LeetCode 75 颜色分类
75. 颜色分类 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红 ...
- java实现国庆星期日
** 国庆星期日** 1949年的国庆节(10月1日)是星期六. 今年(2012)的国庆节是星期一. 那么,从建国到现在,有几次国庆节正好是星期日呢? 只要答案,不限手段! 可以用windows日历, ...