操作系统-页面置换算法的实现-最近最久未使用算法(计数器法)

本文介绍了页面置换算法中的LRU(最近最久未使用)算法的计数器法思想,该方法通过记录页面访问时间并选择时间值最小的页面淘汰。在C语言中实现此算法涉及扫描内存块,更新访问时间,并处理计数器溢出问题。当需要调用的页面不在内存中时,会优先选择未被使用的内存块,若无空闲块,则需进行页面置换。
摘要由CSDN通过智能技术生成

页面置换算法的实现-最近最久未使用算法(计数器法)

1、页面置换算法的实现-最近最久未使用算法(计数器法)的基本思想
最近最久未使用算法(LRU)与每个页面的最后使用时间有关,这种算法给每个页面一个访问字段,记录一个页面上次访问到现在的时间(t)。当要淘汰一个页面是,选择页面中时间(t)最大的一个淘汰。而最近最久未使用算法的计数器法是给每个页表对应一个时间字段,并给CPU增加一个计数器,每进行一次存储访问,该时钟都加1。每当访问一个页面时,时钟寄存器的内容就被复制到相应页表的使用时间字段中。这样,可以始终保留着每个页面最后访问的时间。在淘汰页面时,选择该时间值最小的页面。使用这个算法必须要考虑计数器溢出问题。
如果最近一段时间内某些页面被频繁访问,那么在将来还可能被频繁访问。反之,未被访问的将来也不会被访问。

2、算法的具体步骤:首先每一次调用页面时,先把进程拥有的内存块从头到尾的扫描一遍,查看内存块中是否已经存在了要调用的页面,如果存在证明这一次调用已经成功了,然后把想要调用的页面的时间改成最近的时刻。扫描的过程中标志哪些内存块未被使用(第一次调用页面都未被使用)指针指向未被使用的内存块,到了扫描的最后指针指向未被使用的内存块的最后一个。如果在一次扫描中没有找到想要调用的页面,那么就使用最后一个未被使用的内存块(指针指向的内存块)来调用想要的调用的页面,把他的使用时间改成最近的时间。如果扫描没有找到想要调用的页面,也没有未被使用的内存块,就要进行第二次扫描(只扫描第一个到n-1个),首先定义一个变量指向最久为被使用的内存块(时间最小的),然后就进行置换,把时间改成最近的时间。
3、C语言代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct // 定义结构体
{
   
    int isUsing;     // 当前块是否被使用
    int pageNumber;  // 块中装载的页面的页面号
    int lastUseTime; // 内存块最后一次被使用的时间
} BlockNode;

BlockNode *initialNodes(int size)
{
   
    BlockNode *bn = (BlockNode *)malloc(size * sizeof(BlockNode)); // 分配空间
    if (bn == NULL)
    {
   
        printf("进程内存块初始化失败!");
        return 0;
    }
    memset(bn, 0, size * sizeof(BlockNode));
    // 将节点数组内容初始化为0
    return bn;
}

int 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值