### 虚拟内存管理基础知识
#### 一、虚拟内存概览
虚拟内存是一种内存管理技术,它使得程序可以访问的内存空间远远大于物理内存的实际大小。通过虚拟内存技术,操作系统能够有效地管理和优化有限的物理内存资源,提高系统的整体性能。
#### 二、虚拟内存的发展历程
##### 20世纪50年代:绝对地址与动态地址转换
- **绝对地址**:早期计算机采用绝对地址,即有效地址直接对应物理内存地址。这一时期,计算机通常只运行单个程序,程序可以直接访问整个计算机资源(包括RAM和I/O设备)。但这种方式的灵活性较差,程序的地址依赖于其在内存中的装载位置。
- **动态地址转换**:随着多道程序设计的出现,需要解决不同程序间的地址冲突问题。动态地址转换通过使用基址寄存器和边界寄存器来实现位置无关的程序执行。基址寄存器用于指示程序在内存中的起始位置,而边界寄存器则定义了程序的大小范围,以此实现内存保护机制。
##### 20世纪60年代:分页式内存系统与按需分页
- **分页式内存系统**:为了进一步提高内存利用率,减少内存碎片,引入了分页式内存系统。这种系统将内存划分为固定大小的页面,每个页面通过页表映射到物理内存的不同位置。这样可以实现非连续内存分配,提高内存使用效率。
- **Atlas的按需分页**:面对数据集无法全部装入主存的情况,Tom Kilburn提出了按需分页技术。按需分页允许程序的部分页面驻留在二级存储器(如磁盘)上,只有当程序尝试访问某个未加载到主存的页面时,才触发从二级存储器读取页面的动作。这种方式极大地提高了内存的利用效率,并且降低了编程难度。
#### 三、现代虚拟存储器系统的关键概念
- **虚拟地址与物理地址**:虚拟地址是由程序生成的地址,它经过地址转换后映射到物理地址。物理地址是实际存放在DRAM中的地址信号。
- **内存位置的命名类型**:主要包括机器语言地址、虚拟地址和物理地址。机器语言地址是指在机器代码中描述的地址;虚拟地址是经过ISA描述的与程序变量相关的地址;物理地址则是操作系统描述的虚拟地址与物理存储器位置的映射。
- **页表与页表项**:页表是实现虚拟地址到物理地址转换的关键结构。页表项包含了每个虚拟页面对应的物理页面地址信息。现代虚拟存储器系统通常使用多级页表结构来减少页表占用的内存空间,并提高地址转换的速度。
- **地址转换与保护**:每次访问内存时都需要进行地址转换和保护检查。一个高效的虚拟存储器设计需要快速完成这些操作(约一个时钟周期),同时也要保持良好的空间利用率。
#### 四、现代虚拟存储器系统的特性
- **大的、独立的、私有的存储器说明**:现代虚拟存储器系统支持多个用户各自拥有独立的地址空间,同时也支持公共地址空间,实现了数据的保护与隔离。
- **按需分页**:按需分页允许运行比主存储器更大的程序,只需将当前所需的页面加载到内存中即可。虽然这增加了每次内存访问的地址转换成本,但也极大地提高了内存资源的整体利用率。
- **线性页表**:线性页表是一种常见的页表组织形式,其中每个页表项包含了虚拟页面到物理页面的映射信息。为了提高访问速度,还可以使用多级页表、反向页表等高级结构。
#### 五、总结
虚拟内存技术通过提供一种抽象化的内存模型,使得程序可以访问比物理内存更大的虚拟地址空间。从早期的绝对地址到动态地址转换,再到分页式内存系统及按需分页技术的发展,虚拟内存管理经历了多次变革。现代虚拟存储器系统不仅支持大规模程序的高效运行,还提供了强大的内存保护机制,为现代计算环境奠定了坚实的基础。