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


    第九章的内容为p595~p649, 分2部分, p596~p618, p618~p649. 本文为第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, 翻译后背缓冲器

  • 相关阅读:
    windows server 2008 x64 上asp.net 调用 word, excel 出错的解决方式
    在Azure VM上架设Surv-U FTP 服务器
    关于windows event log 的若干记录
    postman-变量/环境/过滤等
    每秒处理10万高并发订单的乐视集团支付系统架构分享
    Chai.js断言库API中文文档【转载】
    SharePoint 2013 如何打包一个应用
    SharePoint 2013 如何获取当前站点对应的“应用目录”中的“适用于SharePoint的应用程序”列表
    一个吊丝android个人开发者的逆袭之路
    开发者说说广告的事
  • 原文地址:https://www.cnblogs.com/winwink/p/CSAPP_Note_Chapter9_VirtualMemory_01.html
Copyright © 2020-2023  润新知