读书笔记-现代操作系统-3储存管理-3.4页面置换算法

3.4 页面置换算法

3.4.1 最优页面置换算法

无法实现的算法。简单的说置换出最长指令之后需要访问的页面。

3.4.2 最近未使用页面置换算法

系统为每一个页面设置两个位,一个是被访问时设置R位,另一个是修改页面被写入时设置M位。
如果在一段时间内(比如说20ms)未访问则将R设置为未访问。
如果已经修改则需要将M设置为访问。所有页面分为四类

  1. 没有被访问,没有被修改
  2. 没有被访问,已被修改
  3. 已被范围,没有被修改
  4. 已被访问,已被修改

算法随机的从类变量最小的非空类中挑选一个页面淘汰。

3.4.3先进先出页面置换算法

记录最先使用的页面最先淘汰

3.4.4第二次机会页面置换算法

寻找一个最近时钟间隔一来没有访问过的页面。如果所有页面都被访问过了,该算法就是FIFO算法。
按照FIFO算法构成一个链表,检查最老页面的R位,如果页面未被读取,则淘汰,如果页面是1,将该页面的R位置0,并且把它放回到链表的队尾。

3.4.5时钟置换页面

第二次机会页面置换算法虽然比较合理,但是它需要经常移动链表效率不高。时钟置换是将页面保存在一个类似钟型的环形链表中,一个表针指向最老的页面。
发送缺页中断时,检测表针指向的页面,如果它的R位是0就淘汰该页面,并把新的页面插入这个位置,然后把表针移一个位置。
如果R是1就清除R位,然后指针后移,重复上述步骤。

3.4.6 最近最少使用页面置换算法

在发生缺页中断时置换未使用时间最长的页面。
理论上可实现,但是成本太高。且需要硬件配合。

3.4.7用软件模拟LRU

  • NFU(Not Frequently Used,最不常用)算法。将每个页面与一个软件计数器相关联,计数器的初值为0。每次时钟中断时,由操作系统扫描内存中所有的页面,将每个页面的R位加到它的计数器上。这个计数器大体上跟踪了各个页面被访问的频繁程度。当发生缺页中断时,则置换计数器最小的页面。
    • 主要的问题是可能置换出有用的页面,因此采用老化(aging)的方法。所以对算法进行简单的改进:
      首先,在R位被加进之前先将计数器右移一位,其次将R位加到计数器最左端而不是最右端的位。
    • LRU和老化算法的区别:一是LRU算法有时无法确定该置换出哪个页面?二是老化算法计数器只有有限位,限制了其对以往页面的记录

3.4.8工作集页面置换算法

一个进程当前使用的页面的集合称为它的工作集。不少系统都会设法跟踪进程的工作集,其目的在于大大减少缺页中断在让进程运行前先装入其工作集页面也称为预先调页(prepaging)
根据定义,工作集就是最近k次内存访问所使用过的页面的集合,为了实现工作集算法,必须预先选定k的值。
一个进程从它开始执行到当前实际使用的CPU时间总数通常称作当前实际运行时间
机器保存一个在内存内的页面的页表,每个页表项至少包含两条信息。上次使用该页面的近似时间和R(访问)位。
该算法的工作方式:假定使用硬件来置位R和位M。同样假定在每个时钟滴答中,有一个定期的时钟中断会用软件方法来清除R位。

3.4.9 工作集时钟页面置换算法

WSClock(工作集时钟)算法就是:
每次缺页中断时,首先检查指针指向的页面。如果R位被置为1,该页面在当前时钟滴答中就被使用过,那么该页面就不适合被淘汰。然后把该页面的R位置为0,指针指向下一个页面并重复该算法。
如果指针经过一圈返回它的起始点会发生声明呢?:
1. 至少调度了一次写操作,指针仅仅是不停的移动,寻找一个干净页面。既然已经调度了一个或者多个写操作,最终会有某个写操作完成,它的页面会被标记为干净。置换遇到的第一个干净页面。这个页面不一定是第一个被调度到写操作的页面。因为硬盘驱动程序为了性能优化可能已经重排序写操作
2. 没有调度过写操作。所有页面都在工作集中,否则至少将调度了一个写操作。随便置换一个干净的页面来使用,扫描中需要记录干净页面的位置。如果没有干净页面就决定当前页面并把它写回磁盘。

3.4.10小结

老化算法和工作集时钟算法最好。

本实验使用一下算法 使用rand()函数随机产生页面号,用数组装入页面号,模拟页面调入内存发生页面置换的过程。 整个过程,都是使用数组来实现每个算法,模拟队列,模拟堆栈的功能,实现每一个置换算法。 页面置换算法 最佳置换算法(OPT):选择永不使用或是在最长时间内不再被访问(即距现在最长时间才会被访问)的页面淘汰出内存。用于算法评价参照。 随机置换算法 (S):产生一个取值范围在0和N-1之间的随机数,该随机数即可表示应被淘汰出内存的页面。 先进先出置换算法(FIFO):选择最先进入内存即在内存驻留时间最久的页面换出到外存。 最近最久未使用置换算法(LRU): 以“最近的过去”作为“最近的将来”的近似,选择最近一段时间最长时间未被访问的页面淘汰出内存 Clock置换算法:为进入内存的页面设置一个访问位,当内存某页被访问,访问位置一,算法在选择一页淘汰时,只需检查访问位,若为0,则直接换出,若为1,置该访问位为0,检测内存的下一个页面的访问位。 改进型Clock置换算法: ①从查寻指针当前位置起扫描内存分页循环队列,选择A=0且M=0的第一个页面淘汰;若未找到,转② ② 开始第二轮扫描,选择A=0且M=1的第一个页面淘汰,同时将经过的所有页面访问位置0;若不能找到,转①
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值