- 我们讲了内存的cache
- 虚拟内存有个页表作为cache
- 页表有个TLB作为cache
Virtual Memory
Main Memory act as a “Cache” for the secondary storage (e.g. disk).
CPU与虚拟内存直接交互,虚拟内存再和物理内存交互,相当于虚拟内存在CPU与Mem之间建立了新的映射
虚拟内存既可以模拟大容量,让CPU眼中的内存大于实际内存大小,也可以对物理内存进行分块隔离,让CPU看来内存很小,且保证块与块之间一定无法交互,能起到安全保护作用
Concept
虚拟内存的 block 叫 page,即最小传输单位;虚拟内存的 miss 叫 fault,即发现内存里没有需要的 page,需要让磁盘取过来
page 一般有 4KB 大
page fault 的 penalty 太大了,内存一般不用 write-through,都用 write back,同时采用 fully associate 模式,尽可能用满内存的 page
Page Tables
fully associate 要求并行检查,但是虚拟内存太大了,不可能全部数据都并行检查,所以我们引入一个叫 页表 的东西帮忙
- Page Table 会保存虚拟内存到物理内存的映射关系,这个“映射关系”比较抽象,先往下看
- page在虚拟内存里用 virtual page number 进行 index
- page table 包含目前虚拟内存里存在的page的 physical page number
- 当然虚拟内存也会有 physical page number
每个进程有单独的页表,所以会同时存在多个页表,我们用 page table register 储存所有页表的基地址用以寻找页表
物理地址就通过页表来检索page,而不是直接交给虚拟内存,这里页表的地位就像cache
还有一件事,物理地址包含的是 virtual page number ,CPU眼里的虚拟内存就是物理内存
可见上面的物理地址也有个 page offset,与之前的 byte offset 一个功能
How Large Page Table?
Page Faults
这个由操作系统处理,过程和cache的miss处理类似
The OS will find the page in the disk by the page table.
Making Address Translation Fast--TLB
TLB (Translation-lookaside Buffer) 是页表的cache,即我们将页表看成一个mem
知识全迁移过来就好,什么TLB的hit/miss,miss了从页表取数据啥的
TLB一般很小,我们采用全关联,fully associate
Possible Combinations of Event (hit/miss)
Three different types of misses: TLB miss, page Fault, cache miss