虚拟存储器

虚拟存储器

虚拟存储器定义

一种将主存用作辅助存储器高速缓存的技术

当代计算机系统的主存主要由半导体存储器组成,由于工艺和成本的原因,主存的容量受到限制。然而,计算机系统软件和应用软件的功能不断增强,程序规模迅速扩大,要求主存的容量越大越好,这就产生了矛盾。
为了给大的程序提供方便,使它们摆脱主存容量的限制,可以由操作系统把主存和辅存这两级存储系统管理起来,实现自动覆盖。也就是说,一个大作业在执行时,其一部分地址空间在主存,另一部分在辅存,当所访问的信息不在主存时,则由操作系统而不是程序员来安排I/O指令,把信息从辅存调入主存。从效果上来看,好像为用户提供了一个存储容量比实际主存大得多的存储器,用户无需考虑所编程序在主存中是否放得下或放在什么位置等问题。我们称这种存储器为虚拟存储器。
虚拟存储器只是一个容量非常大的存储器的逻辑模型,不是任何实际的物理存储器。它借助于磁盘等辅助存储器来扩大主存容量,使之为更大或更多的程序所使用。虚拟存储器指的是主存-外存层次,它以透明的方式为用户提供了一个比实际主存空间大得多的程序地址空间。
程序运行时,CPU以虚拟地址来访问主存,由辅助硬件找出虚拟地址和实际地址之间的对应关系,并判断这个虚拟地址指示的存储单元内容是否已装入主存。如果已在主存中,则通过地址变换,CPU可直接访问主存的实际单元;如果不在主存中,则把包含这个字的一个存储块调入主存后再由CPU访问。如果主存已满,则由替换算法从主存中将暂不运行的一块调回外存,再从外存调入新的一块到主存。
从原理角度看,虚拟存储器和Cache-主存层次有不少相同之处。不过,Cache-主存层次的控制完全由硬件实现,所以对各类程序员是透明的;而虚拟存储器的控制是软硬件相结合的,对于设计存储管理软件的系统程序员来说是不透明的,对于应用程序员来说是透明的。

构造虚拟存储器的动机

  • 允许云计算在多个虚拟机之间有效而安全地共享存储器
  • 消除一个小而受限的主存容量对程序设计造成的影响

虚拟存储器的功能

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

  • 虚拟存储器将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,它高效地使用了主存
  • 虚拟存储器实现了程序地址空间到物理地址的转换,这种地址转换处理保护了每个进程的地址空间不被其他进程破坏
  • 虚拟存储器提供重定位(relocation)来简化程序加载过程。在用地址访存之前,重定位将程序所用的虚拟地址映射到不同的物理地址。因此重定位允许我们将程序加载到主存中的任何位置。

术语基本概念

  • 物理地址(physical address)
    主存储器的地址
  • 虚拟地址(virtual address)
    虚拟空间的地址,当需要访问主存时需要通过地址映射转换为物理地址
  • 地址转换(address translation)
    也称地址映射,在访问内存时将虚拟地址映射为物理地址的过程
  • 缺页(page fault)
    访问的页不在主存储器中
  • 页表(page table)
    保存着虚拟地址和物理地址之间转换关系的表。页表保存在主存中,通常使用虚页号来索引,如果这个虚页当前在主存中,页表中的对应项将包含虚页对应的物理页号
  • 快表(Translation-Lookaside Buffer)
    用于记录最近使用地址的映射信息的高速缓存,从而可以避免每次都要访问页表

设计虚拟存储系统的关键性因素

虚拟存储器缺页的代价很高,因此我们需要考虑如下关键因素:

  • 为了弥补较长的访问时间,页应该足够大
  • 使用全相联方式放置页以降低缺页率
  • 优化算法,减少访问页的次数
  • 采用写回机制,减少写的时间

加快地址转换:块表TLB(Translation-Lookaside Buffer)

由于页表放在主存中,因此程序每次访存至少需要两次:第一次访存先获得物理地址,第二次访存才获得数据。提高访问性能的关键在于依靠页表的访问局部性。
因此,现代处理器都包含一个特殊的cache以跟踪最近使用过的地址转换。这个cache通常被称为快表

  • TLB缺失
    TLB发生缺失可以分为两种情况:
    • 如果该页在主存中,那么TLB缺失只是一次转换缺失,处理器可以通过将页表中的变换装载到TLB中并且重新访问来进行缺失处理
      从主存中取出页表项装入TLB,然后重新执行引起TLB缺失的那条指令。
    • 如果该页不在主存中,TLB缺失就是一次真正地缺页,此时处理器调用操作系统的异常处理。
      1)使用虚拟地址查找页表项,并在磁盘上找到被访问的页的位置
      2)选择替换一个物理页;如果被选中的页被修改过,需要在把新的虚拟页装入之前将这个物理页写回磁盘上
      3)启动读操作,将被访问的页从磁盘上取回到所选择的物理页的位置上
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值