一、实验目的:

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

二、实验内容:

本实验要求使用C语言编程模拟一个拥有若干个虚页的进程在给定的若干个实页中运行、并在缺页中断发生时分别使用FIFO、OPT和LRU算法进行页面置换的情形。

三、实验要求:

  1. 虚页的个数可以事先给定(例如10个),对这些虚页访问的页地址流(其长度可以事先给定,例如20次虚页访问)可以由程序随机产生,也可以事先保存在文件中。
  2. 要求程序运行时屏幕能显示出置换过程中的状态信息并输出访问结束时的页面命中率(命中率=1-页面失效次数/页地址流长度)。
  3. 程序应允许通过为该进程分配不同的实页数,来比较几种置换算法的稳定性。

首先贯彻我们的初始风格,我们给出头文件和定义

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

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

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

  2. [Operate System & Algorithm] 页面置换算法

    页面置换算法是什么?我们看一下百度百科对页面置换算法给出的定义:在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断.当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必 ...

  3. 操作系统 页面置换算法LRU和FIFO

    LRU(Least Recently Used)最少使用页面置换算法,顾名思义,就是替换掉最少使用的页面. FIFO(first in first out,先进先出)页面置换算法,这是的最早出现的置换 ...

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

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

  5. 页面置换算法 - FIFO、LFU、LRU

    缓存算法(页面置换算法)-FIFO. LFU. LRU 在前一篇文章中通过leetcode的一道题目了解了LRU算法的具体设计思路,下面继续来探讨一下另外两种常见的Cache算法:FIFO. LFU ...

  6. 页面置换算法(最佳置换算法、FIFO置换算法、LRU置换算法、LFU置换算法)

    页面置换产生的原因是:分页请求式存储管理(它是实现虚拟存储管理的方法之一,其中一个特性是多次性-->多次将页面换入或换出内存) 效果最好的页面置换算法:最佳置换算法 比较常用的页面置换算法有:F ...

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

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

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

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

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

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

随机推荐

  1. JS 写逻辑判断,不要只知道用 if-else 和 switch

    我们在编写 JS 代码时,经常会遇到逻辑判断复杂的情况.一般情况下,可以用 if/else 或 switch 来实现多个条件判断,但会出现一个问题:随着逻辑复杂度的增加,代码中的 if/else 和 ...

  2. SQL SERVER修改为sa登陆权限报错,233,18456接连出现【抓狂ing】

    [记录生活] 今天做作业需要修改sa权限,本人电脑没错误. 同样教程发给朋友,错误百出.... 话不多说,百度很多解决方法,但是都没有解决,贴出解决方法. 0.用Windows身份验证登录,执行SQL ...

  3. 【JAVA习题七】输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

    package erase; import java.util.Scanner; public class 字符串分类 { public static void main(String[] args) ...

  4. 同步锁Lock & 生产者和消费者案例

    显示锁 Lock ①在 Java 5.0 之前,协调共享对象的访问时可以使用的机 制只有 synchronized 和 volatile . Java 5.0 后增加了一些 新的机制,但并不是一种替代 ...

  5. 域渗透分析工具BloodHound

    简介:BloodHound是一款将域内信息可视化的单页的web应用程序,是一款在域内进行信息收集的免费工具: Kali中直接命令安装即可 apt-get install bloodhound 打开lo ...

  6. css 3 背景图片为渐变色(渐变色背景图片) 学习笔记

    6年不研究CSS发现很多现功能都没有用过,例如渐变色,弹性盒子等,年前做过一个简单的管理系统,由于本人美工不好,设计不出好看的背景图片,偶然百度到背景图片可以使用渐变色(感觉发现了新大陆).以后的项目 ...

  7. ms-setting是什么

    ms-settings 遇到了两个问题,记录一下 1)windows桌面右键菜单-->显示设置或者个性化-->报错:ms-settings:personalization-backgrou ...

  8. Rocket - debug - SBA

    https://mp.weixin.qq.com/s/eFOHrEhvq2PlEJ14j2vlhg 简单介绍SBA的实现. 1. SystemBusAccessState 系统总线访问状态: 分别是: ...

  9. 【Tomcat】JSP使用Session、Cookie实现购物车

    购物界面shop.jsp 初始页面 添加商品后,在session中设置属性,重定向回到shop.jsp,然后根据session的内容显示结果 Cookie设置setMaxAge可以延长session的 ...

  10. Java实现 LeetCode 118 杨辉三角

    118. 杨辉三角 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 5 输出: [ [1], [1,1], ...