Skip to content
  • 我们讲了内存的cache
  • 虚拟内存有个页表作为cache
  • 页表有个TLB作为cache

Virtual Memory

:material-circle-edit-outline: 约 614 个字 :material-clock-time-two-outline: 预计阅读时间 2 分钟

Main Memory act as a “Cache” for the secondary storage (e.g. disk).

CPU与虚拟内存直接交互,虚拟内存再和物理内存交互,相当于虚拟内存在CPU与Mem之间建立了新的映射

虚拟内存既可以模拟大容量,让CPU眼中的内存大于实际内存大小,也可以对物理内存进行分块隔离,让CPU看来内存很小,且保证块与块之间一定无法交互,能起到安全保护作用

image-20240520113232027

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眼里的虚拟内存就是物理内存

image-20240520114657908

可见上面的物理地址也有个 page offset,与之前的 byte offset 一个功能

How Large Page Table?

image-20240520114935262

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

image-20240520115339747

image-20240520115749860

Possible Combinations of Event (hit/miss)

Three different types of misses: TLB miss, page Fault, cache miss

image-20240520115908063

FastMATH Memory Hierarchy

image-20240520115731991