页面置换算法简单对比----《operating system concepts》《操作系统原理》

置换策略

当请求调页程序要调进一个页面,但是该作业分配所得的主内存块已经全部用完,则必须淘汰改作业在贮存中的一个页面。置换算法就是决定选择哪一个页面进行淘汰的规则。
如置换算法不够好,就会导致刚淘汰的页面又被需要,因此又被调入,这样就会导致频繁的调入调出,系统仅仅花费在程序执行上的时间比例降低。更差的情况是,当调入频率超过主存和辅存之间的传输能力时,系统要等待完后页面传输才能继续有效执行程序,因此,CPU 的效率降低了,这种情况叫做颠簸(thrashin)。页面置换算法的目的就是尽量减少和排除颠簸的出现。

1)最佳置换算法(OPT算法)

假设一个程序有n页,分配给它的主存只有m页(m<n),在程序执行过程中,主存中如果有所需要的页,就称访问成功;如果需要调业,就称为产生缺页中断。我们把缺页中断的次数和总的访问次数的比例称为缺页中断率。缺页中断率和分配的主存大小,程序大小和置换算法有关。
OPT算法是指缺页中断率最小的算法,一般是指淘汰的页面不会被使用或者很长时间内不会再被使用。这肯定是不可以实现的,因为在程序执行过程中无法预测那些页面不会再被用到,因此无法向后估计。因此,OPT算法更多的是作为和其他算法进行对比的对象。
图片描述

2)先进先出算法(FIFO)

顾名思义,选择最先进入主存中的页面进行淘汰,也就是说,最早调入的页面不被使用的概率比较大。保持一个次序表即可实现。
图片描述

3)最久未使用算法(LRU)

顾名思义,选择最长时间未被使用的那一页进行淘汰,因为这一页面绝对是最不可能在将来用到的。这个算法实现比FIFO复杂,因为要根据每次页面的使用情况进行一次页面排序,这样就知道哪一个是最长时间未被使用的。硬件方法一般采用计数器实现,软件实现一般采用业号堆栈实现,即建立一个栈存储主存中可能淘汰的页号,当一个页面被访问过,就把这个页号放到栈顶,栈中原有的页面下移,这样栈底的页面就是需要淘汰的页面。如果一个页面已经存在,就把这个页面抽出。
这个算法最接近OPT,因为OPT是根据后续的页面进行最佳淘汰,LRU是根据使用过的页面就行最佳淘汰。
图片描述

4)最不经常使用淘汰算法(LFU)

顾名思义,将最近应用次数最少的页面淘汰,可对每一个页面设置一个计数器,每一页被访问后就把计数器加1,过一段时间t后统一清除计数器。需要淘汰时,就淘汰计数值最小的页面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
设计一个虚拟存储区和内存工作区,并使用下列算法计算访问命中率. (1) 进先出的算法(FIFO) (2) 最近最少使用的算法(LRU) (3) 最佳淘汰算法(OPT)(4) 最少访问页面算法(LFU) (5) 最近最不经常使用算法(NUR) 命中率=1-页面失效次数/页地址流长度 本实验的程序设计基本上按照实验内容进行。即首先用 srand()和 rand()函数定 义和产生指令序列,然后将指令序列变换成相应的页地址流,并针对不同的算法 计算出相应的命中率。相关定义如下: 1 数据结构 (1)页面类型 typedef struct{ int pn,pfn,counter,time; }pl-type; 其中 pn 为页号,pfn 为面号, counter 为一个周期内访问该页面的次数, time 为访问时间. (2) 页面控制结构 pfc-struct{ int pn,pfn; struct pfc_struct *next;} typedef struct pfc_struct pfc_type; pfc_type pfc_struct[total_vp],*freepf_head,*busypf_head; pfc_type *busypf_tail; 其中 pfc[total_vp]定义用户进程虚页控制结构, *freepf_head 为空页面头的指针, *busypf_head 为忙页面头的指针, *busypf_tail 为忙页面尾的指针. 2.函数定义 (1)Void initialize( ):初始化函数,给每个相关的页面赋值. (2)Void FIFO( ):计算使用 FIFO 算法时的命中率. (3)Void LRU( ):计算使用 LRU 算法时的命中率. (4)Void OPT( ):计算使用 OPT 算法时的命中率. (5)Void LFU( ):计算使用 LFU 算法时的命中率. (6)Void NUR( ):计算使用 NUR 算法时的命中率. 3.变量定义 (1)int a[total_instruction]: 指令流数据组.(2)int page[total_instruction]: 每条指令所属的页号. (3)int offset[total_instruction]: 每页装入 10 条指令后取模运算页号偏移 值. (4)int total_pf: 用户进程的内存页面数. (5)int disaffect: 页面失效次数.
一、课程设计目的 通过请求页式管理方式中页面置换算法的模拟设计,了解虚拟存储技术的特点,掌握请 求页式存储管理中的页面置换算法。 容 二、课程设计内容 模拟实现 OPT(最佳置换)、FIFO 和 LRU 算法,并计算缺页率。 示 三、要求及提示 本题目必须单人完成。 1、首先用随机数生成函数产生一个“指令将要访问的地址序列”,然后将地址序列变换 成相应的页地址流(即页访问序列),再计算不同算法下的命中率。 2、通过随机数产生一个地址序列,共产生 400 条。其中 50%的地址访问是顺序执行的, 另外 50%就是非顺序执行。且地址在前半部地址空间和后半部地址空间均匀分布。具体产 生方法如下: 1) 在前半部地址空间,即[0,199]中随机选一数 m,记录到地址流数组中(这是 非顺序执行); 2) 接着“顺序执行一条指令”,即执行地址为 m+1 的指令,把 m+1 记录下来; 3) 在后半部地址空间,[200,399]中随机选一数 m’,作为新指令地址; 4) 顺序执行一条指令,其地址为 m’+1; 5) 重复步骤 1~4,直到产生 400 个指令地址。 3、将指令地址流变换成页地址(页号)流,简化假设为: 1) 页面大小为 1K(这里 K 只是表示一个单位,不必是 1024B); 2) 用户虚存容量为 40K; 3) 用户内存容量为 4 个页框到 40 个页框; 6 4) 用户虚存中,每 K 存放 10 条指令,所以那 400 条指令访问地址所对应的页地 址(页号)流为:指令访问地址为[0,9]的地址为第 0 页;指令访问地址为[10, 19]的地址为第 1 页;……。按这种方式,把 400 条指令组织进“40 页”,并 将“要访问的页号序列”记录到页地址流数组中。 4、循环运行,使用户内存容量从 4 页框到 40 页框。计算每个内存容量下不同页面置换 算法的命中率。输出结果可以为: 页框数 OPT 缺页率 FIFO 缺页率 LRU 缺页率 [4] OPT:0.5566 FIFO:0.4455 LRU:0.5500 [5] OPT:0.6644 FIFO:0.5544 LRU:0.5588 …… …… …… …… [39] OPT:0.9000 FIFO:0.9000 LRU:0.9000 [40] OPT:1.0000 FIFO:1.0000 LRU:1.0000 注 1:在某一次实验中,可能 FIFO 比 LRU 性能更好,但足够多次的实验表明 LRU 的平均性能比 FIFO 更好。 注 2:计算缺页率时,以页框填满之前和之后的总缺页次数计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值