将内存作为磁盘的缓存,是缓存的一种

内存虚拟化:连续的大的内存的抽象

内存映射文件

建立映射的时候,数据并没有读进来;当访问内存地址的时候,发现没有读进来,才会再读进来(页表) MMap的最大好处是不知道要用到文件的哪一部分,让操作系统为我决定

MMap如何实现

如何知道访问的页还没从磁盘读进来

物理页调度策略

如何从物理页找到页表项?(不讲)

驱逐哪个页?

LRU的完全实现是很复杂的,可以用另一个策略(时钟算法)去近似

Why we can implement LRU for TLB entry replacement, but not demand paging replacement?

  • TLB is purely handled in hardware(MMU)
  • TLB has fewer entries (typically 16-512)

时钟算法

这里置换完页之后,指针应该指向3了,而不应该留在20,图有问题

相当于套了一层复活甲,扫到之后只是掉甲

指针移动很快这是一个不好的迹象,因为:

  • 说明系统中大多数页面都是活跃的,很少有空闲页面
  • 需要多次遍历才能找到可替换的页面,增加了开销
  • 可能预示着系统即将发生颠簸(thrashing)

如果指针移动很慢的情况:

  • 说明容易找到use bit=0的页面进行替换
  • 表明系统中存在较多未被频繁访问的页面
  • 这是一个好的迹象,因为:
    1. 系统有充足的非活跃页面可供替换
    2. 页面替换的开销较小
    3. 系统运行在一个健康的状态

N越大越接近LRU,但是扫的速度变慢,开销越大

因为清除Dirty pages 和 Clean Page的代价不同,驱除 Dirty page的代价更大,所以有时候会给Dirty pages N = 2

Summary

Min-Max的思想,让最大值尽量小,让最小值尽量大,驱逐内存占用最大的

To support demand paging, what do CPU/OS contribute?

  • CPU:memory management (MMU), a few bits in page table entry, etc
  • OS: page table manipulation, eviction strategy, page fault handler, etc