页面置换算法——最近最久未使用算法(c语言实现)

操作系统实验:用C语言编程实现最近最久未使用置换算法(LRU)

最近最久未使用置换算法(LRU),全称Least Recently Used,是一种页面置换算法。

对于在内存中但又不用的数据块(内存块)叫做LRU,操作系统会根据哪些数据属于LRU而将其移出内存而腾出空间来加载另外的数据。

简单概括其思想:

1.根据页面调入内存后的使用情况。
2.利用“最近的过去”作为“最近的将来”的近似。
3.选择最近最久未使用的页面予以淘汰。

 一般有3种方法

1.数组+时间戳

2.栈

3.队列

 其中栈和队列可以选择顺序型或者是链型。

手工栈和队列代码冗长,顺序栈和顺序队列不方便从中间改动数据。链型初始化较麻烦,且考虑细节较多。主要介绍数组+时间戳法。

算法思路:

用一个数组来存储数据,给每一个数据项标记一个访问时间戳,每次插入新数据项的时候,先把数组中存在的数据项的时间戳自增,并将新数据项的时间戳置为0并插入到数组中。每次访问数组中的数据项的时候,将被访问的数据项的时间戳置为0。当数组空间已满时,将时间戳最大的数据项淘汰。

所以要用此方法,必须定义一个二维数组或者是结构体,我结合了时间戳、栈和顺序表的思路,重新设计了一个较好的方法。

代码如下:

#include<stdio.h>
#defin
  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您想了解关于最近最久使用页面置换算法C语言实现,以及LRU页面置换算法的模拟,是吗? 最近最久使用(Least Recently Used,LRU)是一种常见的页面置换算法,用于在计算机系统中管理内存。该算法会优先淘汰最近最久使用页面,在内存中保留最近使用页面,以提高系统的性能。 以下是C语言实现最近最久使用页面置换算法的示例代码: ``` #include <stdio.h> #include <stdlib.h> #include <stdbool.h> int main() { int n, m, i, j, k, page_faults = 0, counter = 0, least_recently_used_index; bool flag; printf("Enter the number of pages: "); scanf("%d", &n); int pages[n], counts[n], frames[m]; for (i = 0; i < n; i++) { printf("Enter page reference %d: ", i + 1); scanf("%d", &pages[i]); } printf("Enter the number of frames: "); scanf("%d", &m); for (i = 0; i < m; i++) { frames[i] = -1; counts[i] = 0; } for (i = 0; i < n; i++) { flag = false; for (j = 0; j < m; j++) { if (frames[j] == pages[i]) { flag = true; counts[j] = counter++; break; } } if (!flag) { least_recently_used_index = 0; for (j = 1; j < m; j++) { if (counts[j] < counts[least_recently_used_index]) { least_recently_used_index = j; } } frames[least_recently_used_index] = pages[i]; counts[least_recently_used_index] = counter++; page_faults++; } printf("\n"); for (j = 0; j < m; j++) { printf("%d\t", frames[j]); } } printf("\n\nTotal page faults: %d", page_faults); return 0; } ``` 另外,以下是LRU页面置换算法的模拟过程: 1. 初始化页面列表和物理内存中的页面数。 2. 输入页面列表和物理内存页面数。 3. 遍历页面列表 4. 如果页面物理内存中,则更新页面访问计数器,并输出页面列表和物理内存中的页面。 5. 如果页面不在物理内存中,则选择最近最久使用页面进行替换,并更新页面访问计数器、页面列表和物理内存中的页面,并输出页面列表和物理内存中的页面。 6. 输出页面故障次数。 希望能对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值