页面置换算法相关概念和计算

页面置换算法相关概念和计算(含例题详解)

注:本文只适用于做题,想更详细了解调度算法相关的知识可以参考这篇文章😄 👉操作系统学习笔记第四章存储管理


  • 先来了解一下相关的基础概念🙈 :

    • 随机页面置换算法(RPR):被淘汰的页面是随机

    • 先进先出页面置换算法(FIFO):被淘汰的页面是最先进入内存中的页面

    • 最近最久未使用页面置换算法(LRU):被淘汰的页面是最近一段时间最久没被访问的页面

    • 最近未使用页面置换算法(NUR):被淘汰的页面是上次访问页面中没被访问的页面中的随机的一个页面

    • 最不经常使用页面置换算法(LFU):被淘汰的页面是当前为止访问次数最少的页面

    • 最佳页面置换算法(OPT):被淘汰的页面是以后不再使用很少使用的页面


缺 页 率 = 缺 页 中 断 次 数 / 访 问 的 页 面 总 数    ∗    100 % 命 中 率 = 页 面 命 中 次 数 / 访 问 的 页 面 总 数 ∗ 100 % 缺 页 率 + 命 中 率 = 1 \begin{aligned} &缺页率=缺页中断次数/{访问的页面总数}~~*~~100\%\\ &命中率=页面命中次数/{访问的页面总数}*100\%\\ &缺页率+命中率=1 \end{aligned} =/访    100%=/访100%+=1


🐳实战例题:

image-20220420213028337

(1)采用FIFO算法置换页面:(红色代表页面被置换,绿色代表页面存入物理块)

置换须知

  • 只要发生页面存入物理块中发生页面置换时就算作缺页中断
  • 当所有物理块没有待访问页面时,需进行页面置换,反之无需置换

置换判断:当发现需要置换时,可以按照阶梯型轮流置换
命中判断:待访问的页面是已经存在的页面是,页面就算作命中(非缺页N就是命中)

待访问页面:1210413421
物理块000000444444
物理块11111113333
物理块2222222221
是否缺页YYNNYNYNNY

由上表易知:缺页率=5/10*100% = 50%
      命中率=5/10*100% = 50%
(2)采用LRU算法置换页面

置换须知:上同

置换判断:当发现需要置换时,可以观察置换页面前n(n表示物理块个数)个页面,直接置换出最前面的页面。例如:4页面需要置换,观察前面3个页面2,1,0,2在最前面则置换2

待访问页面:1210413421
物理块000000003331
物理块11111111122
物理块2222444444
是否缺页YYNNYNYNYY

由上表易知:缺页率=6/10*100% = 60%

(3)采用OPT算法置换页面

置换须知:上同

置换判断:当发现需要置换时,可以观察置换页面后若干个(通常要大于n个)页面,直接置换出最后面或者后面没有的页面。例如:4页面需要置换,观察后面3个页面1,3,4,2,没有发现页面0,则置换0

注意:当最后一个页面时判断是可以根据LRU算法置换规则置换,因为这比较符合最佳置换规则

待访问页面:1210413421
物理块000000444441
物理块11111113332
物理块2222222224
是否缺页YYNNYNYNNY

由上表易知:缺页率=5/10*100% = 50%

(4)采用NUR算法置换页面

置换须知:上同。此外,标记位(t)初始状态为0,一旦访问置1,一旦发生页面置换 或 所有标记置1则标记位全部置0

置换判断:置换的页是标记为0的页中的随机一个(一般可以按顺序淘汰)

待访问页面:t1t2t1t0t4t1t3t4t2t1t
物理块00000000000404140414140
物理块111111110101110303010
物理块2212120202030202120
是否缺页YYNNYNYNNY

由上表易知:缺页率=5/10*100% = 50%

image-20220420223754426

(1)采用FIFO算法置换页面

页面走向1236473214756521
物理块01111444444455555
物理块1222277777776666
物理块233333222222222
物理块36666611111111
缺页否YYYYYYNYYNNYYNNN

由上表易知:缺页率=10/16*100% = 62.5%

(2)采用LRU算法置换页面

页面走向1236473214756521
物理块01111444411116666
物理块1222277774444422
物理块233333333777771
物理块36666222255555
缺页否YYYYYYNYYYYYYNYY

由上表易知:缺页率=14/16*100% = 87.5%

(3)采用OPT算法置换页面

页面走向1236473214756521
物理块01111111111111111
物理块1222222222222222
物理块233333334455555
物理块36477777776666
缺页否YYYYYYNNNYNYYNNN

​ 由上表易知:缺页率=9/16*100% = 56.25%

在C语言中,计算三种页面替换算法(FIFO、LRUOPT,即先进先出、最近最少使用最优淘汰)的缺页数、缺页率命中率涉及到模拟内存管理虚拟地址空间。这里是一个简化版的示例代码,假设我们有一个固定大小的内存池一些访问历史记录: ```c #include <stdio.h> #include <stdlib.h> #define PAGE_SIZE 4096 // 假设每个页面大小为4KB #define NUM_PAGES 100 // 总共100个页面 #define NUM_REQUESTS 1000 // 总请求次数 typedef struct { int* accessed; // 访问历史记录 } MemoryManager; // 预计内存不足时使用的替换策略 enum ReplacementPolicy { FIFO, LRU, OPT }; int get_page_access_count(MemoryManager* mm, int page) { return mm->accessed[page]; } void update_access_count(MemoryManager* mm, int page, enum ReplacementPolicy policy) { switch (policy) { case FIFO: mm->accessed[page]++; break; case LRU: // LRU通常需要额外的数据结构来维护 // 这里假设通过数组下标模拟最近最少使用 if (mm->accessed[page] == 0) mm->accessed[page] = NUM_REQUESTS; mm->accessed[page]--; break; case OPT: // 实现最优淘汰更复杂,通常涉及动态规划 break; } } double calculate_miss_rate(MemoryManager* mm) { int total_requests = NUM_REQUESTS * PAGE_SIZE; int total_pages_accessed = 0; for (int i = 0; i < NUM_REQUESTS; i++) { if (get_page_access_count(mm, i) > 0) total_pages_accessed++; } return (total_requests - total_pages_accessed) / (double)total_requests; } int main() { MemoryManager mm; mm.accessed = malloc(NUM_REQUESTS * sizeof(int)); // 初始化页面访问记录 for (int i = 0; i < NUM_REQUESTS; i++) mm.accessed[i] = 0; // 模拟请求并更新访问计数 for (int request = 0; request < NUM_REQUESTS; request++) { int random_page = rand() % NUM_PAGES; // 随机选择页面 update_access_count(&mm, random_page, FIFO); // 使用FIFO策略 // 其他替换策略类似,只需替换update_access_count函数即可 } double miss_rate_fifo = calculate_miss_rate(&mm); free(mm.accessed); // 重复上述过程,替换FIFO为其他策略(LRU, OPT) printf("FIFO缺页率: %.2f%%\n", miss_rate_fifo * 100); // ... 输出其他策略的缺页率 return 0; } ``` 注意:这个代码只是一个基础的演示,实际的LRUOPT策略在C语言中会更复杂,因为它们分别需要数据结构来跟踪最近访问最不经常访问的页面。另外,这个示例假定所有请求都是均匀随机的,真实场景可能会有所不同。同时,真正的系统还会考虑缓存替换策略硬件特性,比如缓存行大小等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知识汲取者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值