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

本文介绍了虚拟存储器的概念,重点讲解了在分页虚拟存储系统中,FIFO(先进先出)和LRU(最近最少使用)页面置换算法的原理。在FIFO算法中,淘汰最先进入主存的页面;而在LRU算法中,则淘汰最近最少访问的页面。文章还提供了这两种算法的实现思路和操作流程。
摘要由CSDN通过智能技术生成

一、实验目的

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

二、实验原理

(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 <iostream>
#include<vector>
#include <iomanip>
#include <algorithm>
#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 < N; i++)
        if(block[i].getflag()==0)
            return i;
    return -1;
}
bool ExistPage(Block *block,int page){
   
    for (int i = 0; i < N;i++){
   
        if(block[i].getpage_number()==page)
            return true;
    }
    return false;
}

bool cmp
  • 5
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值