CSAPP笔记(第九章 虚拟内存)-01

第九章的内容为p595~p649, 分2部分. 本文为第1部分.

摘要

本章主要写虚拟内存的原理. 与我之前理解的虚拟内存有很大不同, 之前"以为"的虚拟内存是由于内存容量不够, 临时将内存暂时用不到的部分存到磁盘上.
应用程序直接与内存交互, 磁盘只是一个备用的存储.

实际上读了本章发现, 应用程序直接对应虚拟内存, 虚拟内存对应磁盘, 而物理内存是磁盘的缓存. 应用程序需要读取某块虚拟内存的内容时, 先查表看是否物理内存命中, 命中了则从物理内存中读取, 否则触发缺页中断, 从磁盘上将内容复制到物理内存中后, 再继续读取. 而物理内存满后, 则会淘汰物理内存页, 将淘汰的物理内存页写回磁盘.

这里有一些细节省略了, CPU拿到的是虚拟地址, 需要MMU单元对虚拟地址进行翻译, 翻译为物理地址并取到数据, 在翻译的过程中, 会做很多事情.

  1. 首先地址是分了页的, 一般4K为一页, 先取到虚拟页号
  2. 虚拟页号, 划分为TLBI和TLBT, 根据这2个值去TLB(虚拟页号与物理页号对应关系缓存)中取物理页号
  3. 如果TLB缓存命中, 则执行下一步, 否则要去内存中取虚拟页号与物理页号对应关系
  4. 根据物理页号与虚拟偏移量, 拼出物理地址, 划分为CO, CI, CT. 根据这3个值去L1高速缓存查找数据
  5. 如果L1高速缓存命中, 则返回数据; 否则去内存中查找数据.
  6. 如果内存命中, 则将数据复制到L1高速缓存, 通过高速缓存进行返回; 否则触发缺页中断, 等待磁盘写入内存(DMA)

上面讲的是读数据的情况, 写数据有两种模式, 直写(write through)与回写(write back). 直写是指写入数据时, 不光要将数据写入L1高速缓存, 同时也要写入内存, 保证数据的强一致性. 回写是指先写入L1高速缓存, 等总线不繁忙时, 再写入内存. 现在采用的是回写方式.

缩写

本章缩写很多, 先记录一下.

  • PA: Physical Address, 物理地址. M=2^m.
  • VA: Virtual Address, 虚拟地址. N=2^n
  • MMU; Memory Management Unit, 内存管理单元
  • VP: Virtual Page, 虚拟页. P=2^p, 虚拟页大小, 如4K.
  • PP: Physical Page, 物理页, 也被称为page frame
  • PTE: Page Table Entry, 页表条目

  • VPO: 虚拟页面偏移量(字节)
  • VPN: 虚拟页号
  • TLBI: TLB索引
  • TLBT: TLB标记

  • PPO: 物理页面偏移量(字节)
  • PPN: 物理页号
  • CO: 缓冲块内的字节偏移量
  • Cl: 高速缓存索引
  • CT: 高速缓存标记

  • PTBR: Page Table Base Register, 页表基址寄存器
  • TLB: Translation Lookaside Buffer, 翻译后背缓冲器

猜你喜欢

转载自www.cnblogs.com/winwink/p/CSAPP_Note_Chapter9_VirtualMemory_01.html
今日推荐