lru置换算法(代码片段)

无乎648 无乎648     2023-03-09     222

关键词:

LRU置换算法

1、实践内容说明

已知系统为一进程分配的物理块数,进程运行过程中引用的页面号,编程使用LRU算法输出置换的页号、缺页中断次数及缺页率。

2.算法描述

1、从内存调出一页程序或数据到磁盘的对换区,把选择换出的页面的算法称为页面置换算法。
2、置换算法的好坏将直接影响系统的性能。
LRU置换算法(基于计数器法)是选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最久未使用的页面被淘汰掉。

3.实验源码

#include <stdio.h>
#define PAGES 12  /*页面引用页数*/
#define M 3      /*当前分配给改作业的物理块数*/
//#define M 4
/*页面引用串*/
int page[PAGES] =  4,3,2,1,4,3,5,4,3,2,1,5;
int rel[M][PAGES];   /*存储结果数组*/
/*内存物理块结构体*/
typedef struct
  int pnum;     /*该块中所存的页面号*/
  int tm;       /*从最近一次调入所经历的时间*/
PBlock;
/*初始化物理块数组*/
void init(PBlock *pb)

  int i,j;
  //pb = (PBlock*)malloc(sizeof(PBlock)*M);
  for(i=0;i<M;i++)
    pb[i].pnum = -1;
    pb[i].tm = -1;
    for(j=0;j<PAGES;j++)
      rel[i][j] = -1;
    
  

/*打印结果数组*/
void printRelArr(int rel[M][PAGES])

  int i,j;
  for(i=0;i<M;i++)
    for(j=0;j<PAGES;j++)
      if(rel[i][j]==-1)
        printf("_ ");
      else
        printf("%d ",rel[i][j]);
    
    printf("\\n");
  

/*打印一维数组*/
void printArr1(int *arr,int n)

    int i;
    for(i=0;i<n;i++)
      printf("%d ",arr[i]);
    
    printf("\\n");

/*查看页面号为num的页面是否在内存块中,存在返回1*/
int in_mem(int num,PBlock *pb,int m)

  int i;
  int b = 0;
  for(i=0;i<m;i++)
      if(pb[i].pnum == num)
        b = 1;
        break;
      
  
  return b;


/*获得最近最久的块*/
int getP(PBlock *pb,int p)

  int i;
  bool out = true;  //
  for(i=0;i<M;i++)
    if(pb[i].tm == -1)
      p = i;
      out = false;
      break;
    
  
  if(out)
    for(i=0;i<M;i++)
      if(pb[i].tm>pb[p].tm)
        p = i;
    
  
  return p;

int getEQnum(int num,PBlock *pb)

  int i;
  int in = -1;
  for(i=0;i<M;i++)
    if(pb[i].pnum == num)
      in = i;
      break;
    
  
  return in;

/*LRU算法*/
void lru(PBlock *pb,int m)

  int lps=0;   /*缺页次数*/
  double lpp;   /*缺页率*/
  int p = 0;    /*替换指针*/
  int index =0;  /*页面号索引*/
  while(index<PAGES)
      if(!in_mem(page[index],pb,m))   /*如果页面不在物理块中*/
        p = getP(pb,p);
        pb[p].pnum = page[index];
        pb[p].tm = 0;
        lps++;
        for(int i=0;i<M;i++)
          rel[i][index] = pb[i].pnum;
        
      else                         /*如果页面在物理块中*/
        int in = getEQnum(page[index],pb);  /*获取该页面在物理块中的索引*/
          pb[in].tm = 0;
      
      int i;
      for(i=0;i<M;i++)
          if(i!=p&&pb[i].tm!=-1)
            pb[i].tm++;
          
      
      index++;
  
  printf("LRU算法所得缺页次数为 %d \\n",lps);
  lpp = 1.0*lps/PAGES;
  printf("LRU算法缺页率为: %0.4lf\\n",lpp);
  printf("页面号序列为:\\n");
  printArr1(page,PAGES);
  printf("LRU结果数组为:\\n");
  printRelArr(rel);

int main()

  PBlock pb[M];//3个物理块 
  init(pb);
  lru(pb,M);
  return 0;

最近最少使用算法(lru)——页面置换(代码片段)

原创上一篇博客写了先进先出算法(FIFO)——页面置换:http://www.cnblogs.com/chiweiming/p/9058438.html此篇介绍最近最少使用算法(LRU)——页面置换,与上一篇的代码大同小异,只是用了不同的方法从页面队列中选出需要淘汰出的页... 查看详情

lru和fifo页面置换算法模拟实战(代码片段)

