操作系统——LRU算法以及置换次数、缺页数、缺页率计算

目录

一、LRU是什么?

二、LRU算法的规则

三、缺页,换页

四、计算页面置换次数、缺页数


一、LRU是什么?

LRU,全称是Least Recently Used,即最近最少使用页面置换算法。从字面意思上可以看出,选择最近最久未使用的页面予以淘汰。

LRU算法是大部分操作系统为最大化页面命中率而广泛采用的一种页面置换算法。该算法的思路是,发生缺页中断时,选择未使用时间最长的页面置换出去。

  1. 缓存:是一种提高数据读取性能的技术,在硬件设计,软件开发中都有非常广泛的作用,常见的CPU缓存,数据库缓存,浏览器缓存等。
  2. 缓存大小是有限的,当缓存被用满时,哪些数据应该被清理出去,哪些数据应该被保留?这就需要缓存淘汰策略来决定。
  3. 常见的策略有三种:
  • 先进先出策略(FIFO,First In,First Out)
  • 最少使用策略(LFU,Least Rrequently Used)
  • 最近最少使用策略(LRU,Least Recently Used)

二、LRU算法的规则

最近被使用或访问的数据放置在最前面;

当缓存命中(即缓存数据被访问)则将数据移到头部;

当缓存数量达到最大值时,将最近最少访问的数据剔除。

三、缺页,换页

缺页:当内存中不存在该页时,将该页调入内存中。

换页:当发生缺页时,内存已满,需要将内存中的某页调换成需要的页。

即换页一定缺页,缺页不一定换页。

四、计算页面置换次数、缺页数、缺页率

题目:一进程刚获得三个主存块的使用权,若该进程访问页面的次序是{1,3,2,1,2,1,5,1,2,3},采用LRU算法时,缺页数是______次。

 假设把三主存块想象成长度为3的数组。开始演示:

1 进入 —> 1(缺1)
3 进入 —> 3 1 (刚使用的放在前面(左边),未使用的依次后移(右移))(缺3)
2 进入 —> 2 3 1(缺2)
1 进入 —> 1 2 3(把原本的1移出)
2 进入 —> 2 1 3
1 进入 —> 1 2 3
5 进入 —> 5 1 2 (进行页面置换,3是最少使用的所以换出)
1 进入 —> 1 5 2
2 进入 —> 2 1 5
3 进入 —> 3 2 1(进行页面置换,5是最少使用的所以换出)

总共进行了两次页面置换,所以缺页数=3+2=5,这个3代表前三个缺的,2代表置换的次数,缺页率为5/10=0.5。(页面置换算一次缺页数)
 

好的,我来回答你的问题。 LRU(Least Recently Used)算法是一种页面置换算法,其基本思想是将最近最少使用的页面置换出去。下面是用C语言实现的LRU算法: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_FRAME_NUM 3 // 物理块数 #define MAX_PAGE_NUM 10 // 页数 int main() { int pages[MAX_PAGE_NUM] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 页面序列 int frames[MAX_FRAME_NUM]; // 物理块数组 int used[MAX_FRAME_NUM]; // 标记物理块是否被使用 int page_faults = 0; // 缺页次数 int index, i, j; memset(frames, -1, MAX_FRAME_NUM * sizeof(int)); // 初始化物理块数组为-1 memset(used, 0, MAX_FRAME_NUM * sizeof(int)); // 初始化标记数组为0 for (i = 0; i < MAX_PAGE_NUM; i++) { index = -1; for (j = 0; j < MAX_FRAME_NUM; j++) { if (frames[j] == pages[i]) { // 页面已在物理块中 index = j; break; } if (frames[j] == -1) { // 找到空的物理块 index = j; break; } } if (index == -1) { // 物理块已满,需要置换 index = 0; for (j = 1; j < MAX_FRAME_NUM; j++) { if (used[j] < used[index]) { // 找到最近最少使用的页面 index = j; } } } frames[index] = pages[i]; // 将页面放入物理块中 used[index] = i; // 更新最近使用时间 page_faults++; // 缺页次数加一 } printf("LRU算法缺页率为: %.2f%%\n", (float)page_faults / MAX_PAGE_NUM * 100); return 0; } ``` 上述代码中,我们使用了两个数组:`frames`数组用来存储物理块中的页面,`used`数组用来记录物理块中每个页面的最近使用时间。当页面需要被置换时,我们遍历一遍物理块数组,找到最近最少使用的页面,将其置换出去,然后将新的页面放入物理块中。如果物理块已满,并且没有找到最近最少使用的页面,那么就需要置换第一个页面。 接下来我们来计算LRU算法缺页率。假设物理块数为3,页面序列为1 2 3 4 1 2 5 1 2 3 4 5,那么运行上述代码后,输出结果为:LRU算法缺页率为: 36.36%。缺页次数为4,页面访问次数为11,所以缺页率为4/11=36.36%。 希望我的回答能够帮到你,有什么不懂的地方可以继续问我哦!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值