用32位微处理器中的4字节和8字节 页面表条目实现线性地址扩展以及到物理存储器上的映射 【发明领域】
本发明涉及微处理器以及计算机系统,尤其是与具有扩展线性地址生成和转化功能的虚拟存储器系统有关。发明背景
多数微处理器中都使用了虚拟的或请求分页式的存储器方案,当需要时,这类存储器中程序执行环境的各部分程序都被映射到物理存储器上。虚拟存储器设计所允许使用的存储器空间大小要比微处理器中的线性地址空间小得多,而且虚拟存储器还能提供存储器保护机制,以便在多个任务(程序)共同分享同一个物理存储器时不会出现不利的相互影响。
物理存储器是存储器分级系统的一部分,在图1中存储器分级系统被解释为计算机系统的一部分。微处理器102中的第一级高速缓存包括指令高速缓存104和数据高速缓存106。微处理器102通过后部总线110与统一的第二级高速缓存108进行通信。第二级高速缓存108中既包括指令又包括数据,在实际布置中可放在芯片102上。高速缓存104和106包括了存储器分级体系中的第一级,高速缓存108则包括其中的第二级。
图1典型计算机系统中的存储器分级系统的第三级由存储器112指定。微处理器102通过主处理器(前端)总线114和芯片集116与存储器112进行通信。芯片集116也可以提供与图形处理器120进行通信的图形总线118,芯片集116还可作为通向其它总线地桥梁,如外围部件总线122。二级存储器,如磁盘单元124,也作为存储器分级体系中的另一级。
图2说明的是微处理器102中的某些功能单元,其中包括指令和数据高速缓存。在微处理器102中,取数据单元202从指令高速缓存104中取指令,而译码单元206对这些指令进行译码。对于具有CICS(复杂指令集计算机)的计算机结构,译码单元206将复杂指令译成一个或多个微指令。通常,这些微指令定义的是装入—存储类型的计算机结构,因而包括存储器操作的微指令能够简便的进行装入或存储操作。而本发明可适用于其它的计算机结构,例如RISC(缩减指令集计算机)或VLIW(超大指令字)计算机结构。
对于RISC计算机结构,指令并不被译码成微指令。因为本发明既能用于RISC结构又能适用于CICS结构,因此除非另外说明,我们并不区分指令与微指令,而简单地称它们为指令。
多数指令在几种资源操作数上操作,生成结果。它们明确或间接地从其读取值的或需要写入值的资源和目的存储单元进行命名。被命名的是某个逻辑(计算机结构)寄存器,或是存储器中的某个存储单元。将逻辑寄存器重新命名为物理寄存器时会致使指令被无序地执行。在图2中由重命名单元208对寄存器进行重命名,RAT(寄存器分配表)中存储着逻辑寄存器和物理寄存器之间的当前映射。物理寄存器由寄存器文件212指定。
各个逻辑寄存器都在物理寄存器文件212中都具有到物理寄存器上的映射,其中,映射被存储在RAT210中,作为其中的一个条目。RAT210中的条目被逻辑寄存器索引并包含指针指向物理寄存器文件212中的物理寄存器。物理寄存器文件212中的某些寄存器专用于整数,而其它一些则只专用于浮点数,但为了简便起见,图2中并未表示出这种区别。
在重命名指令的过程中,当前RAT提供用于重命名指令资源逻辑寄存器的要求映射,同时也要为指令的目的逻辑寄存器创建新的映射。这一新映射替换了RAT中的原始映射。
被重新命名的指令存放在指令窗口缓冲器216中。所有指令“在过程中”都有一个条目放在按循环缓冲器工作的指令窗口缓冲器216中。指令窗口缓冲器216使存储器消除了多义性,以便存储器引用能正确实现,让指令按原始程序次序依次退出。(对于CISC型计算机结构,当所有组成复杂指令的微指令都退出后才表示复杂指令已经退出。)
对于需要将其结果写入存储器存储单元中的指令而言,数据高速缓存106(存储器分级体系中的一部分)在指令退出的同时进行更新。而对于需要将其结果写入逻辑寄存器的指令而言,因为没有寄存器专用作逻辑寄存器,因此退出时无需进行写操作。(物理寄存器文件212中有物理寄存器中退出指令的执行结果,指令被重命名时目的逻辑寄存器被映射到该物理寄存器上。)
调度程序218将指令调入执行单元220中执行。为了简便起见,仅存储器执行单元224在执行单元220中被明确地指出。装入指令或存储指令被调度程序218分派给AGU(地址生成单元)222用于计算线性地址,存储器执行单元224再将线性地址转换为物理地址并执行装入指令或存储指令。存储器执行单元可将数据发送给前向缓冲器(未表示出来)而不是数据高速缓存106,或者存储器执行单元从前向缓冲器中接收数据,前向缓冲器所存储的对象在指令退出后最终被写入到数据高速缓存106中。调度程序218所执行的调度功能可由(例如)执行Tomasulo逻辑(或其它逻辑)的保存站或记分板实现。执行单元220依据所执行的指令从寄存器文件212中检索数据或是把数据发送给寄存器文件212。
在本发明的其它实施例中,物理寄存器字段212的数据结构中包含的信息内容和指令窗口缓冲器216分别由不同的功能单元识别。例如,重排序缓冲器可以代替指令窗口缓冲器216和物理寄存器文件212,将结果存储到重排序缓冲器中。另外,寄存器文件中的寄存器专用作逻辑寄存器。对于这种类型的实施例,写到逻辑寄存器上的指令执行结果在指令退出后要被写到逻辑寄存器上。
在多数现代计算机系统中,微处理器通过生成一个线性地址访问某个存储器存储单元,但是要通过在地址总线(图1中的总线114)上提供对象的物理地址才能从指定的存储器存储单元上检索该对象。线性地址可能与物理地址相同,在这种情况下不需要进行地址转换。然而,通常在进行线性地址向物理地址转换时都要使用虚拟存储器方案。这种情况下线性地址也被称为虚拟地址。线性地址空间是微处理器生成的所有线性地址的集合,而物理地址空间则是所有物理地址的集合。
对于某些微处理器结构,例如Intel计算机系统的32位微处理器(IA32)(Intel是加州Santa Clara地区的Intel公司注册的商标),还有其它的地址转换类型,实现逻辑地址向线性地址的转换。对于这些类型的计算机系统结构,指令提供逻辑地址的位移量,这些位移量被图2中AGU222转换成线性地址。这种地址转换的附加阶段提供了附加的安全性,即使应用程序代码不能修改高级(操作系统)代码。
图3中说明的是逻辑地址到线性地址上的映射。逻辑地址包括段选择符302a和位移量304。段选择符302a被存储在段寄存器302中,该寄存器中包括了描述符高速缓存302b。段选择符302a指向描述符表306中的段描述符308。描述符表306提供的段描述符被存储在存储器中。段描述符提供段的基地址,正如312上表示的求和一样,位移量加上段描述符提供的基地址就得到了线性地址。除了提供基地址外,段描述符中还包含了各种各样的其它类型信息,如存取权限以及段大小等。基地址、存取权限、段大小和其它信息都被高速缓存在描述符高速缓存302b上。
虚拟存储器或请求分页式存储器系统可以解释为线性地址(虚拟)空间和物理地址空间之间的映射,如图4所示。在虚拟存储器系统中,线性地址空间和物理地址空间都被分隔成连续地址块,如果这些地址块的长度是常数或是任意几种固定的长度,那么它们被称为页。例如,一张典型的页的大小为4K字节。
图4中所示的映射说明了一种普通的两级分层映射,其中包括目录表和页面表。页面目录表和页面表都被存储在物理存储器中,通常它们的大小等于页的大小。页面目录表(PDE)指向物理存储器中的页面表,页面表条目(PTE)指向物理地址中的页。对于图4所示的两级分层映射,线性地址包括目录域402、表域404和偏移域406。目录域是相对PDE的位移量,表域是相对PTE的位移量,位移量域是相对页中存储器存储单元的位移量。
在图4中,页面目录基址寄存器(PDBR)408指向页面目录410的基地址,存储在目录域402中的值加上存储在PDBR 408中的值就可以得到页面目录410中PDE 412的物理地址。然后,PDE 412指向页面表414的基地址,该地址加到表域404存储的值上后得到的值指向页面表414中的PTE 416。PTE 416指向页418的基地址,该页的基地址加上位移量域406所存储的值就得到了物理地址420。从而,线性地址422被映射到物理地址420上。
存储在页面目录和页面表中的存取条目请求存储器总线进行事务处理,按处理器循环时间算这种请求操作的代价很昂贵。然而,由于局部性准则的存在,通过存储线性地址与被称为事务处理后备缓冲器(TLB)的高速缓存中的物理地址之间的目前映射关系,存储器总线的事务处理次数可以减少。对于指令地址和数据地址的TLB可能是分开的。TLB中的条目被线性地址索引,找到后TLB中的命中提供与线性地址相关的物理地址。如果出现丢失,存储器分级体系如图4(页面走道)中指出的那样被访问,以便获取线性地址向物理地址的转换。
某些IA32微处理器使用几种线性地址向物理地址转换的模式,这里我们考虑三种模式,分别称它们为模式A、B、C。模式A支持32位物理地址空间、4KB大小的页面。模式B支持32位物理地址空间、4KM或4MB大小的页面。对于模式A和模式B,页面和目录表条目都是4字节的。模式C支持物理地址大小为64GB(物理扩展地址)的36位物理地址空间、4KB或2MB大小的页面。对于模式C,页面和目录表条目都是8字节的。对于每种模式,页面和目录表的大小都等于页面的大小。所有模式都用于转换32位线性地址。
模式A在图5中进行说明。线性地址的前12位被用作相对页面帧内物理地址的位移量,线性地址中的下10位被用作进入页面表的位移量,线性地址中的最高10位用作相对页面目录的位移量。例如,在图5中,线性地址的表域506指向页面表504中的PTE502,PTE502提供物理地址中的期望页面帧的地址,将该地址与线性地址的位移量508合并在一起就得到了想要对象的物理地址。PDBR寄存器、页面目录条目和页面表条目每个提供32位地址的前20位,以致页面目录和页面表、页面每个被迫调整在4KB范围内。
用于4MB大小页的模式B在图6中说明。(对于4KB大小的页,模式B与模式A类似。)线性地址的前22位提供进入物理4MB页面帧的位移量,线性地址的最高10位提供进入页面表的位移量。注意4MB页使用的模式B只需要一级地址转换。图6页面目录中的PDE提供32位地址的高10位,迫使页面大小调整在4MB范围内。
用于4KB大小页的模式C在图7中说明。这里包括由页面目录指针表(PDPT)702提供的第三级地址转换。PDPT 702中有四个条目,各条目都是8字节的。PDBR 704提供32位地址中的高27位,此32位地址指向PDPT的基地址,迫使PDPT调整在32字节的范围上。PDPT、页面目录和页面表中的各条目都提供36位地址的高24位,以致页面目录、页面表以及页面都被迫调整在4KB范围上。
用于2MB大小页的模式C在图8中说明。这里只需要两级地址转换,但也使用了四个条目PDPT指向页面目录。页面目录中的条目都提供36位地址的高15位,以致页面被迫调整在2MB的范围上。
在图7和图8中说明的模式C用的页面结构允许被同时编址的64GB扩展地址空间高达4GB。为了寻址其它各部分4GB扩展地址空间,在PDBR寄存器中设置了指向不同PDPT的不同条目,或者可更改PDPT中的条目。IA32计算机结构中地址转换的其它详细情况可在PentiumPro的Intel计算机结构开发手册第三卷中查到,该手册可从Intel公司获得。(PentiumPro是Intel公司的注册商标。)
增加微处理器的线性地址空间可以提供更大的用户空间和系统空间,减少大型物理地址空间的线性地址扩展带来的负担。增加微处理器的字型尺寸,例如从32位增加到64位时,可以提供更大的线性地址空间,这也是工程设计的主要任务。因此增加现有微处理器的线性地址空间而不增加其上的字型尺寸具有经济实用价值。而且有利于使扩大了线性地址空间的微处理器具有逆向相容性,能与为原始大小的线性地址空间设计的代码相容,支持分页结构。概述
本发明的实施例的目的是为计算机或微处理器提供扩展线性地址空间。在一种实施例中,生成扩展线性地址时其低位部分是在位移量和段选择符的基础上得到的,而高位部分是在段扩展基础上得到的。在另一种实施例中,线性地址是通过将存储在两个寄存器中的值衔接在一起生成的。其它实施例中提供的线性地址向物理地址的转换是通过访问页面目录实现的,因而转换等级与是否存在着线性地址扩展有关。附图简述
图1提供了现有技术下计算机系统的框图。
图2提供了现有技术下微处理器的框图。
图3提供了现有技术下逻辑地址向线性地址转换的说明。
图4提供了现有技术下线性地址向物理地址转换的说明。
图5提供了现有技术下以4KB分页将32位线性地址向32位物理地址转换的说明。
图6提供了现有技术下以4MB分页将32位线性地址向32位物理地址转换的说明。
图7提供了现有技术下以4KB分页将32位线性地址向36位物理地址转换的说明。
图8提供了现有技术下以2MB分页将32位线性地址向36位物理地址转换的说明。
图9提供的是用于提供扩展线性地址的一个典型实施例。
图10提供的是用于提供扩展线性地址的另一个典型实施例。
图10a提供的是图10的典型实施方案。
图11提供了以4KB分页、4字节条目将42位线性地址向36位物理地址转换的典型实施例。
图12提供了以4MB分页、4字节条目将42位线性地址向36位物理地址转换的典型实施例。
图13提供了以4KB分页、8字节条目将42位线性地址向36位物理地址转换的典型实施例。
图14提供了以2MB分页、8字节条目将42位线性地址向36位物理地址转换的典型实施例。实施例的详细说明
本发明的实施例提供了一类具有逆向相容性的扩展线性地址空间,用一个或多个操作码指出何时扩展线性地址可被使用。在一种实施例中,操作码指出是否微处理器寄存器中的LAE位(线性地址扩展)位被设置。如果LAE位被设置过,AGU222就将逻辑地址转换成扩展线性地址。
图9说明的实施例用于将逻辑地址转换成扩展线性地址。段寄存器902被扩展得超出了其选择段描述符时的需要,如图9所示。用段选择符904指定的段寄存器902中的一部分被用于选择描述符表906和段描述符908,以提供前面曾讨论过的基地址。位移寄存器910中的位移量值加上基地址就得到了扩展线性地址的低位部分,用912表示。段寄存器902中的另一部分不能用于选择段扩展914指定的段描述符908,而只构成了扩展线性地址的高位部分,用926表示。当914被加到线性地址的低位部分912上时或将914、912衔接到一起时就可以获得扩展线性地址。
在另一实施例中,指令通过它们的资源寄存器提供扩展线性地址,其中的扩展线性地址通过将存储在资源寄存器上的值衔接到一起得到。例如,用于在存储器中实现装入、存储、加以及更换对象操作的新指令被引入到指令集中,这些新指令被译码器206译码成一个或多个微指令,这些微指令通过其操作码中的资源寄存器明确指定一个扩展线性地址。
这一过程在图10的流程图中被说明。在步骤1002中,由被译码的指令命名的资源寄存器中的值都被衔接到一起形成扩展线性地址,只要被译码的指令属于在扩展线性地址空间内操作的指令集。在步骤1004中,当被译码的指令在原始线性地址空间内操作时,将由指令提供的位移量加到由段操作数提供的基地址上就可以获得线性地址。
图10a提供了图10的实现方法。多路复用器1006、1008和1010根据是否存在扩展线性地址的微指令来选择它们的输入(即是否LAEuop线被插入)。如果LAEuop线没有被插入,多路复用器1006和1008分别向AGU222提供即时指令队列和段基地址,以便线性地址可以按传统的方式被计算出来。但是如果LAEuop被插入,那么多路复用器1010将寄存器R1和R2中的内容衔接在一起,以获得扩展线性地址。
一旦生成了扩展线性地址,它就被转换成物理线性地址。本发明的实施例通过将附加等级的转换引入到地址转换分级体系中提供了这种地址转换方式。其中的附加转换等级是有条件使用的,即要求扩展线性地址被指示。
图11说明了以4KB分页进行扩展线性地址转换的实施例。在图11的详细实例中,扩展线性地址是42位的,其中的最高10位用作进入页面目录1102的位移量。页面目录1102的基地址由PDBR1104提供。Mux(多路复用器)1106在图11中被象征性地用于指出是否扩展线性地址已被指示,然后页面目录1102提供的PDE被用作下一个低级地址转换的基地址,也就是页面目录1108中的基地址。例如,如果LAE位被设置或者线性地址中的高10位不全都为零,那么表示扩展线性地址被指示。如果不支持扩展线性地址,那么图中多路复用器1106就象征性地指出PDBR 1104被用于指向页面目录1108的基地址。目录和页面表各条目均是4字节的。PTE 1110提供36位物理地址中的高24位,将其与偏移1112中的12位衔接在一起就提供了36位地址。物理地址空间是64GB。
4MB分页系统中扩展线性地址转换的实施例在图12中说明。页面目录1202根据是否扩展线性地址被指定的条件提供附加的地址转换等级。因为页大小的限制,只有两级页面目录被用于将扩展线性地址转换成物理地址。图12中页面目录的各条目都是4字节的,物理地址空间则是64GB。
在64GB扩展物理地址空间中以4KB分页扩展线性地址转换的一种实施例在图13中说明。与图7中的模式C一样,当扩展线性地址转换未被指示时,PDBR 1302被用于指向PDPT 1304的基地址,它通常被保存在高速缓存中。为了支持扩展线性地址转换,PDBR 1302被用于指向页面目录1306的基地址,扩展线性地址中的地址位30到38(Addr[38:30])提供进入页面目录1306的位移量。请注意页面目录1306中的前四个条目也被高速缓存到PDPT 1304中。图13中的目录和页面各条目都是8字节的,各目录和页面各条目的个数是29=512,因而各个目录和页面都是4KB大小的。因为只有9位用作进入页面目录1306的位移量,所以线性地址中高于位置38的位都没有被用在此实施例中。因而,如果线性地址寄存器是42位的,那么在为42位线性地址提供扩展地址转换时要将最高的三位设置为0。
在64GB的扩展物理地址空间内以2MB分页实现扩展线性地址转换的实施例在图14中说明,其解释是不言自明的。图14中页面目录的各条目都是8字节的,因而像图13中一样高于位置38的线性地址位都是零。
在不背离下面所列的发明权利要求范围的情况下可以对这里公开的实施例实行各种各样的修改。