《深入理解计算机系统》学习笔记——虚拟内存

虚拟内存

虚拟内存是硬件异常、硬件地址翻译、主存、磁盘文件和内核软件的完美交互,它为每个进程提供了一个大的、一致的和私有的地址空间。

虚拟内存的三个重要能力:
1)它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,它高效地使用了主存。
2)它为每个进程提供了一致的地址空间,从而简化了内存管理。
3)它保护了每个进程的地址空间不被其他进程破坏。

程序员需要理解虚拟内存的原因:

  • 虚拟内存是核心的。
  • 虚拟内存是强大的。
  • 虚拟内存是危险的。

物理和虚拟内存

计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组。每个字节都有一个唯一的物理地址(Physical Address, PA)。

CPU访问内存的最自然的方式就是使用物理地址,称为物理寻址(physical addressing)。

在这里插入图片描述
使用虚拟寻址,CPU通过生成一个虚拟地址(Virtual Address, VA)来访问主存,这个虚拟地址在被送到内存之前先转换成适当的物理地址。
将一个虚拟地址转换成物理地址的任务叫做地址翻译(address teanslation)。

CPU芯片上叫做内存管理单元(Memory Management Unit, MMU)的专用硬件,利用存放在主存中的查询表来动态翻译虚拟地址,该表的内容由操作系统管理。

在这里插入图片描述

地址空间

地址空间(address space)是一个非负整数地址的有序集合:

{0,1,2,...}

如果地址空间中的整数是连续的,那么它是一个线性地址空间(linear address space)。

在一个带虚拟内存的系统中,CPU从一个有 N= 2 n 2^n 2n个地址的地址空间中生成虚拟地址,这个地址空间称为虚拟地址空间(virtual address space):

{0,1,2,...,N-1}

一个地址空间的大小是由表示最大地址所需要的位数来描述的。

一个系统还有一个物理地址空间(physical address space),对应于系统中物理内存的M个字节:

{0,1,2,...,M-1}

虚拟内存的基本思想:允许每个数据对象有多个独立的地址,其中每个地址都选自一个不同的地址空间。

主存中的每个字节都有一个选自虚拟地址空间的虚拟地址和一个选自物理地址空间的物理地址。

虚拟内存作为缓存的工具

VM系统通过将虚拟内存分割为称为虚拟页(Virtual Page, VP)的大小固定的块来处理这个问题。每个虚拟页的大小为 P= 2 p 2^p 2p字节。
物理内存被分割为物理页(Physical Page, PP),大小也为P字节(物理页也被称为页帧(page frame))。

虚拟页面的集合都分为三个不相交的子集:

  • 未分配的: VM系统还未分配(或者创建)的页。
  • 缓存的: 当前已缓存在物理内存中的已分配页。
  • 未缓存的: 未缓存在物理内存中的已分配页。

DRAM缓存的组织结构

SRAM缓存表示位于CPU和主存之间的L1、L2和L3高速缓存;
DRAM缓存表示虚拟内存系统的缓存,它在主存中缓存虚拟页。

DRAM缓存的组织结构完全是由巨大的不命中开销驱动的。

DRAM缓存总是使用写回,而不是直写。

页表

操作系统软件、MMU(内存管理单元)中的地址翻译硬件和一个存放在物理内存中叫做页表(page table)的数据结构,页表将虚拟页映射到物理页。

每次地址翻译硬件将一个虚拟地址转换为物理地址时,都会读取页表。

操作系统负责维护页表的内容,以及在磁盘与DRAM之间来回传送页。

页表就是一个页表条目(Page Table Entry, PTE)的数组。
虚拟地址空间中的每个页在页表中一个固定偏移量处都有一个PTE。

在这里插入图片描述

页命中

在这里插入图片描述

缺页

DRAM缓存不命中称为缺页(page fault)。
在这里插入图片描述在这里插入图片描述在磁盘和内存之间传送页的活动叫做交换(swapping)或者页面调度(paging)。

页从磁盘换入(或者页面调入)DRAM和从DRAM换出(或者页面调出)磁盘。一直等待,指代最后时刻,也就是当有不命中发生时,才换入页面的这种策略称为按需页面调度(demand paging)。

分配页面

在这里插入图片描述

又是局部性救了我们

尽管在整个运行过程中程序引用的不同页面的总数可能超出物理内存总的大小,但是局部性原则保证了在任意时刻,程序将趋向于在一个较小的活动页面(active page)集合上工作,这个集合叫做工作集(working set)或者常驻集合(resident set)。

如果工作集的大小超出了物理内存的大小,那么程序将产生一种不幸的状态,叫做抖动(thrashing),这时页面将不断地换进换出。

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

虚拟地址仍然是一个有用的机制,因为它大大地简化了内存管理,并提供了一种自然的保护内存的方法。

在这里插入图片描述
VM简化了链接和加载、代码和数据共享,以及应用程序的内存分配。

  • 简化链接。 独立的地址空间允许每个进程的内存映像使用相同的基本格式,而不管代码和数据实际存放在物理内存的何处。
  • 简化加载。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值