虚拟内存技术日志--计算机系统基础二第九章

虚拟内存的概念

虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续可用的内存,即一个连续完整的地址空间。而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。目前,大多数操作系统都使用了虚拟内存,如Windows家族的“虚拟内存”;Linux的“交换空间”等。

在这里插入图片描述

  虚拟存储器为每个进程提供了一个大且私有的地址空间

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

物理和虚拟寻址

计算机的主存可以看做是一个由 M 个连续的字节大小的单元组成的数组。每个字节都有一个唯一的物理地址。第一个字节的地址为 0,接下来的地址为 1,以此类推。CPU 访问内存的最简单的方式是使用物理寻址。

物理寻址

如图9-1所示,CPU 在执行指令的时候,生成一个有效物理地址,通过内存总线,把这个物理地址传递给主存,主存取出物理地址中的信息,然后将它返回给 CPU,CPU 将它存放在一个寄存器里。早期使用物理寻址的系统通常都比较简单,比如数字信号处理器,计算器等嵌入式设备。

图9-1

虚拟寻址

现在处理器采用的是一个程序虚拟寻址的寻址方式,如图9-2所示。CPU 通过生成一个虚拟地址来访问主存,这个虚拟地址在被送到主存之前会先转换成一个物理地址。将虚拟地址转换成物理地址的任务叫做地址翻译(address translation),地址翻译需要 CPU 硬件和操作系统之间的配合。 CPU 芯片上叫做内存管理单元(Menory Management Unit, MMU)的专用硬件,利用存放在主存中的查询表来动态翻译虚拟地址,该表的内容由操作系统管理。

图9-2

地址空间

在一个带虚拟内存的系统中,CPU 从一个有 N= 2 的 n 次方 个地址的地址空间中生成虚拟地址,这个地址空间就称为虚拟地址空间:{0,1,2,3,…, N-1}。
一个系统还有一个地理地址空间,对应于系统中物理内存的 M 个字节: {0,1,2,3,…, M-1}。
一个地址空间的大小通常是由表示最大地址所需要的位数来描述的,比如,一个包含 N = 2 的 n 次方个地址的虚拟地址空间就叫做一个 n 位地址空间,现代操作系统通常支持 32 位或者 64 位虚拟地址空间。

虚拟内存的功能

虚拟内存大大简化了内存管理,操作系统为每个进程提供了一个独立的虚拟地址空间。

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

按需页面调度和独立的虚拟地址空间的结合,让虚拟内存简化了链接和加载,代码和数据共享,以及应用程序的内存分配。

(1)简化链接。独立的地址空间允许每个(进程的内存映像使用相同的基本格式,而不管代码和数据实际存放在物理内存的何处。
(2)简化加载。虚拟内存使得容易向内存中加载可执行文件和共享对象文件。将一组连续的虚拟页面映射到任意一个文件中的任意位置的表示法称作内存映射(memory mapping)。Linux 提供了一个 nmap 的系统调用,允许应用程序自己做内存映射。
(3)简化共享。独立地址空间为操作系统提供了一个管理用户进程和操作系统自身之间共享的一致机制。一般情况下,每个进程都有自己私有的代码、数据、堆栈。这些内容不与其他进程共享。在这种情况下,操作系统创建页表,将相应的虚拟页映射到不连续的物理页面。
(4)简化内存分配。虚拟内存向用户进程提供一个简单的分配额外内存的机制。当一个用户程序要求额外的堆空间时候,操作系统分配 k 个适当的连续的虚拟内存页面,并且将他们映射到物理内存的中的 k 个任意页面,操作系统没有必要分配 k 个连续的物理内存页面。

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

虚拟内存大大简化了内存管理,操作系统提供独立的地址空间使得区分不同进程的私有内存变得容易,但是地址翻译机制可以使用一种自然的方式拓展到提供更好的访问控制。每次 CPU 生成一个地址时,地址翻译硬件都会读一个 PTE ,通过在 PTE 上添加一些额外的控制位来控制对一个虚拟页面内容的访问。

地址翻译

页面命中时

CPU 硬件的执行步骤:

(1)处理器 生成一个虚拟地址,并把它传送给 MMU。
(2)MMU 生成 PTE 地址,并从高速缓存/主存中请求这个 PTE 。
(3)高速缓存/主存向 MMU 返回 PTE。
(4)MMU 构造物理地址,并把它传送给高速缓存/主存。
(5)高速缓存/主存返回所请求的数据字给处理器。

 页面不命中时

CPU 硬件的执行步骤:

(1)处理器 生成一个虚拟地址,并把它传送给 MMU。
(2)MMU 生成 PTE 地址,并从高速缓存/主存中请求这个 PTE 。
(3)高速缓存/主存向 MMU 返回 PTE。
(4)PTE 中的有效控制位为 0 ,所以 MMU 触发了一次异常,传递 CPU 中的控制到操作系统内核中的缺页异常处理程序。
(5)缺页处理程序确定出物理内存中的牺牲页,如果这个页面已经被修改了,则把它换出到磁盘。
(6)缺页处理程序调入新的页面,并更新内存中的 PTE。
(7)缺页处理程序返回原来的进程,再次执行导致缺页的指令, CPU 将引起缺页的虚拟地址重新发送给 MMU ,因为虚拟页面现在存在主存中,所以会命中,主存将请求字返回给处理器。

虚拟内存小结

在这里插入图片描述

虚拟内存是把外存当做内存来使用,即用硬盘来模拟内存使用,可以缓解物理内存不足的压力,有利于提升资源使用率。虚拟内存可以轻松地保存那些几乎不使用而又被占用的RAM块,将释放的RAM用于容纳更多具有更高优先级的程序,从而提高系统的整体性能。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值