前言
CA这门课的报告已经交了好几个星期了,现在上传应该没问题。之后看到这篇文章的大部分都是弟弟妹妹。建华老师的课其实很好,但是很多学生很容易用英语ppt吓坏了,然后就没认真学了。其实学习学习硬件知识还是很有意思的,我的这篇论文报告主要关于我个人比较感兴趣的虚拟存储技术,许多段落摘自英文中文的维基百科和自己浅显的理解,只有极少的内容来自知网上的论文,算是一种投机取巧吧。为了挽救生命,报告的封面、感受和目录被删除。更多的是为弟弟妹妹们提供思路和参考,(建华老师原句)。
1.虚拟存储技术的基本原理
虚拟存储器是计算机系统中管理存储器的一种技术。如图1所示,其应用程序认为它具有连续可用的内存(连续完整的地址空间),但事实并非如此。虚拟存储器通常分为多个物理内存碎片,甚至部分暂时存储在外部磁盘存储器中,数据交换只在必要时进行。与没有使用虚拟储存技术的系统相比,使用这种技术的系统使得了大型程序的编程变得更加容易,对于真正的物理内存(通常是指RAM)使用效率更高。
需要注意的是,虚拟存储器不仅意味着利用磁盘空间扩展物理内存,还意味着扩展内存水平,使其包含硬盘驱动器。将内存扩展到硬盘驱动器水平是虚拟内存技术的结果。它的功能也可以通过覆盖或将不同活动状态的程序和数据交换到磁盘上来实现。
这样,我们就可以得出虚拟内存的定义:根据地址空间的重定义,将分散的地址空间定义为连续的虚拟内存地址,使应用程序认为它们正在使用大量的连续地址。
图1
2.虚拟存储所涉及的技术
2.1存储层[1]
存储层次是计算机系统结构下存储系统层次结构的排列顺序。与下一层存储相比,每层存储具有较高的读写速度和较低的延迟性,容量较小(这里有少量例外)。现在的大部分CPU处理速度非常快,大多数程序都需要访问存储器。但是Cache存储层次中存储器传输的效率和不同层次的效率实际上会限制处理结果,导致CPU等待存储器需要很多时间I/O完成工作。
绝大多数计算机的存储层次如下:
2.1.1寄存器
寄存器(Register)是CPU用于暂存指令、数据和地址的电脑存储器。存储容量有限,读写速度很快。
2.1.2高速缓存
访问速度比平时快随机存取存储器(RAM)快的一种RAM,通常不像系统主存那样使用DRAM使用昂贵但快速的技术SRAM技术。
第一级Cache-通常访问只需要几个周期,通常是几十个KB。
第二级Cache-一级高速缓存约为2~延迟型高10倍。
第三级Cache-比L通常有几个更高的延迟性MB之大。
第四级Cache-CPU外部的DRAM,但速度较主存高。
2.1.3主存
是一种半导体存储器,主要作用原理是利用电容内存储电荷多少代表一个二进制比特(bit)是1还是0。
2.1.4磁盘存储
是电脑以硬旋转盘为基础非易失性存储器,它存储和检索平面磁表面的数字数据,数据通过电磁流将极性写入磁盘,数据可以通过磁盘读取。
2.2分页表
分页表(page table)是一种数据结构,用于计算机操作系统中的虚拟内存该系统将虚拟地址存储在物理地址之间。虚拟地址是访问过程中唯一的,而物理地址是硬件(如内存)它是唯一的。如图2所示,虚拟地址到物理地址的映射通过分页表实现。
图2
当将虚拟地址转换为物理地址时,首先搜索TLB。若找匹配(TLB命中),返回物理地址并继续访问存储器。但是,如果没有匹配(TLB未命中),存储管理单元或操作系统TLB未命中处理器通常会在页面上找到地址映射,看看是否有映射(页面遍历)。如果存在,写回来TLB(这必须完成,因为硬件通过虚拟存储系统中的硬件TLB访问存储器),重启错误指令(这也可以并行发生)。将找到后续的转换TLB命中,内存访问将继续。
2.三页替换算法
2.3.最佳理论替换算法OPT[2]
当需要更换页面时,作系统换出该界面,且该页面的下一次使用将在未来出现。例如,在接下来的6秒内将不使用的页面被替换为接下来0.5秒内将要使用的页面。但是这种算法无法在操作系统中实现,这是因为无法可靠地算出将要使用地页面之前需要花费多久时间,除非预先知道将在该系统下运行地所有软件且满足一定要求。
2.3.2 最近不使用算法
最近不使用(NRU)页面替换算法是一种有助于将页面保留在最近使用过的内存中的算法。该算法基于以下原理工作:当引用页面时,将为该页面设置一个引用位,将其标记为已引用。类似地,当修改(写入)页面时,会设置修改位。当需要替换页面时,操作系统将页面分为四类:
3.引用,修改
2.引用,未修改
1.未引用,已修改
0.未引用,未修改
2.3.3先进先出算法FIFO
最简单的页面替换算法是FIFO算法。先进先出(FIFO)页面替换算法是一种开销很小的算法,在操作系统方面几乎不需要簿记。这个名字从名字上就很明显–操作系统跟踪队列中内存中的所有页面,最新的到达后面,最早的到达前面。当需要替换页面时,将选择队列最前面的页面(最旧的页面)。 FIFO虽然直观,但在实际应用中却表现不佳。因此,很少以未修改的形式使用它。
2.3.4 时钟算法Clock
时钟算法将循环的页面列表保存在内存中,“手”(迭代器)指向列表中最后检查的页面框架。当发生页面错误并且不存在空帧时,将在手的位置检查R(参考)位。如果R为0,则新页面将放置在“手”所指向的页面的位置,并且手将前进一个位置。否则,清除R位,然后增加时钟针,并重复该过程,直到替换页面为止。[3]
2.4地址变换缓冲器
如图3,TLB具有固定数量的插槽,其中包含页表条目和段表条目;页表条目将虚拟地址映射到物理地址和中间表地址,而段表条目将虚拟地址映射到段地址,中间表地址和页表地址。所述虚拟存储器是从处理看到的内存空间; 这个空间通常分成页固定大小的(在分页存储器),或较不常见到的段大小可变的(在分段存储器)。页表,通常存储在主存储器中,跟踪虚拟页面在物理内存中的存储位置。此方法使用两次内存访问(一次用于页表项,一次用于字节)访问一个字节。首先,在页表中查找帧号。其次,具有页偏移量的帧号给出了实际地址。因此,任何简单的虚拟内存方案都会使内存访问时间加倍。因此,TLB用于减少页表方法中访问存储器位置所花费的时间。TLB是页表的高速缓存,仅表示页表内容的子集。
参考物理内存地址,TLB可以驻留在CPU和CPU缓存之间,CPU缓存和主存储内存之间或多层缓存之间。放置位置确定缓存是使用物理寻址还是虚拟寻址。如果虚拟寻址了缓存,则将请求直接从CPU发送到缓存,并且仅在缓存未命中时访问TLB 。如果对高速缓存进行了物理寻址,则CPU会对每个内存操作进行TLB查找,并将得到的物理地址发送到高速缓存。[4]
图3
3.总结
3.1报告感想
总结以上从论文中获取的知识以及我在计算机体系结构这门课程中学习到的知识,我来说一说我对于什么是虚拟存储、为什么要使用虚拟存储、虚拟储存技术是如何实现的等问题的理解。
首先,因为很多程序在执行时需要很大一部分内存空间,但是计算机本身的内存容量是很小的。所以我们引入了虚拟存储这个技术,通过虚拟技术将内存甚至是磁盘中非连续的物理地址虚拟成一段连续的虚拟地址供程序执行时使用,让程序以为自己正使用一大块连续的物理地址。
简单来说,虚拟存储技术主要实现了虚拟地址到物理地址映射问题,而虚拟存储技术的重点则是如何提升映射的准确性、映射的效率。为此引出了页表、页表调度算法、快表等技术。
首先说虚拟地址的构成,它通常包含了虚拟页号(VPN)和虚拟页面偏移(page offset),内存中划分出了很多与虚拟页大小相同的物理页,这里强调了大小相同,因此,虚拟页面偏移是等于物理页面偏移的。页表中通常包含有效位、物理页号,其中有效位用于判断条目对应内容是否存在于内存中。当CPU发送来一个虚地址时,根据虚拟页号在页表中查询到物理页号同时结合虚拟页面偏移就可以得到数据在内存中真实的物理地址。
最后来说明为什么要引入快表(TLB)这个技术。快表又名地址变换缓冲器,在没有引入快表之前,每次读取数据都要先访问内存中的页表,得到物理地址后再次访问内存。这个过程中访问了二次内存,这是十分耗费时间的。所以引入了快表,快表相当于包含了页表的一部分,它本身又是一个高速缓冲器,通过它便可以只访问一次内存就读取到数据,大大加快了虚拟存储技术的效率。
3.2课堂建议
匿了匿了
4.参考文献
- Rafal Kolanski,A Logic for Virtual Memory,Electronic Notes in Theoretical Computer Science 217 (2008) 61–77.
- Jones, Douglas W. "22C:116 Lecture Notes". University of Iowa Department of Computer Science. Archived from the original on 30 June 2012. Retrieved 18 March 2008.
- Tanenbaum, Andrew S. (2001). Modern Operating Systems (2nd ed.). Upper Saddle River, NJ, USA: Prentice-Hall. p. 218 (4.4.5). ISBN 978-0-13-031358-4. LCCN 00051666. OCLC 45284637. OL 24214243M.
- Silberschatz, Galvin, Gagne, Abraham, Peter B. , Greg (2009). Operating Systems Concepts. United States of America: John Wiley & Sons. INC. ISBN 978-0-470-12872-5.-470-12872-5。