标签:元组 硬件 系统管 共享 映射 应用 地址空间 原理 code
系统中的进程之间会共享CPU和主存,为了有效的管理存储器,减少出错(某个进程可能会对另一个进程使用的存储器进行写操作),提出了虚拟存储器(VM)的概念。
虚拟存储器为每一个进程提供了一种私有的且一致的地址空间,并且通过某种机制。为系统提供了以下功能:
(1) 在磁盘上划出一块地址空间,将主存看成这块地址空间的高速缓存,主存自动缓存最近使用的存放在磁盘上的虚拟地址空间的内容,通过这种方式,可以高效的使用主存;
(2)为每一个进程提供了一致的地址空间,简化了存储器管理;
(3) 虚拟存储器在每个页表条目中加入了保护位,从而保护每个进程的地址空间不被其他进程破坏。
虚拟存储器遍及计算机系统的各个层面;给予了应用程序强大的能力,可以创建和销毁存储器片,将存储器片映射到磁盘文件的某个部分,以及与其他进程之间共享存储器;但是虚拟存储器使用不当,将会遇到各种与存储器有关的错误!
接下来看一下虚拟存储器是如何工作的:
1. 虚拟寻址
计算机系统的主存被组织成由N个连续的字节大小的单元组成的数组,每个字节都有一个唯一的物理地址(PA)。使用虚拟寻址时,CPU通过生成一个虚拟地址(VA)来访问主存,虚拟地址通过存储器管理单元(MMU)翻译成物理地址,通过存储器总线传给主存,主存取出从该物理地址开始的四个字节的内容,将其返回给CPU。专用硬件MMU利用存放在主存中的查询表来动态翻译虚拟地址,查询表的内容有操作系统管理,地址翻译需要硬件和软件(操作系统)之间的密切配合。
2. 虚拟存储器
虚拟存储器被组织成一个存放在磁盘上的M个连续字节大小的单元组成的数组,每个字节都有一个唯一的虚拟地址。虚拟存储器系统将虚拟存储器分割成大小固定的块,即虚拟页(VP),物理存储器也被分割为物理页(PP),物理页和虚拟页的大小相同。虚拟存储器原理图如下所示:
虚拟页(VP)可以分为以下几个部分:
(1) 未分配的页,虚拟存储器还未创建的页,不占用磁盘空间;
(2) 缓存的页(VP1-VP3,VP7),当前缓存在物理存储器中的已分配页;
(3) 未缓存的页(VP4-VP6,VP8),当前未缓存在物理存储器中的已分配页。
通过存放在物理存储器中的一种称为页表(PT)的数据结构,将虚拟页映射到物理页,操作系统负责维护页表的内容,并在磁盘和主存之间传送页。页表为一个页表条目(PTE)的数组,页表条目有一个有效位和一个n位的地址字段组成,有效位表明该虚拟页是否被缓存在物理存储器中,地址字段表示对应的物理页在物理存储器中的起始位置,或者该虚拟页在磁盘中的起始位置。
当CPU读取存储在虚拟存储器某页中的一个字时:
若在物理存储器中找到了该虚拟页,称为页命中,如图所示,当CPU读取包含在VP2中的一个字时,VP2被缓存在了物理存储器中,MMU将虚拟地址作为索引来定位PTE2,根据有效位可知,VP2缓存在物理存储器中,接着使用PTE2中的物理存储器地址构造出该字的物理地址。
若没有在物理存储器中找到该虚拟页,称为缺页,如图所示,当CPU读取包含在VP3中的一个字时,VP3并没有缓存在物理存储器中,MMU将虚拟地址作为索引来定位PTE3,根据有效位可知,VP3没有缓存在物理存储器中,触发缺页中断,调用内核中的缺异常处理程序。该程序会选择一个缓存在物理存储器中的虚拟页作为牺牲页,内核从磁盘拷贝VP3到物理存储器中,并更新PT3,随后返回。在主程序中,重新启动导致缺页的指令,此时将会命中该虚拟页。
当我们调用指令来分配一个新的虚拟页时,即分配页面,在磁盘上创建空间,并更新相应的页表条目,使其指向磁盘上新建的页面。
虚拟存储器是对主存的抽象,其之所以能够行之有效,归根结底,是因为程序具有局部性。
参考书籍:Randal E.Bryant David R.O‘Hallaron 著,龚奕利 雷迎春 译,《深入理解计算机系统》,机械工业出版社
标签:元组 硬件 系统管 共享 映射 应用 地址空间 原理 code
原文地址:https://www.cnblogs.com/yongjin-hou/p/13543320.html