2022-1-24
- 超越物理内存
-
- 策略
-
- 简单策略:FIFO
- 利用历史数据:LRU
- 近似LRU
-
- 考虑脏页
超越物理内存
策略
在内存满了的时候,我们需要将内存中不要用到的页与硬盘中需要用到的页进行替换,那么究竟替换哪一个呢
简单策略:FIFO
如题,类似一个队列,先进先出
利用历史数据:LRU
“最不经常使用”(Least-Frequently-Used,LFU)策略会替换最不经常使用的页。同样,“最少最近使用”(Least-Recently-Used,LRU)策略替换最近最少使用的页面。
近似LRU
LRU有一个问题,就是如何判断该页是否在最近有被使用过呢,可能的解决方法是在每次访问页的时候,去更新页的时间字段,但这样有一个问题,例如我们有4gb的内存,页的大小为4kb,这样机器就有一百万页,要遍历一百万页得到最近最不常访问的页这件事本身也十分耗时间
一个简单的近似实现方法是时钟算法,为每个页设一个使用位,如果该页被使用了,就置1,当系统需要替换页的时候,时钟指针随机指向一个页,如果该页的使用位为0,就将其替换掉,如果该页的使用位为1,就将其置0,然后指针指向下一页去看他的使用位
考虑脏页
时钟算法的一个小修改(最初也由 Corbato [C69]提出),是对内存中的页是否被修改的额外考虑。这样做的原因是:如果页已被修改(modified)并因此变脏(dirty),则踢出它就必须将它写回磁盘,这很昂贵。如果它没有被修改(因此是干净的,clean),踢出就没成本。物理帧可以简单地重用于其他目的而无须额外的 I/O。因此,一些虚拟机系统更倾向于踢出干净页,而不是脏页。