Introduction本文将介绍如何使用LRU和FIFO实现页面置换的模拟(Python实现),并使用缺页率进行算法的评价。Requirement先附上具体的要求:【实验目的】(1)了解内存分页管理策略(2)掌握调页策略(3&... 查看详情

lru置换算法(代码片段)

LRU置换算法1、实践内容说明已知系统为一进程分配的物理块数,进程运行过程中引用的页面号,编程使用LRU算法输出置换的页号、缺页中断次数及缺页率。2.算法描述1、从内存调出一页程序或数据到磁盘的对换区,... 查看详情

缓存置换策略-lru算法(代码片段)

LRU算法LRU算法定义:    LRU算法是指最近最少使用算法,意思是LRU认为最近使用过的数据,将来被访问的概率会大,最近没有被访问的数据意味着以后刚问的概率小。 为何要用LRU算法:  1、我们的存储空间是有... 查看详情

操作系统之页面置换算法(最佳置换opt,先进先出fifo,最近最久未使用lru)(代码片段)

最近学习操作系统时,实验要求实现常见的三种页面置换算法,博主按照书上要求试着编写,实现了案例,并记录在博客随记中,以便后续自己复习并也给需要的同学分享参考一下!水平有限,若有错,请悄悄告诉博主!博主好... 查看详情

hashmap+双向链表手写lru缓存算法/页面置换算法(代码片段)

importjava.util.Hashtable;//https://zhuanlan.zhihu.com/p/34133067classDLinkedListStringkey;//键intvalue;//值DLinkedListpre;//双向链表前驱DLinkedListnext;//双向链表后继publicclassLRUCacheprivateHashtable<String,DLinkedList>cache=newHashtable<String,DLinkedList>();privateintc... 查看详情

(计算机组成原理)第三章存储系统-第六节3:页面置换算法(fifo,近期最少使用算法-lru,lfu)(代码片段)

文章目录一:随机算法(RAND)二:先进先出算法(FIFO)三:近期最少使用算法(LRU)——效率最高四:最不经常使用算法(LFU)(计算机组成原理)第三章存储系统-第六节2:Cache... 查看详情

页面置换算法(代码片段)

要求: 写了三种算法:FIFO,LRU,OPT.指导书上有一个错误,即要求的磁道是0-319,但是如果按照指导书上的指令生成方法,可能会生成320这条指令,自己写个检测语句就成了。。FIFO可能有点小问题,就是检测某页面是否在内存... 查看详情

lru算法与增强(代码片段)

...数据的历史访问记录来进行淘汰数据。常用于一些缓冲区置换,页面置换等处理。一个典型的双向链表+HashMap的LRU如下:  2.LRU存在问题与LRUG设计LRU的问题是无法回避突发性的热噪数据,造成缓存数据的污染。对此有些LRU... 查看详情

操作系统-内存页面分配策略和页面置换算法(代码片段)

...章目录0基本概念1页面分配策略1.1页面分配的策略1.2页面置换的策略1.3分配和置换的策略组合2页面调入策略2.1页面调入的时机2.2页面调入的位置3页面置换算法3.1最佳置换算法(OPT)3.2先进先出置换算法(FIFO)3.3... 查看详情

操作系统页面置换算法lru和fifo

LRU(LeastRecentlyUsed)最少使用页面置换算法,顾名思义,就是替换掉最少使用的页面。FIFO(firstinfirstout,先进先出)页面置换算法,这是的最早出现的置换算法。该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最... 查看详情

缓存算法(fifolrulfu三种算法的区别)(代码片段)

...的可能性很小。空间满的时候,最先进入的数据会被最早置换(淘汰)掉。FIFO算法的描述:设计一种缓存结构,该结构在构造时确定大小,假设大小为K,并有两个功能:set(key,value):将记录(key,value)插入该结构。当缓存满时,将... 查看详情

lru算法原理解析(代码片段)

LRU是LeastRecentlyUsed的缩写,即最近最少使用,常用于页面置换算法,是为虚拟页式存储管理服务的。现代操作系统提供了一种对主存的抽象概念虚拟内存,来对主存进行更好地管理。他将主存看成是一个存储在磁盘上的地址空间... 查看详情

lru(最近最少使用淘汰算法)基本实现(代码片段)

...间内也不会被访问,即时间局部性,那我们就把它调出(置换出)内存。为了实现LRU淘汰算法,需要一些特殊的硬件支持。三种可行方法计数器法特殊栈法寄存器法下面给出,栈法的实现代码:原理: 1#include<iostream>2usin... 查看详情

lru算法list链表实现(代码片段)

...astRecentlyUsed的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t,当须淘汰一个页面时,选择现... 查看详情

操作系统内存换出---15(代码片段)

...存换出---15有换入,就应该有换出!get_free_pageFIFO页面置换MIN页面置换LRU页面置换LRU的准确实现,用时间戳LRU准确实现,用页码栈LRU近似实现-将时间计数变为是和否Clock算法的分析与改造置换策略有了,还需要解决... 查看详情

什么是lru置换算法

参考技术ALRU是LeastRecentlyUsed的缩写,即最近最少使用页面置换算法,是为虚拟页式存储管理服务的。LRU算法的提出,是基于这样一个事实:在前面几条指令中使用频繁的页面很可能在后面的几条指令中频繁使用。反过来说,已经... 查看详情

第291天学习打卡(知识点回顾lru算法)(代码片段)

知识点回顾LRULRU是最近最少使用,是一种常用的页面置换算法,选择最近最近未使用的数据予以淘汰。publicclassLRUCacheprivateintcapacity;privateMap<Integer,ListNode>map;privateListNodehead;privateListNodetail;publicLRUCache(intca 查看详情