虚地址或称逻辑地址通常是指由程序提供的地址,而实地址或称物理地址则是指有效的存储器地址。由所有虚地址构成的集合叫做虚地址空间(virtual address space),由所有实地址构成的集合叫做实地址空间(physical address space),体系结构允许的最大虚地址空间由其字长确定,一个系统实际支持的虚地址空间和实地址空间的大小均与实现有关。
概述虚地址或称逻辑地址通常是指由程序提供的地址,而实地址或称物理地址则是指有效的存储器地址。由所有虚地址构成的集合叫做虚地址空间(virtual address space),由所有实地址构成的集合叫做实地址空间(physical address space),体系结构允许的最大虚地址空间由其字长确定,一个系统实际支持的虚地址空间和实地址空间的大小均与实现有关。
对于同一体系结构而言,虚地址空间和实地址空间两者的大小一般都不相等,虚地址空间可以大于实地址空间,也可以小于实地址空间。虚实地址转换机制的作用就是建立虚实地址空间之间的对应关系,从而使得在较大的虚地址空间中编写的程序能够在较小的实地址空间运行,以便节省物理存储器;或者使得在较小的虚地址空间中编写的程序能够在较大的实地址空间运行,以便提高系统的处理能力。
RISC体系结构的虚实地址转换机制要比CISC体系结构复杂一些。这是因为:第一,最新的64位RISC体系结构不但要适应开放系统的环境,而且要考虑跨代兼容性。以Alpha体系结构为例,既要支持开放的操作系统,例如UNIX,又要兼顾VAX/VMS。因此,Alpha至少要满足这两个不同的操作系统对地址转换机制的要求。第二,现有的某些RISC体系结构,例如PowerPC和PA RISC等等,仍是32位的,其基本的虚地址空间当然也是32位的。为了延长这些体系结构的生存期,必须将虚地址空问扩充为64位,或者至少48位。这就要求这些体系结构的地址转换机构除完成常规的虚实地址转换以外,首先必须完成从32位虚地址到64位(或48位)虚地址的转换。
地址转换的基本原理为了更有效地分配、共享和保护存储器,需将虚实地址空间划分成若干较小的单位,所有地址转换和访问保护都以这个单位为基础进行。最常用的单位是页面,一个页面包含地址空间中若干连续的单元。对于一个给定的体系结构,虚地址空间和实地址空间的页面长度相等;页面长度可以是固定的,也可以是可变的。页面地址也叫做页面号,页面号由单元地址按页面长度取模而得。例如,假设页面长度为1K字节,那么第0号页面包含第0至1K一1字节单元,第1号页面包含第1K至2K一1字节单元,以此类推。存储管理常用的单位,除页以外还有段。段的划分有两种:一种与页相似,但比页大,一个段包含若干连续的页;另一种按程序的逻辑结构划分,因此这种段的长度不是固定的。除了页和段以外,有些体系结构还将整个虚或实地址空间分成几个较小的空间,供不同的程序或进程使用,以便加快地址转换的速度或减少进程切换的时间。
图1中,在以页面作为存储管理基本单位的体系结构中,假设虚地址为64位,实地址为48位,页面长度为1K。
图1中,位移字段为页面内字节位移字段,VPN为虚页面号字段,PFN为实页帧号字段。在虚实地址转换过程中,位移字段不变。因此,虚实地址转换的实质就是确定从VPN到PFN的对应关系。一个VPN只能对应一个PFN,但多个VPN可以对应同一个PFN。这种对应关系由操作系统建立。
操作系统为每个已被激活的虚页面,也就是VPN建立一个条目,称为页表项(page table entry—PTE)。PTE主要包括两种信息:PFN字段和保护字段。前者用于虚实地址转换,后者用于存储访问保护。所有的PTE组成页表,页表存放在主存中,其中一部分也可存放在外存中。页表的管理完全由操作系统完成,硬件不得改变PTE。
由于页表存放在存储器中,这就迫使每次地址转换都不得不访问存储器,才能取出相应的PTE。显然,这种方法严重地影响地址转换的速度,降低系统的性能。为此。在处理器内部设置一个由高速硬件构成的小型页表,并根据某种替换算法,将近期使用频度最高的PTE放在其中。于是,在进行地址转换时,查找这个页表,如果对这个页表的访问未命中,则访问存储器中的大页表,并进行相应的PTE替换。称这个快速的小型页表为转换后援缓冲器(TLB,translation lookaside buffer)或转换缓冲器(TB,translation buffer)。不难看出,TB实际上是专门用于地址转换的高缓。和通常的高缓一样,TB也由标签存储器和数据存储器两部分组成。其中标签存储器存放虚页面VPN字段的全部或部分位,用于TB检索;数据存储器存放与虚页面相对应的PTE,PTE中包含转换成的实页面的PFN字段。TB的检索一般采用全相联或组相联等方案。
综上所述,可将虚实地址转换的过程概括如下(参见图2);
程序生成某虚地址VA;处理器将这个VA的VPN字段取出,并同转换缓冲器TB的标签存储器TAG中的内容进行某种相联比较,如果符合,即TB命中,便取出相对应的PTE;检查PTE的有效性以及页面保护权限,如果未产生访问控制违章,则从PTE中取出PFN字段作为实地址PA的高位,再从VA中取出位移字段作为PA的低位,从而转换成完整的PA。
在上述过程中,如果产生TB不命中(TB MISS),表明与VA相对应的PTE不在TB中,则需访问存储器中的页表。如果产生访问控制违章,则停止地址转换,并提交操作系统处理。
对于程序提供的虚地址,如果能够找到有效的PTE,则表明存储管理已将这个虚页面映象成实页面,且已分配到主存。因此,只需用转换而成的实地址去访问高缓或主存,即可完成这次存储器访问。相反,如果在页表中未找到有效的PTE,则表明所需的实页面尚未分配到主存,于是便产生页面故障,由操作系统执行页面调入服务例程,将所需页面从辅助存储器(例如磁盘)调入主存。此时,如果主存没有空闲的空间,则先要执行页面调出(page out)服务例程,按照某种替换算法将某页面从主存调到辅存,腾出空闲的页面,然后再执行页面调入。1
本词条内容贡献者为:
李岳阳 - 副教授 - 江南大学