3.8 奔腾系列机的虚存组织
基于英特尔IA-32体系结构的奔腾系列机为存储管理提供了强大的硬件支持。奔腾处理机的存储管理机制与英特尔80386和80486的设计基本相同,从而为高效的存储管理提供了持续的优化和扩展。
3.8.1 存储器模型
IA-32体系结构中的存储管理硬件支持三种主要的存储器模型。这些模型为系统设计师提供了灵活的方法来优化应用和操作系统的内存使用,从而提高整体的系统性能和资源管理效率。
(a) 平坦存储器模型
在平坦存储器模型中,内存被组织成一个单一的、连续的地址空间,这被称为“线性地址空间”。在此模型中,所有的代码、数据和堆栈都被包含在同一个地址空间内,字节地址的范围是0到2^32-1。这种模型的主要优点是简化了内存管理,因为它不需要额外的段转换,使得程序的运行效率更高。
(b) 分段存储器模型
分段存储器模型提供了一种将内存分割成多个独立的段的方法,每个程序都可以使用一组独立的地址空间。每个段的最大长度可以达到2^22字节。逻辑地址在这个模型中由段选择器和偏移量组成,处理机会将逻辑地址透明地转换为线性地址。这种模型的主要好处是它增加了内存的保护和隔离,使得不同程序间的内存访问互不干扰,提高了系统的安全性。
(c) 实地址模式模型
实地址模式存储器模型是为了保持与早期8086处理机的兼容而设计的。在这种模式下,线性地址空间被分为多个段,每个段的最大长度为64KB,而线性地址空间的最大长度为2^20字节。这个模式主要用于运行老旧软件和操作系统,以确保历史兼容性和软件的持续可用性。
通过这些模型的实现,IA-32体系结构的奔腾系列机能够提供强大的存储管理功能,适应各种不同的应用需求和操作系统策略。这些存储模型不仅确保了系统的高性能运行,也为系统安全和程序兼容性提供了重要的支持。
3.8.2 虚地址模式
在IA-32体系结构中,虚拟存储器的实现涉及两个关键组件:分段部件(Segmentation Unit, SU)和分页部件(Paging Unit, PU)。这两种机制可以独立或组合使用,以支持不同的存储管理需求。
分段与分页的基本工作原理
分段部件(SU)的主要功能是将程序中使用的虚拟地址(逻辑地址)转换为线性地址。这一过程主要通过使用段选择器和偏移量来实现,其中段选择器定义了内存中的一个特定段。而分页部件(PU)则负责将线性地址转换为物理地址,以便于数据存取。
存储管理模式的组合
在IA-32架构中,分段和分页的组合可以产生四种不同的虚拟存储模式:
-
不分段不分页模式:在这种模式下,程序使用的逻辑地址直接作为物理地址。这种设置通常用于简单的或专用的操作系统中,其管理复杂度最低,但缺乏灵活性和安全性。
-
分段不分页模式:这相当于传统的段式虚拟存储器。在这种模式下,逻辑地址由一个16位的段选择器和一个32位的偏移量组成。段选择器中的最低两位用于存储保护,其余14位用于选择特定的段。虚拟地址空间可达64TB,而物理地址空间使用32位地址,最大为4GB。这种模式允许灵活的内存分段,但不支持更细粒度的分页管理。
-
不分段分页模式:相当于页式虚拟存储器。这种模式使用32位线性地址,由分页部件转换为32位物理地址。它提供了简化的内存管理和更好的内存保护,是现代操作系统中最常用的模式。
-
分段分页模式:这种模式结合了分段和分页的优点,提供了最大的灵活性和安全性。逻辑地址由16位段选择器和32位偏移量组成,首先由分段部件转换为线性地址,然后由分页部件进一步转换为物理地址。这种配置支持高达64TB的虚拟地址空间,同时兼顾细粒度的内存保护和高效的空间利用。
通过这四种模式的组合,IA-32体系结构为不同的应用场景和系统需求提供了广泛的支持,允许系统设计师根据具体的性能要求和安全需求来选择最合适的存储管理策略。
3.8.3 分页模式下的地址转换
在IA-32架构的分页模式下,虚拟内存系统可以使用两种不同的页大小,每种页大小对地址映射的方式有明显的不同。这两种页大小分别适应不同的系统需求和优化目标。
两种页大小的地址转换机制
1. 4KB页大小
4KB页是最基本的分页模式,采用两级结构进行地址转换:页目录和页表。这种结构兼容早期的80386和80486处理器。在这种模式下,32位的线性地址被分成三个部分:页目录索引、页表索引和页内偏移。首先,页目录索引用于在页目录中查找相应的页表地址,然后页表索引用于在页表中查找具体的物理页面。最后,页内偏移指定了页面中的确切位置。
2. 4MB页大小
从奔腾处理机开始,引入了更大的页大小,即4MB,这使用单级页表结构进行地址转换。这种方式简化了地址转换过程,因为它直接通过页表项将线性地址映射到物理地址。32位线性地址被分成两个部分:高10位作为页号,其余22位作为页内偏移量。
地址转换示例(4MB页)
对于4MB页大小的情况,线性地址结构如下:
- 页号(高10位):指定页表中的索引,对应的页表项直接指向一个4MB大小的物理内存块。
- 偏移量(低22位):指定在选定的4MB物理页面中的具体位置。
页表本身包含1024个表项,每个表项都是32位宽。页表项具有以下字段:
- P(存在位):如果P=1,表示此页已装入主存;如果P=0,则对该页的访问会触发缺页中断。
- A(已访问位):如果在装入主存后此页被访问过,则置为1;否则为0。
- D(脏位):如果页在调入主存后被修改过,则置为1,表示此页在被换出主存时应写回辅存。
- RW(读/写控制位):指明用户对该页的权限是只读还是可读写。
- U/S(用户/管理员权限控制位):指明该页是只能被操作系统访问还是同时允许操作系统和用户程序访问。
- 页大小指示位:I=1表示4MB页大小;I=0表示4KB大小。
控制寄存器CR3在此结构中扮演关键角色,指向页表的物理地址,确保处理器能够迅速定位到页表进行地址转换。
通过这种高效的地址转换机制,分页系统可以更好地管理内存,减少碎片,提高内存使用效率。同时,大页模式(4MB页)可以减少页表的大小和深度,降低页表查找时的延迟,适用于需要处理大量数据的应用,如大型数据库和内存密集型应用。