LRU页面置换算法(C语言实现)

这篇具有很好参考价值的文章主要介绍了LRU页面置换算法(C语言实现)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、实验目的

1)熟悉虚拟存储器页面置换过程;

2)通过编写和调试页面置换算法的模拟程序以加深对页面置换算法的理解;

3)掌握LRU算法的原理;

4)熟悉OPTFIFO页面置换算法原理。

2 实验要求  

    编写并调试一个页面置换模拟程序,采用LRU(最近最久未使用页面置换)算法。已知系统为一进程分配的物理块数,进程运行过程中引用的页面号,编程使用LRU算法输出置换的页号、缺页中断次数及缺页率。

3、算法描述

    LRU置换算法是选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t,当须淘汰一个页面时,选择现有页面中其t值最大的,即最近最久未使用的页面予以淘汰。 如下图所示(第一行数据是进程运行过程中引用的页号,假设开始时3个物理块是空的):

LRU页面置换算法(C语言实现)

4、源程序代码

#include<stdio.h>
#define N 3 //物理块的个数 
int Nl = 20;//页面访问序列的长度 
void LRU(int block[],int blockN,int list[],int listN)//LRU替换算法
{
    int  i, j;//定义替换次数
	int rep1 = 0;//缺页次数
	int rep2 = 0;//置换页面次数
	int DisplacedPages[20] = {0};
    int time[N];//各个物理块最近一次访问至现在的时间

    for(i = 0;i < blockN;i++)//初始化 
        time[i] = 0;
 
    for(i = 0;i < listN; i++)
	{   
		for(j = 0; j < blockN; j++) //更新时间记录 
			if(block[j] != -1)
                time[j]++;
        for(j = 0; j < blockN; j++)
            if(block[j] == list[i]) //命中 
			{
                time[j] = 0;
                break;
            }
            else if(block[j] == -1) //未命中但块中为空 
            	break;
		if(j < blockN && block[j] == -1)//未命中且物理块未满,直接存入
		{
            block[j] = list[i];
            time[j] = 0; 
			rep1++;
        }
        else if(j == blockN)//需要替换 
		{
            int max = 0;
            for(int k = 0;k < blockN;k++)//寻找最久未访问的地址所在的物理块的位置
			{
                if(time[max] < time[k])
                    max = k;
            }
			DisplacedPages[rep2] = block[max];
			rep2++;
			rep1++;
            block[max] = list[i];
            time[max] = 0;
        }
        
        printf("当前访问的页面为:%d\n",list[i]);
		printf("访问后物理块内的页面为:");
    	for(int m = 0;m < blockN;m++)//显示当前物理块的状态 
		{
        	if(block[m] == -1)
            	break;
        	printf("|%d|  ",block[m]);
    	}
		if (j == blockN)
			printf("置换了%d\n", DisplacedPages[rep2-1]);
    	printf("\n");
    }
    
    printf("缺页的次数为:%d  缺页率:%d/%d=%.2f\n", rep1, rep1, listN, (float)(rep1)/(float)listN);
	printf("置换的页面为:");
	for (i=0; i<rep2; i++)
		printf("%d,", DisplacedPages[i]);
}

int main()
{
	int block[N], list[20] = {7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};//默认序列
	int df = 1;
    for(int i = 0;i < N;i++)//初始化 
    {
		block[i] = -1;
    } 
	printf("是否使用默认序列?(1:否  其他数字:是)");
	scanf("%d", &df);
   if (df == 1)
   {
	   printf("请输入页面个数:");
	   scanf("%d", &Nl);
	   printf("请输入页面访问序列:\n");
	   for(i = 0;i < Nl;i++)
		   scanf("%d", &list[i]);
   }
   LRU(block, N, list, Nl);//调用LRU页面置换算法 
   printf("\n");
   return 0;
} 

5、运行结果

LRU页面置换算法(C语言实现)

LRU页面置换算法(C语言实现)文章来源地址https://www.toymoban.com/news/detail-503334.html

