TLB是一块特殊的快表,可以更快的获得物理帧号,且TLB的miss几率可以忽略不计。
页表有个特殊的概念叫驻留位(上图标红的地方),驻留位为0的表示物理帧号不存在,也就是本页映射无效。
页表反向设计,页表索引以帧号为index,因为物理内存是固定的,而逻辑空间是无限增长的,因此大大减少了页表大小。
优:
占用空间小
转换表只与物理内存有关,与逻辑内存无关
弊:
信息对调,无法根据页号找到帧号
关联内存方案:。。。 Hash方案:。。。 四、虚拟内存管理 4.1 起因希望有个很大、很快、很便宜的存储器,最好掉电数据不丢失。因此,贪心的人类想到了利用硬盘。
早期的计算机由于硬件限制,经常会出现内存不够的情况,当时主要通过覆盖技术(只把需要的指令和数据存在内存中)和交换技术(把暂时不用的指令和数据存到swap中)。
4.2 覆盖技术产生于20世纪80年代,一般用于多道程序系统的DOS操作系统。当时计算机的内存容量大多只有640kb。
目的:在较小的内存容量下运行较大的应用程序,与分区存储管理配合使用。
实现:如下图所示,A程序为常驻应用,但BC程序不会相互调用,DEF程序也不会相互调用,所以就可以让之后调用程序内存覆盖之前调用的内存空间。(以模块为粒度覆盖)
缺点:由程序员来考虑把一个大程序,划分为若干小的功能模块,并确定各个模块之间的依赖,覆盖关系。增加了系统复杂性和编程难度。
覆盖模块从外存装入内存,是典型的时间换空间。
4.3 交换技术一般用于Unix操作系统。
目的:让正在运行或需要运行的程序可以获得更多内存资源。
实现:将暂时没有运行的程序移到外部swap,从而获得更多的物理内存。(以程序为粒度交换)
注意:何时进行换入(swap in)好换出(swap out)操作? 尽量少,内存不够再换出
交换分区(swap)的空间要设置多大?必须足够大,可以存放所用用户进程的内存拷贝。
内存换入时的地址重定向问题?要采用动态地址映射法。
4.4 虚存技术在有限容量的内存中,以更小的页粒度为单位装入更多更大的程序(对覆盖技术和交换技术的一次融合)。
目的:像覆盖技术一样,不将应用全部载入内存,而是载入部分,以此来运行比物理内存大很多的应用程序。但不需要程序员维护。
像交换技术一样,能够实现应用在内存和外存之间的交换。但不以程序为粒度交换。
要求: 局部性原理:指程序在执行过程的一个较短时间内,所执行的指令地址和指令操作数地址,分别局限在一小块区域。
时间局部性:一条指令的一次执行和下次执行,数据的一次访问和下次访问都集中在较短时间内;(类似缓存、预加载,增加命中率)
空间局部性:当前指令和临近的几条指令,当前访问数据和临近的数据都集中在一块较小的区域内;(减少swap次数,同上)
举例: 对于一个二维数组[1024 * 1024], 对于横向打印和竖向打印,效率差异还是相当大的!
特征:充分利用CPU寻址能力,获得更大的可用物理内存(主存+虚存)
部分交换
不连续性:逻辑地址也可以不连续
虚拟页式内存管理:这种管理方式,是大多数虚拟存储设备的选择,即在页式存储的基础上,增加了请求调页和页面置换功能。
请求调页:应用程序装入内存时,不是一次性载入全部的页片到内存,而是用到哪个页片载入哪个帧。(局部加载)
页面置换:在应用运行过程中,如果发现需要的页片不在内存中,就会发生“断页中断请求”,系统处理这个中断,就会将虚拟内存中的帧加载到物理内存中。(延迟调用)
在何处保存未加载的帧?
能够简单的识别在二级存储器中的页
交换空间(磁盘或者文件)
后备存储可以有哪些?
一个虚拟地址空间的页:可以被映射到一个文件的某个位置
代码段:可以映射到可执行的二进制文件
动态共享程序段:映射到动态调用的库文件
其他段:映射到交换文件中
虚拟内存性能有效存储访问时间(EAT)= Effective Memory Access Time
EAT = 访问时间 * 页表命中率 + 缺页处理时间 * 缺页几率