页面置换算法(FIFO、LRU)用C++实现 您所在的位置:网站首页 linux内存页面置换算法 页面置换算法(FIFO、LRU)用C++实现

页面置换算法(FIFO、LRU)用C++实现

2024-06-26 15:36| 来源: 网络整理| 查看: 265

一、实验目的

为了使大的作业(其地址空间超过主存可用空间)或多个作业的地址空间之和超过实际主存空间时,仍能运行,引入了虚拟存储器的概念。使运行作业的一部分地址空间在主存,另一部分地址空间在辅存,由操作系统实现多级存储器的自动管理,实现主存空间的自动覆盖。要求学生通过本实验,对请求分页管理有一个清楚的概念。

二、实验原理

(1)在分页虚拟存储系统中,当硬件发出缺页中断后转操作系统处理缺页中断。查主存分块表看有无可用空闲块。若有,则为进程分配-块。如果主存中已无空闲块,当采用先进先出算法时,已进人的各页排成一个FIFO队列,其头部放在变量K中。淘汰时,淘汰最先进人主存的一页。若该页修改过,还要存入磁盘。然后再把当前要访问的页装人该块,并修改页表和存储分块表。恢复中断现场,继续执行被中断的指令。 在这里插入图片描述 数组P中各个元素为作业已在主存的页号。假定作业最多可分配m块,且该作业的装人情况如图10-2所示。当淘汰一页时,总是淘汰P[K]所指页。之后调整数组P: -----P[K]=要装入的页 -----K=(K+1)mod m 先进先出(FIFO)淘汰算法框图如图10-2所示。 (2)当采用LRU算法时,则淘汰最近很少访问的页。 该算法也可采用一个数组P记录该作业已在主存的页。假定分给该作业4个空闲块。 为了模拟LRU算法,将数组P设计成一个能含有4个元素的堆栈,栈指针用HEAD 表示。假定开始时,堆栈为空。HEAD的初值为0。当调一个页时,按P[HEAD]-调入的页号,HEAD=(HEAD+1) mod m。当访问的页在主存时,将该页调整到栈顶:首先找到该页在P中的位置A.若A≠HEAD,则将该页放栈顶,其他页依次向下移,以反映该页是最近访问的页。 最近很少访问(LRU)淘汰算法框图如图10-3所示。 (3)FIFO和LRU算法使用的指令序列如表10-3所示。 在这里插入图片描述 在这里插入图片描述

三、实验内容 1.FIFO算法 #include #include #include #include #define N 4//物理块数 using namespace std; int interrupt_times = 0;//记录缺页中断次数; int exchange_times = 0;//记录页面置换次数 double short_rate;//缺页率 class Block{ public: Block(){ flag = 0;time = 0;} void pushpage(int num){ //将某一页面装进物理块中 page_number = num; time = 1; flag = 1; } int getpage_number(){ return page_number;} bool getflag(){ return flag;} void addtime(){ time++; } int gettime(){ return time;} private: int page_number;//页面号 bool flag; //是否是空物理块 int time; //页面在物理块中的时间 }; int ExistEmpty(Block *block){ for (int i = 0; i if(block[i].getpage_number()==page) return true;


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有