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,是一种页面置换算法. 对于在内存中但又不用的数据块(内存块 ...
随机推荐
- 【译】OWIN: Open Web Server Interface for .NET
主要是使用 OAuth 时,它运行在 OWIN 上,然后又出了若干问题,总之,发现对 IIS.ASP.NET 和 OWIN 理解一塌糊涂. 后面看到 OWIN: Open Web Server Int ...
- 被缠上了,小王问我怎么在 Spring Boot 中使用 JDBC 连接 MySQL
上次帮小王入了 Spring Boot 的门后,他觉得我这个人和蔼可亲.平易近人,于是隔天小王又微信我说:"二哥,快教教我,怎么在 Spring Boot 项目中使用 JDBC 连接 MyS ...
- 50个SQL语句(MySQL版) 问题三
--------------------------表结构-------------------------- student(StuId,StuName,StuAge,StuSex) 学生表 tea ...
- PowerPC-MPC56xx Flash模式代码启动过程
https://mp.weixin.qq.com/s/iruM5VwKgnH_7nmIQxO0-g 参考第5章 In order for the e200z4d core to be able ...
- 八、【spring】web应用安全设计
内容 Spring Security 使用Servlet规范中的Filter保护Web应用 基于数据库和LDAP进行认证 关键词 8.1 理解Spring Security模块 Spring Secu ...
- 细说Java多线程之内存可见性笔记
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 说明:多线程的内存可见性涉及到多线程间的数据争用,也涉及到了多线程间的数据可见性 一.共享变量在线程间的 ...
- Java实现 LeetCode 826 安排工作以达到最大收益(暴力DP)
826. 安排工作以达到最大收益 有一些工作:difficulty[i] 表示第i个工作的难度,profit[i]表示第i个工作的收益. 现在我们有一些工人.worker[i]是第i个工人的能力,即该 ...
- Java实现 LeetCode 7整数反转
7. 整数反转 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: ...
- Java实现蓝桥杯勾股定理
勾股定理,西方称为毕达哥拉斯定理,它所对应的三角形现在称为:直角三角形. 已知直角三角形的斜边是某个整数,并且要求另外两条边也必须是整数. 求满足这个条件的不同直角三角形的个数. [数据格式] 输入一 ...
- java实现第六届蓝桥杯生命之树
生命之树 生命之树 在X森林里,上帝创建了生命之树. 他给每棵树的每个节点(叶子也称为一个节点)上,都标了一个整数,代表这个点的和谐值. 上帝要在这棵树内选出一个非空节点集S,使得对于S中的任意两个点 ...