到了这里,关于LRU页面置换算法(C语言实现)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 页面置换算法(OPT、FIFO、LRU、时钟、LFU)

    在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法

    2024年02月06日
    浏览(24)
  • 计算机操作系统实验:页面置换算法的实现

    本实验的目的是通过编程模拟不同的页面置换算法,比较它们的缺页率和命中率,加深对操作系统内存管理的理解。本实验采用C语言编写,实现了最佳置换算法(OPT)、先进先出置换算法(FIFO)和最近最久未使用算法(LRU)。实验中,页面号引用串从文本文件中读取,输出

    2024年02月02日
    浏览(28)
  • 【操作系统】FIFO先进先出页面置换算法(C语言实现)

    FIFO页面置换算法,计算缺页率,文末附代码,及例题解析 1、内容         在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为

    2024年02月11日
    浏览(28)
  • 操作系统 | 实验五 页面置换算法

    (1)加深对页面置换算法的理解。 (2)掌握几种页面置换算法的实现方法。 (3)通过实验比较各种置换算法的优劣。 参考用C语言实现的先进先出算法FIFO的代码,实现最佳置换算法OPT和最近最少使用算法LRU。使得随机给出一个页面执行序列,计算不同置换算法的缺页数,

    2024年02月04日
    浏览(34)
  • 操作系统:用C语言模拟先进先出的算法(FIFO)、最久未使用算法(LRU)、改进的Clock置换算法的命中率。

      通过请求页面式存储管理中页面置换算法设计,了解存储技术的特点,掌握请求页式存储管理的页面置换算法。 用程序实现生产者——消费者问题,将指令序列转换为用户虚存中的请求调用页面流。 具体要求: l页面大小为1K l用户内存容量为4页到40页 l用户外存的容量为

    2024年02月03日
    浏览(37)
  • 【操作系统--页面置换算法】C语言详解--大作业版(附代码)

    1设计和实现FIFO,LRU,OPT和CLOCK算法 2设计和实现一个完整的可供选择不同算法的程序 3通过页面访问序列随机发生器实现对上述算法的测试及性能比较 4领略页面置换背后的资源调配思想,并将其运用到其他的操作系统的知识,以及运用到生活中的资源调配策略以及解决措施 5理

    2024年02月06日
    浏览(28)
  • 操作系统——LRU算法以及置换次数、缺页数、缺页率计算

    目录 一、LRU是什么? 二、LRU算法的规则 三、缺页,换页 四、计算页面置换次数、缺页数 LRU,全称是Least Recently Used,即最近最少使用页面置换算法。从字面意思上可以看出,选择最近最久未使用的页面予以淘汰。 LRU算法是大部分操作系统为最大化页面命中率而广泛采用的一

    2023年04月27日
    浏览(25)
  • 页面置换算法模拟实现-操作系统课程设计基于Java

    存储管理的主要功能之一是合理的分配空间,请求页式存储管理是一种常用的虚拟存储管理技术。在地址映射过程中,若在页表中发现所要访问的页面不在内存,则产生中断,当发生中断时,系统必须在内存选择一个页面移出内存,调用页面置换算法,以便为调入新的页面让

    2024年02月07日
    浏览(28)
  • 页面置换算法之最佳置换算法的模拟(C++)

    1)设计模拟实现OPT、FIFO和LRU页面置换算法中的任意一种。 OPT算法:需要发生页面置换时,算法总是选择在将来最不可能访问的页面进行置换。 FIFO算法:算法总是选择在队列中等待时间最长的页面进行置换。 LRU算法:如果某一个页面被访问了,它很可能还要被访问;相反,

    2024年02月07日
    浏览(27)
  • 虚拟内存页面置换算法(操作系统)

    通过这次实验,加深对虚拟内存页面置换概念的理解,进一步掌握先进先出FIFO、最佳置换OPI和最近最久未使用LRU页面置换算法的实现方法。 问题描述: 设计程序模拟先进先出FIFO、最佳置换OPI和最近最久未使用LRU页面置换算法的工作过程。假设内存中分配给每个进程的最小物

    2024年02月04日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包