计算机系统课程 笔记总结 CSAPP第九章 虚拟存储器(9.1-9.5)

目录

9.1 物理和虚拟寻址

9.2 地址空间

9.3 虚拟内存作为缓存的工具

9.3.1 DRAM缓存的组织结构

9.3.2 页表

9.3.3 页命中

9.3.4 缺页

9.3.5 分配页面

9.3.6 又是局部性救了我们

9.4 虚拟内存作为内存管理的工具

9.5 虚拟内存作为内存保护的工具


9.1 物理和虚拟寻址


9.2 地址空间

23:8048000     段寄存器(CS等16位):偏移地址(16/32/64)

实模式下:    逻辑地址CS:EA    =è物理地址CS*16+EA

保护模式下:以段描述符作为下标,到GDT/LDT表查表获得段地址,        

                          段地址+偏移地址=线性地址。

  • 线性地址空间: 非负整数地址的有序集合:
    {0, 1, 2, 3 … }
    • 虚拟地址空间: N = 2n 个虚拟地址的集合 ===线性地址空间
      {0, 1, 2, 3, …, N-1}
    • 物理地址空间: M = 2m 个物理地址的集合
      {0, 1, 2, 3, …, M-1}
    • Intel采用段页式存储管理(MMU实现)
    • 段式管理:  逻辑地址->线性地址==虚拟地址
    • 页式管理:  虚拟地址->物理地址
  • 逻辑地址空间:段地址:偏移地址

9.3 虚拟内存作为缓存的工具

为什么要使用虚拟内存?

  • 有效使用主存
    • 使用DRAM作为部分虚拟地址空间的缓存
  • 简化内存管理
    • 每个进程都使用统一的线性地址空间
  • 独立地址空间
    • 一个进程不能影响其他进程的内存   
    • 用户程序无法获取特权内核信息和代码
  • 概念上而言,虚拟内存被组织为一个由存放在磁盘上的N个连续的字节大小的单元组成的数组.
  • 磁盘上数组的内容被缓存在物理内存中  (DRAM cache)
    • 这些内存块被称为(每个页面的大小P = 2p字节)

9.3.1 DRAM缓存的组织结构

 

  • DRAM 缓存的组织结构完全是由巨大的不命中开销驱动的
    • DRAM SRAM 慢大约 10
    • 磁盘比 DRAM 慢大约 10,000
  • 因此
    • 虚拟页尺寸: 标准 4 KB, 有时可以达到 4 MB
    • DRAM缓存为全相联
      • 任何虚拟页都可以放置在任何物理页中
      • 需要一个更大的映射函数 不同于硬件对SRAM缓存
    • 更复杂精密的替换算法
      • 太复杂且无限制以致无法在硬件上实现
    • DRAM缓存总是使用写回,而不是直写

9.3.2 页表

  • 页表 是一个页表条目 (Page Table Entry, PTE)的数组,将虚拟页地址映射到物理页地址。
    • DRAM中的每个进程都使用的核心数据结构

9.3.3 页命中

                                     即(DRAM 缓存命中)

  • Page hit页命中: 虚拟内存中 的 一个字存在于物理内存中,    

9.3.4 缺页

  • Page fault缺页: 虚拟内存中的字不在物理内存中 (DRAM 缓存不命中)

9.3.5 分配页面

9.3.6 又是局部性救了我们

  • 虚拟内存看上去效率非常低, 但它工作得相当好,这都要归功于“局部性”.
  • 在任意时间,程序将趋于在一个较小的活动页面集合上工作,这个集合叫做 工作集  Working set
    • 程序的时间局部性越好,工作集就会越小
  • 如果 (工作集的大小 < 物理内存的大小)
    • 在初始开销后,对工作集的引用将导致命中。
  • 如果 (工作集的大小 >物理内存的大小)
    • Thrashing抖动: 页面不断地换进换出,导致系统性能崩溃。

9.4 虚拟内存作为内存管理的工具

  • Key idea核心观点: 每个进程都拥有一个独立的虚拟地址空间
    • 把内存看作独立的简单线性数组
    • 映射函数通过物理内存来分散地址
      • 好的映 射函数可以提高程序的局部性
  • Simplifying memory allocation 简化内存分配
    • 每个虚拟内存页面都要被映射到一个物理页面
    • 一个虚拟内存页面每次可以被分配到不同的物理页面
  • Sharing code and data among processes 简化代码和数据共享
    • 不同的虚拟内存页面被映射到相同的物理页面 (此例中的 PP 6)

简化链接和加载

  • Linking 链接
    • 每个程序使用相似的虚拟地址空间
    • 代码、数据和堆都使用相同的起始地址.
  • Loading 加载
    • execve 为代码段和数据段分配虚拟页,并标记为无效(即未被缓存)
    • 每个页面被初次引用时,虚拟内存系统会按照需要自动地调入数据页。

9.5 虚拟内存作为内存保护的工具

  • PTE 上扩展许可位以提供更好的访问控制
  • 内存管理单元(MMU)每次访问数据都要检查许可位(段错误)

 

 

  • SUP:进程是否必须运行在内核模式下才能访问该页
    • 运行在用户模式下的进程只允许访问SUP=0的页面
  • READ和WRITE为控制对页面的读和写访问

 

  • 若进程i运行在用户模式下
    • 有读VP0的权限和读写VP1的权限,不允许访问VP2
发布了36 篇原创文章 · 获赞 11 · 访问量 3499

猜你喜欢

转载自blog.csdn.net/gzn00417/article/details/104237025