chap9 虚拟内存

chap9 虚拟内存 virtual memoryCSAPP 读书笔记系列chap9
摘要由CSDN通过智能技术生成

chap9 虚拟内存 virtual memory

CSAPP 读书笔记系列chap9 虚拟内存

这一次说的是虚拟内存VM,是计算机系统提供的一个对内存的抽象,目的是为了更有效地管理内存和少出错,也是一个计算机上很成功的抽象.

9.1 物理和虚拟寻址

对于计算机(以及其他智能设备)来说,虚拟地址通过 MMU(Memory management unit)把虚拟地址(Virtual Address, VA)转换为物理地址(Physical Address, PA),再由此进行实际的数据传输。

可以使用vmstat 命令来查看Linux中虚拟内存的情况,见http://www.cnblogs.com/qingmingsang/articles/6832157.html

使用VM的OS.png

地址空间

地址空间也就是一个非负整数地址的有序集合,例如{0, 1, 2, 3 … }

  • 计算机中的虚拟地址为:{0, 1, 2, 3, …, N-1}

    • 这里 N = 2^n
  • 而物理空间地址(内存)为{0, 1, 2, 3, …, M-1}
    - 这里 M = 2 ^ m-1

* 注意 M < N *,所以内存为VM的缓存

VM 的具体能力为:

  • 使用 DRAM内存(主存) 当做一个存储在磁盘上的地址空间的缓存,在内存中只保存活动的区域,根据需要再在内存和磁盘中传输数据,可以更有效率的使用内存.

  • 为每个进程提供统一的线性地址空间,简化内存管理

  • 保护进程之间地址空间不会相互影响,保护内存管理;例如用户程序不能访问内核信息和代码

下面具体再说

9.2 虚拟内存作为缓存工具

概念上来说,虚拟内存就是存储在磁盘上的 N 个连续字节的数组。磁盘上的数据被分割成块block,一些block,会缓存在 DRAM 中,在 DRAM 中的每个缓存块(cache block)就称为页(page)

  • 虚拟页VP(virtual page): VM分配
  • 物理页PP(Physical page): 内存分配

其中 VP 和 PP 的大小是一样的,都为P字节 P=2^p,
因为其HIT MISS 的惩罚很高,页一般都很大;通常是 4KB,有的时候可以达到 4MB

另外,DRAM是全相联(Fully associative)的:每一个虚拟页(virual page)可以放在任意的物理页(physical page)中,没有限制。

同时,其替换算法要求也是很高的;且通常使用写回 Write-back 而非 直写Write-through 机制
- Write-through: 命中后更新缓存,同时写入到内存中
- Write-back: 直到这个缓存需要被置换出去,才写入到内存中(需要额外的 dirty bit 来表示缓存中的数据是否和内存中相同,因为可能在其他的时候内存中对应地址的数据已经更新,那么重复写入就会导致原有数据丢失)

如下图所示:
虚拟页和物理页.png

图中VP中的地址有三个状态:

  • 未分配的:VM还没分配的页,不与任何的数据关联.不占磁盘空间

  • 未缓存的: 未缓存的在物理内存的已分配的页,占磁盘空间

  • 缓存的:缓存的在物理内存的已分配的页,占磁盘空间

而VM和内存之间的映射是通过页表 实现的

页表(page table)

每个页表实际上是一个数组,数组中的每个元素称为页表项(PTE, page table entry),每个页表项负责把虚拟页映射到物理页上。

在 内存DRAM 中,每个进程都有自己的页表

例如下面的一个图:
页表VM和PM映射
页表VM和PM映射.png

所以这里也会像cache那样发生命中和不命中
- 命中(Page Hit)
- 访问到页表中蓝色条目的地址时,因为在 DRAM 中有对应的数据,可以直接访问。
- 由于局部性原理,命中的几率会很高,虚拟内存其实是非常高效的机制.

  • 不命中(Page Fault),也就是常说的缺页

    • 访问到 灰色条目的时候,因为在 DRAM 中并没有对应的数据,所以需要执行一系列操作(从磁盘复制到 DRAM 中),具体为:

    • 触发 Page fault,也就是一个异常

    • Page fault handler 异常处理器 会选择 DRAM 中需要被置换的 page,并把数据从磁盘复制到 DRAM 中
    • 重新执行访问指令,这时候就会是 page hit

然后程序一般是在一个较小的活动页面集合(工作集)上工作的,可以很好地使用局部性.

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

因为在 内存DRAM 中,每个进程都有自己的页表,也就是一个独立的虚拟地址空间

例如下图中

独立的地址空间.png

多个虚拟页面可以映射到同一个共享的物理页面上,PP6是一个共享的物理页面

此外,因为有了统一的抽象,不需要纠结细节,所以VM 还可以提高以下功能:
- 简化链接: 每个进程的内存映象都是相同的基本格式,不管实际的代码和数据存放的物理位置
- 简化加载
- 简化共享: 也是进程间通信的一个方式,如上图
- 简化内存分配: 由于页表的形式,内存分配只是需要在VM上进行,而不管P&#x

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值