Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3009402
  • 博文数量: 167
  • 博客积分: 613
  • 博客等级: 中士
  • 技术积分: 5473
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-13 21:35
个人简介

人, 既无虎狼之爪牙,亦无狮象之力量,却能擒狼缚虎,驯狮猎象,无他,唯智慧耳。

文章分类
文章存档

2015年(19)

2014年(70)

2013年(54)

2012年(14)

2011年(10)

分类: C/C++

2011-10-29 18:48:42

Chapter 9 虚拟存储器

进程是系统中运行的程序的一个实例,比如我们可以同时运行多个QQ程序,同时用Office打开多个文档等等,而系统展现给我们的多进程界面其实是多个进程交替共享CPU和主存资源。但是,共享会带来直接的问题,比如:如果有很多进程同时运行所要求的存储容量可能会超过我们的物理存储器,导致其中某些运行错误;或者进程修改了其他进程的存储器,也会导致直接的运行错误。所以,为了更好地管理存储器,现代系统引入了虚拟存储器,以作为实际主存的上一层抽象,使得所有进程所占用的存储空间获得了一致的形式。这个方面主要有两个主题:1.理解虚拟存储器是如何工作的;2.应用程序如何使用和管理虚拟存储器。今天我们先来理解一下虚拟存储器的工作原理。
*******
物理和虚拟寻址
物理寻址——计算机系统的主存被组织成一个由M个连续字节组成的数组,可以记为0,1,2,3...M-1,每一个都有确定的物理地址(Physical Address,PA),早期的CPU直接发送物理地址给主存获取数据和指令。
虚拟寻址——现代系统CPU中集成了地址翻译硬件(MMU),可以将CPU识别的虚拟地址(VA)翻译为主存对应的PA。
#引入虚拟存储的一个好处就是,我们可以建立一个{VA}--->{PA}的映射,使得虚拟存储地址空间可以大于实际的地址空间#
******
虚拟存储器主要应用——缓存工具
如同我们在CPU和主存间加入高速缓存一样,系统也在主存和硬盘间加入虚拟存储来减少数据传递的时间。Windows下的虚拟内存就是一种虚拟存储器。
&页——虚拟存储器(VM)与物理存储器(PM)间数据交换的单位,虚拟页存储在磁盘上,物理页缓存在DRAM(主存)中
&页表——在物理存储器中存储着页表(数据结构),这张页表上记录着虚拟页到物理页的映射,每条记录称之为页表条目(Page Table Entry),基本格式为:有效位(1bit)+物理页号或磁盘地址
系统运行时,CPU发送一个虚拟地址请求,在虚拟存储器中的虚拟页表上查找PTE,此时:
若匹配且有效位为“1”,则说明该数据已经缓存在主存中,直接读取之后的物理页号获得数据;
若匹配但有效位为“0”,说明数据在VM上但没有存到PM上,这时需要替换掉PM上的一个页,来获得所要求的页;
实际中,所有现代系统都采用按需进行页面调度的方式,即有请求才替换页。
******
虚拟存储器主要应用——存储管理
直接的结果是,由于VM空间一般要大于PM空间,所以会出现共享PM空间地址的情况。比如进程需要使用相同的内核代码,调用相同的系统函数,C标准库中的函数。此时就可以多个进程共享一部分地址空间。节省了多进程的存储空间要求。
******
虚拟存储器的主要应用——存储器保护
系统中有太多的数据不允许用户随便访问和更改,比如进程的只读文本段,比如内核中的代码和数据,又比如其他进程的私有存储器。所以现代系统不约而同地为OS提供手段来控制存储器系统的访问。现实中可以在页表中加入更多的有效位来控制对特殊页面的读写操作,比如:
SUP位:是否只有超级用户才有权限读写
READ:是否有读权限
WRITE:是否有写权限
******
地址翻译
CPU向存储器发送的是虚拟地址,这允许CPU直接面对的是抽象的一致的存储器对象。但是这就需要MMU进行地址翻译的工作。MMU会利用页表基址寄存器来确定虚拟地址在虚拟页表中的PTE,而后进行PA的转换。主要步骤如下:
1.CPU生成一个虚拟地址发送给MMU
2.MMU生成PTE地址,并从高速缓存/主存请求得到它
3.高速缓存/主存向MMU返回PTE(记录)
4.判断:
若PTE有效位为真,则MMU读取PTE中的物理地址,并发送给高速缓存/主存
5.高速缓存/主存返回所请求的数据给CPU

若判断PTE有效位为假或失效,
6.MMU触发一次异常,控制转交给CPU异常控制处理程序
7.缺页处理程序确定出PM中的牺牲页,如果该页已经被修改,则写回磁盘
8.将缺页处理程序调入新的页面,并更新存储器中的PTE
9.缺页处理程序返回--->4








阅读(2913) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~