虚拟存储概念
背景
如果一个作业,需要全部装入内存后方能运行,会有什么情况?
(1) 有的作业很大,其所要求的内存空间超过了内存总容量,作业不能全部被装入内存,致使该作业无法运行;
(2) 有大量作业要求运行,但由于内存容量不足以容纳所有这些作业,只能将少数作业装入内存让它们先运行,而将其它大量的作业留在外存上等待
特点:
(1) 一次性
(2) 驻留性
局部性原理
程序运行时存在的局部性现象,很早就已被人发现,但直到1968年,P.Denning才真正指出:程序在执行时将呈现出局部性规律,即在一较短的时间内,程序的执行仅局限于某个部分,相应地,它所访问的存储空间也局限于某个区域。
(1) 时间局限性。
(2) 空间局限性。
应用程序在运行之前没有必要将之全部装入内存,而仅须将那些当前要运行的少数部分数据先装入内存便可运行,其余部分暂留在盘上。
虚拟存储器定义
当用户看到自己的程序能在系统中正常运行时,他会认为,该系统所具有的内存容量一定比自己的程序大,或者说,用户所感觉到的内存容量会比实际内存容量大得多。但用户所看到的大容量只是一种错觉,是虚的,故人们把这样的存储器称为虚拟存储器。
虚拟存储器的三个重要特征:
(1) 多次性。
(2) 对换性。
(3) 虚拟性。
虚拟存储器的实现?
具体怎么实现呢?是将整个程序一起载入内存中吗?
不是!采用离散存储方式
离散存储方式
(1) 分页存储管理方式。
(2) 分段存储管理方式。
(3) 段页式存储管理方式。
分页存储管理
分页存储的背景
引入分页: 解决内存分区导致的内存效率问题。
为了让面包没有谁都不想要的碎末:将面包切成片,将内存分成页!针对每个内存请求,系统一页一页的分配。
内存分页中,每页的大小通常是固定的,常见的页大小有 4KB、8KB、16KB、32KB 等。选择页大小时需要考虑以下因素:
1. 内存利用率:较小的页大小可以更好地利用内存空间。但是,页越小,页表的项数就越多,页表占用的内存空间就越大。
2. 外部碎片:过小的页大小容易导致外部碎片,即内存中的一些空闲区域无法被利用。
3. 内部碎片:过大的页大小容易导致内部碎片,即实际使用的空间比页的大小小,导致浪费。
通常来说,4KB 是最常用的页大小,因为它可以更好地平衡内存利用率和页表大小。而对于需要处理大量大型数据的应用程序,较大的页大小可以提高数据访问速度,但是可能会降低内存利用率。
分页存储管理的基本方法
页面和物理块
(1) 页面。
(2) 页面大小。
地址结构
分页地址中的地址结构如下:
对某特定机器,其地址结构是一定的。若给定一个逻辑地址空间中的地址为A,页面的大小为L,则页号P和页内地址d可按下式求得:
页表
在分页系统中,允许将进程的各个页离散地存储在内存的任一物理块中,为保证进程仍然能够正确地运行,即能在内存中找到每个页面所对应的物理块,系统又为每个进程建立了一张页面映像表,简称页表。
分页存储的地址变换
基本的地址变换机构
进程在运行期间,需要对程序和数据的地址进行变换,即将用户地址空间中的逻辑地址变换为内存空间中的物理地址,由于它执行的频率非常高,每条指令的地址都需要进行变换,因此需要采用硬件来实现(MMU)。页表功能是由一组专门的寄存器来实现的。一个页表项用一个寄存器。
页表指针存在PCB中
具有快表的地址变换机构
由于页表是存放在内存中的,这使CPU在每存取一个数据时,都要两次访问内存。第一次是访问内存中的页表,从中找到指定页的物理块号,再将块号与页内偏移量W拼接,以形成物理地址。第二次访问内存时,才是从第一次所得地址中获得所需数据(或向此地址中写入数据)。因此,采用这种方式将使计算机的处理速度降低近1/2。可见,以此高昂代价来换取存储器空间利用率的提高,是得不偿失的。