对页表遍历的冗余进行检测的处理器

文档序号:1242434 发布日期:2020-08-18 浏览:9次 >En<

阅读说明:本技术 对页表遍历的冗余进行检测的处理器 (Processor for detecting redundancy of page table traversal ) 是由 朴城范 赛义德·穆因 崔周熙 于 2019-11-12 设计创作,主要内容包括:处理器包括存储地址转换信息的页表遍历缓存器,以及页表遍历器。页表遍历器通过查找地址转换信息和页表的至少一部分来获取由第一输入地址的第一索引指示的第一输出地址,并且将第二输入地址的第二索引和第一输入地址的第一索引之间的匹配级别与使用第二索引来查找页表遍历缓存器而获得的遍历缓存命中级别进行比较。(The processor includes a page table walk buffer that stores address translation information, and a page table walker. The page table walker retrieves a first output address indicated by a first index of a first input address by looking up address translation information and at least a portion of the page table, and compares a level of match between a second index of a second input address and the first index of the first input address to a traversal cache hit level obtained by using the second index to walk the page table traversal cache.)

对页表遍历的冗余进行检测的处理器

相关申请的交叉引用

本专利申请要求于2019年2月8日向美国专利商标局提交的美国临时专利申请No.62/803,227的优先权,并且要求于2019年2月26日向韩国知识产权局提交的韩国专利申请No.10-2019-0022184的优先权,其公开内容以全文引用的方式并入本文。

技术领域

本公开涉及处理器,更具体地涉及被配置为检测页表遍历的冗余的处理器。

背景技术

片上系统(以下称为“SoC”)是其中集成了电子系统的多个组件或多个知识产权(IP)的集成电路。术语“知识产权”和首字母缩写“IP”都是指独特的电路和电路组件,每一个电路和组件可以分别受到知识产权保护。当在本文的描述中使用时,该术语和首字母缩写可以与类似术语同义,比如“IP块”或“IP电路”。SoC的处理器可以执行用户想要的多个应用程序,并且为此,处理器可以与存储设备交换数据。然而,由于用户想要快速且同时地执行多个应用程序,因此处理器必须高效地使用有限的存储设备资源。处理器可以使用虚拟存储空间,并且可以通过包括虚拟存储空间与存储设备的物理存储空间之间的映射信息的功能来管理页表。处理器可以查找页表并且可以执行虚拟存储空间的虚拟地址与物理存储空间的物理地址之间的转换。

发明内容

本公开的实施例提供了一种对页表遍历的冗余进行检测的处理器。

根据示例性实施例,处理器包括页表遍历缓存器和页表遍历器。页表遍历缓存器存储地址转换信息。页表遍历器通过查找地址转换信息和页表中的至少一部分来获取由第一输入地址的第一索引指示的第一输出地址。页表遍历器还将匹配级别与遍历缓存命中级别进行比较。匹配级别是在第二输入地址的第二索引和第一输入地址的第一索引之间的。通过使用第二索引查找页表遍历缓存器来获得遍历缓存命中级别。

根据另一示例性实施例,处理器包括页表遍历缓存器和页表遍历器。页表遍历缓存器存储地址转换信息。页表遍历器通过查找地址转换信息和第一阶段的第一页表中的至少一部分来获取由第一输入地址的第一索引指示的第一中间地址。页表遍历器还通过查找地址转换信息和第二阶段的第二页表中的至少一部分来获取由每一个第一中间地址的第二索引指示的第一输出地址。页表遍历器还将匹配级别与遍历缓存命中级别进行比较。匹配级别是在由第二输入地址的第三索引指示的每一个第二中间地址的第四索引与每一个第一中间地址的第二索引之间的。通过使用第四索引查找页表遍历缓存器来获得遍历缓存命中级别。

根据又一示例性实施例,处理器包括页表遍历缓存器和页表遍历器。页表遍历缓存器存储地址转换信息。页表遍历器通过查找地址转换信息和第一阶段的第一页表中的至少一部分来获取由第一输入地址的第一索引指示的第一中间地址。页表遍历器还通过查找地址转换信息和第二阶段的第二页表中的至少一部分来获取由每一个第一中间地址的第二索引指示的第一输出地址。页表遍历器还将第一匹配级别与第一遍历缓存命中级别进行比较。第一匹配级别是在第二输入地址的第三索引与第一输入地址的第一索引之间的。通过使用第三索引查找页表遍历缓存器来获得第一遍历缓存命中级别。页表遍历器还将第二匹配级别与第二遍历缓存命中级别进行比较。第二匹配级别是在由第二输入地址的第三索引指示的每一个第二中间地址的第四索引与每一个第一中间地址的第二索引之间的。通过使用第四索引查找页表遍历缓存器来获得第二遍历缓存命中级别。

附图说明

图1示出了根据本公开实施例的电子装置的框图。

图2示出了图1的SoC中的第一核至第四核中的任意一个核的框图。

图3示出了主存储器和图1的SoC可执行的应用程序及操作系统。

图4示出了图3的应用程序的虚拟地址空间与物理地址空间之间的映射。

图5示出了图2的页表遍历器执行页表遍历的操作。

图6示出了主存储器和图1的SoC可执行的应用程序及操作系统。

图7示出了图6的应用程序的虚拟地址空间与物理地址空间之间的映射。

图8A和图8B示出了图2的页表遍历器基于第一阶段和第二阶段来执行页表遍历的操作的流程图。

图9示出了图2的页表遍历器的详细框图和操作。

图10示出了图2的页表遍历器的另一详细框图和操作。

图11示出了图2的页表遍历器的另一详细框图和操作。

图12示出了图2的页表遍历器的另一详细框图和操作。

图13示出了图2的页表遍历器执行将虚拟地址转换为物理地址的页表遍历的流程图。

图14A和图14B示出了图2的页表遍历器执行用于将虚拟地址转换为中间物理地址的第一阶段的页表遍历和用于将中间物理地址转换为物理地址的第二阶段的页表遍历的操作的流程图。

具体实施方式

图1示出了根据本公开实施例的电子装置的框图。电子装置100可以包括SoC 1000(片上系统)和主存储器2000。电子装置100也可以被称为“电子系统”。例如,电子装置100可以是台式计算机、笔记本电脑、工作站、服务器、移动装置等。SoC 1000可以是其中集成了各种(多个不同)系统的一个芯片,比如在单个集成基板上和/或比如集成壳体内。

SoC 1000可以作为应用处理器(AP)来控制电子装置100的整体操作。SoC 1000可以包括第一核1100_1至第四核1100_4(每一个核也可以被称为“处理器”或“中央处理单元(CPU)”)、缓存存储器1300和总线1400。尽管未在附图中示出,但是SoC 1000还可以包括任意其他知识产权(IP),比如存储控制器。第一核1100_1至第四核1100_4中的每一个可以执行各种软件,比如应用程序、操作系统和/或设备驱动程序。图1的第一核1100_1至第四核1100_4的数量仅是示例,并且SoC 1000可以包括一个或多个同质或异质核。

第一核1100_1至第四核1100_4可以分别包括第一MMU 1200_1(存储器管理单元)至第四MMU 1200_4。第一MMU 1200_1至第四MMU 1200_4可以将使用的虚拟地址转换成硬件存储设备中使用的物理地址,比如SoC 1000中的缓存存储器1300、SoC 1000外部的主存储器2000,和/或SoC 1000外部的辅助存储器(未示出)。当第一核1100_1至第四核1100_4分别执行第一软件至第四软件时,第一MMU 1200_1至第四MMU 1200_4可以将虚拟地址转换为物理地址。第一MMU 1200_1至第四MMU 1200_4可以管理虚拟地址与物理地址之间的地址转换信息(例如,转换表)。第一MMU 1200_1至第四MMU 1200_4可以允许应用程序具有私有(专用)虚拟存储空间,并且可以允许第一核1100_1至第四核1100_4执行多个任务。

缓存存储器1300可以分别连接到第一核1100_1到第四核1100_4,并且可以由第一核1100_1到第四核1100_4共享。例如,缓存存储器1300可以通过使用寄存器、触发器、静态随机存取存储器(SRAM)或其组合来实现。对于第一核1100_1至第四核1100_4,缓存存储器1300可以具有比主存储器2000快的访问速度。缓存存储器1300可以存储第一核1100_1至第四核1100_4的或与第一核1100_1至第四核1100_4相关联的指令、数据、地址、地址转换信息等。

总线1400可以连接SoC 1000的内部IP,比如核1100_1至1100_4、缓存存储器1300等,或者可以向SoC 1000的内部IP提供对主存储器2000的访问路径。总线1400可以是AMBA(高级微控制器总线架构)标准总线协议类型。AMBA的总线类型可以是AHB(高级高性能总线)、APB(高级外围总线)或AXI(高级可扩展接口)。

主存储器2000可以与SoC 1000通信。主存储器2000可以向第一核1100_1至第四核1100_4提供比缓存存储器1300大的容量。主存储器2000可以存储从SoC 1000提供的指令、数据、地址、地址转换信息等。例如,主存储器2000可以是动态随机存取存储器(DRAM)。在实施例中,电子装置100除主存储器2000之外还可以包括与SoC1000通信的任意其他硬件存储设备(未示出),比如固态驱动器(SSD)、硬盘驱动器(HDD)或存储卡。

图2示出了图1的SoC中的第一核至第四核中的任意一个核的框图。核1100可以是图1的第一核1100_1至第四核1100_4中的任意一个核。核1100可以包括获取单元1110、解码单元1120、寄存器重命名单元1130、发出/收回单元1140、ALU 1150(算术逻辑单元)、FPU1160(浮点单元)、分支检查单元1170、加载/存储单元1180、L2缓存1190和MMU 1200。核1100的所有组件(包括MMU 1200的详细组件)可以通过使用模拟电路、数字电路、逻辑电路、时钟电路、触发器、寄存器等用硬件来实现。

获取单元1110可以参考程序计数器中存储的存储器地址来获取指令,并将获取的指令存储在指令寄存器(未示出)中,程序计数器(未示出)追踪指令的存储器地址。例如,可以将指令存储在诸如核1100中的缓存存储器(未示出)、缓存存储器1300或主存储器2000等的存储器中。解码单元1120可以对存储在指令寄存器中的指令进行解码,并且可以确定要执行什么指令以使得指令被执行。寄存器重命名单元1130可以将由指令指定的逻辑寄存器映射到核1100中的物理寄存器。寄存器重命名单元1130可以将由连续指令指定的逻辑寄存器映射到不同的物理寄存器,并且可以去除指令之间的依赖性。发出/收回单元1140可以控制何时向流水线发出(或发送)解码的指令以及何时收回返回的结果。

ALU 1150可以基于发出的指令来执行算术运算、逻辑运算或移位运算。可以从存储器向ALU 1150提供操作所需的操作代码、操作数等。FPU 1160可以执行浮点运算。分支检查单元1170可以检查对分支指令的分支方向的预测,以改善流水线的流程。加载/存储单元1180可以执行加载和存储指令,可以生成在加载和存储操作中使用的虚拟地址,并且可以从L2缓存1190、缓存存储器1300或主存储器2000加载数据,或者可以将数据存储在L2缓存1190、缓存存储器1300或主存储器2000中。

MMU是诸如核1100的核的组件。MMU 1200可以是图1的第一MMU 1200_1至第四MMU1200_4中的任意一个MMU。MMU 1200可以包括TLB 1210(转换后备缓冲器)、页表遍历器1220、页表遍历缓存器1230、TTBR 1241(转换表基址寄存器)和VTTBR 1242(虚拟转换表基址寄存器)。以下描述页表遍历器1220,并且可以将其实现为类似于核1100的其他单元的单元。页表遍历器1220可以被实现为或包括执行逻辑操作的单元,逻辑操作包括由核1100获取或发起获取的操作、以及由核1100比较或发起比较的操作。可以将最近访问的页转换缓存在TLB 1210中。对于由核1100执行的每一次存储器访问,MMU 1200可以检查TLB中是否缓存有给定虚拟地址的转换。在TLB 1210中可以存储多个条目,每个条目被划分成标签和数据。例如,虚拟地址的信息可以位于标签中,并且物理地址的信息可以位于数据中。在TLB1210中缓存有虚拟地址的转换(映射信息)的情况下(在TLB命中的情况下),转换可以是立即可用的。在TLB 1210中不存在虚拟地址的有效转换的情况下(在TLB未命中的情况下),应该通过页表遍历在TLB 1210中更新虚拟地址的转换,所述页表遍历涉及搜索存储在缓存存储器1300中和/或主存储器2000中的页表。页表可以是存储虚拟地址与物理地址之间的映射的数据结构。

页表遍历器1220可以针对未从TLB 1210中找到或查找到的虚拟地址执行页表遍历。页表遍历器1220可以“遍历”或查找页表以将虚拟地址转换为物理地址。页表遍历器1220可以从存储在缓存存储器1300或主存储器2000中的页表中获取关于虚拟地址的地址转换信息。

页表遍历缓存器1230可以缓存或存储虚拟地址的部分或完整的地址转换信息。例如,可以分级地来构建页表。页表遍历器1220可以按顺序(顺序地)访问或查找页表,可以从页表中获取部分地址转换信息,并且可以将获取的信息存储在页表遍历缓存器1230中。而且,页表遍历器1220可以通过查找先前(已经)缓存在页表遍历缓存器1230中的部分地址转换信息,来跳过对存储在缓存存储器1300或主存储器2000中的一些页表的访问或查找,并且可以加速页表遍历。

TTBR 1241可以存储指示页表的基地址。VTTBR 1242也可以存储指示页表的基地址。存储在TTBR 1241和VTTBR 1242中的基地址的值可以随核1100可执行的软件(例如,应用程序、操作系统等)而变化。

图3示出了主存储器和图1的SoC可执行的应用程序及操作系统。图4示出了图3的应用程序的虚拟地址空间与物理地址空间之间的映射。将一起描述图3和图4。

参考图3,操作系统可以管理包括SoC 1000和主存储器2000的硬件以及包括应用程序AP1和/或应用程序AP2的软件。操作系统可以操作以允许在SoC 1000和主存储器2000上执行应用程序AP1和/或应用程序AP2。图3中示出的应用程序AP1和应用程序AP2的数量仅是示例。参考图4,当执行第一应用程序AP1时,操作系统可以将进程的虚拟地址空间映射到物理地址空间。当执行第二应用程序AP2时,操作系统可以将进程的虚拟地址空间映射到物理地址空间。操作系统可以通过管理上述映射来有效地使用安装在硬件上的存储器的有限容量。

图5示出了图2的页表遍历器执行页表遍历的操作。页表遍历器1220可以从加载/存储单元1180接收虚拟地址。页表遍历器1220接收的虚拟地址可以是在TLB 1210中查找的地址(即,TLB未命中地址)。可以将虚拟地址的多比特(例如,K比特,其中“K”是自然数)部分划分为L0索引、L1索引、L2索引、L3索引和偏移区。可以根据级别L0至L3来划分虚拟地址的索引。而且,可以根据级别L0至L3来划分或分级构建页表。因此,索引可以反映各自具有不同权重的多比特部分的片段,并且可以按照与虚拟地址的多比特部分的片段的权重相对应地构建的分级来排列页表。在图5中,级别的数量、索引的数量和页表的数量仅是示例。页表遍历器1220可以顺序地查找根据级别L0至L3分级构建的页表。关于搜索顺序,“L0”可以是第一级别,“L3”可以是最末级别。

首先,页表遍历器1220可以从存储在TTBR 1241中的基地址所指示的L0页表的条目中查找由虚拟地址的L0索引指示的条目。L0页表可以由L0索引来进行索引。存储在每一个条目中的描述符可以包括属性和输出地址(由深色阴影来标示)。例如,属性可以包括与输出地址相关联的许可比特、访问比特、脏比特、安全比特等。页表遍历器1220可以获取包括在虚拟地址的L0索引所指示的条目中的描述符,并且可以在页表遍历缓存器1230中存储或更新描述符的部分信息(即,关于虚拟地址的L0索引的部分地址转换信息)。

页表遍历器1220可以在从L0页表获取的描述符的L0输出地址所指示的L1页表的条目之中查找由虚拟地址的L1索引指示的条目。换言之,页表遍历器1220可以在基于从L0页表获取的描述符的L0输出地址而指示的L1页表的条目之中查找由虚拟地址的L1索引指示的条目。页表遍历器1220可以获取包括在由虚拟地址的L1索引指示的条目中的描述符,并且可以在页表遍历缓存器1230中存储或更新该描述符的部分信息(即,关于虚拟地址的L1索引的部分地址转换信息)。

页表遍历器1220可以在从L1页表获取的描述符的L1输出地址所指示的L2页表的条目之中查找由虚拟地址的L2索引指示的条目。换言之,页表遍历器1220可以在基于从L1页表获取的描述符的L1输出地址而指示的L2页表的条目之中查找由虚拟地址的L2索引指示的条目。页表遍历器1220可以获取包括在由虚拟地址的L2索引指示的条目中的描述符,并且可以在页表遍历缓存器1230中存储或更新该描述符的部分信息(即,关于虚拟地址的L2索引的部分地址转换信息)。

页表遍历器1220可以在从L2页表获取的描述符的L2输出地址所指示的L3页表的条目之中查找由虚拟地址的L3索引指示的条目。换言之,页表遍历器1220可以在基于从L2页表获取的描述符的L2输出地址而指示的L3页表的条目之中查找虚拟地址的L3索引指示的条目。页表遍历器1220可以获取包括在由虚拟地址的L3索引指示的条目中的描述符,并且可以在页表遍历缓存器1230中存储或更新该描述符的部分信息(即,关于虚拟地址的L3索引的部分地址转换信息)。而且,因为对应于L3索引和L3页表的级别是最末级别,所以页表遍历器1220还可以将该描述符存储在TLB 1210中。

MMU 1200可以在从L3页表获取的描述符的L3输出地址所指示的页之中查找由虚拟地址的偏移指示的页,并且可以计算最终物理地址(例如,最终物理地址=L3输出地址+偏移)。在TLB 1210中缓存有虚拟地址与L3页表中的L3输出地址之间的映射(即,最终转换)的情况下,MMU 1200可以通过使用偏移和缓存在TLB 1210中的输出地址来立即计算最终物理地址,并且可以将最终物理地址返回到加载/存储单元1180。

在实施例中,页表遍历器1220可以针对一个虚拟地址执行页表遍历,然后可以针对另一个虚拟地址执行页表遍历。当针对一个虚拟地址执行页表遍历时,部分地址转换信息可以已存储在页表遍历缓存器1230中。在关于另一虚拟地址的一部分索引的部分地址转换信息存储在页表遍历缓存器1230中的情况下,页表遍历器1220可以跳过从特定级别获取描述符的操作。例如,在L0索引的部分地址转换信息已存储在页表遍历缓存器1230中的情况下(即,当在页表遍历缓存器中发生命中时),页表遍历器1220可以跳过查找L0页表的操作。如在L0级别的上述操作中那样,页表遍历器1220可以执行剩余的L1、L2和L3级别的操作。

图6示出了主存储器和图1的SoC可执行的应用程序及操作系统。图7示出了图6的应用程序的虚拟地址空间与物理地址空间之间的映射。将一起描述图6和图7,并且描述将集中于基于图6和图7的实施例与基于图3和图4的实施例之间的差异。

参考图6,第一操作系统可以管理包括SoC 1000和主存储器2000的硬件以及包括应用程序AP1和/或应用程序AP2的软件。第二操作系统可以管理包括SoC 1000和主存储器2000的相同硬件以及包括应用程序AP3和/或应用程序AP4的软件。在第一操作系统、第二操作系统和硬件之间可以额外存在软件层,即管理程序。管理程序可以用于通过使用有限的硬件资源来操作两个或更多操作系统。

参考图7,当执行第一应用程序AP1时,第一操作系统可以将进程的虚拟地址空间映射到中间物理地址空间。当执行第二应用程序AP2时,第一操作系统还可以将进程的虚拟地址空间映射到中间物理地址空间。类似地,当执行第三应用程序AP3时,第二操作系统可以将进程的虚拟地址空间映射到中间物理地址空间。当执行第四应用程序AP4时,第二操作系统还可以将进程的虚拟地址空间映射到中间物理地址空间。第一操作系统和第二操作系统中的每一个操作系统可以管理虚拟地址与中间物理地址之间的第一阶段的地址转换。管理程序可以管理中间物理地址与物理地址之间的第二阶段的地址转换。与图4的情况相比,在计算机系统中使用的管理程序提供了用于第二阶段的地址转换和上述其他特征的能力。

图8A和图8B示出了图2的页表遍历器基于第一阶段和第二阶段来执行页表遍历的操作的流程图。将一起描述图8A和图8B。在图8A和图8B中,“S”、“L”和“PT”分别表示阶段、级别和页表。页表遍历器1220可以从加载/存储单元1180接收从TLB 1210中查找的虚拟地址。可以根据级别L0至L3来划分虚拟地址的索引。可以将页表划分为第一阶段S1和第二阶段S2,并且可以在每一个阶段中根据级别L0至L3来划分或分级构建页表。如参考图6和图7所述,管理程序可以用于虚拟化。页表遍历器1220可以通过将存储在TTBR 1241中的基地址和虚拟地址的L0索引相加来计算S1L0中间物理地址(IPA)(也被称为“中间地址”)。

页表遍历器1220可以从存储在VTTBR 1242中的基地址所指示的S2L0页表的条目之中查找由S1L0中间物理地址的L0索引指示的条目,可以获取包括在该条目中的描述符,并且可以将描述符的部分信息(即,关于S1L0中间物理地址的L0索引的部分地址转换信息)存储在页表遍历缓存器1230中。页表遍历器1220可以从S2L0输出地址所指示的S2L1页表的条目之中查找由S1L0中间物理地址的L1索引指示的条目,可以获取包括在该条目中的描述符,并且可以将描述符的部分信息(即,关于S1L0中间物理地址的L1索引的部分地址转换信息)存储在页表遍历缓存器1230中。如在与S2L1页表相关联的操作中那样,页表遍历器1220可以执行与S2L1和S2L2输出地址分别指示的S2L2和S2L3页表相关联的操作。页表遍历器1220可以在从S2L3页表获取的描述符的S2L3输出地址所指示的S1L0页表的条目之中查找由S1L0中间物理地址的偏移指示的条目,可以获取包括在该条目中的描述符,并且可以将描述符的部分信息(即,关于S1L0中间物理地址的偏移的部分地址转换信息)存储在页表遍历缓存器1230中。

页表遍历器1220可以通过将从S1L0页表获取的S1L0输出地址和虚拟地址的L1索引相加来计算S1L1中间物理地址。如对S1L0中间物理地址执行的第二阶段的页表遍历中那样,页表遍历器1220可以对S1L1中间物理地址执行第二阶段的页表遍历。如对S1L1中间物理地址执行的第二阶段的页表遍历中那样,页表遍历器1220可以分别对S1L2中间物理地址、S1L3中间物理地址和最终中间物理地址执行第二阶段的页表遍历。第二阶段的页表遍历指示查找S2L0至S2L3页表和获取描述符的操作,并且第一阶段的页表遍历指示查找S1L0至S1L3页表和获取描述符的操作。

页表遍历器1220可以通过将存储在TTBR 1241中的基地址和虚拟地址的L0索引相加来计算S1L0中间物理地址,并且可以对S1L0中间物理地址执行第二阶段的页表遍历。页表遍历器1220还可以通过将S1L0输出地址和虚拟地址的L1索引相加来计算S1L1中间物理地址,并且可以对S1L1中间物理地址执行第二阶段的页表遍历。页表遍历器1220还可以通过将S1L1输出地址和虚拟地址的L2索引相加来计算S1L2中间物理地址,并且可以对S1L2中间物理地址执行第二阶段的页表遍历。页表遍历器1220还可以通过将S1L2输出地址和虚拟地址的L3索引相加来计算S1L3中间物理地址,并且可以对S1L3中间物理地址执行第二阶段的页表遍历。页表遍历器1220还可以通过将S1L3输出地址和虚拟地址的偏移相加来计算最终中间物理地址,并且可以对最终中间物理地址执行第二阶段的页表遍历。在对最终中间物理地址执行第二阶段的页表遍历之后,页表遍历器1220可以将最后获取的描述符存储在页表遍历缓存器1230中。而且,页表遍历器1220还可以将最后获取的描述符存储在TLB1210中作为最终结果。页表遍历器1220的上述操作可以被称为“嵌套遍历”。

MMU 1200可以在从S2L3页表获取的描述符的S2L3输出地址所指示的页之中查找由虚拟地址的偏移指示的页,并且可以从查找到的页获得物理地址(例如,最终物理地址=S2L3输出地址+偏移)。也就是说,在TLB 1210中缓存有虚拟地址和S2L3输出地址之间的映射(即,最终转换)的情况下,MMU 1200可以通过使用偏移和缓存在TLB 1210中的输出地址来立即计算物理地址,并且可以返回物理地址。

图8A和图8B中示出了每个阶段的级别数量为4以及阶段数量为2的示例,但是本公开的教导不限于此。例如,第一阶段的级别数量可以为“m”(“m”为1或更大的自然数),第二阶段的级别数量可以为“n”(“n”为1或更大的自然数)。在页表遍历器1220在TLB未命中和页表遍历高速缓存未命中的条件下执行虚拟地址的页表遍历的情况下,从页表中获取描述符的次数可以是“(m+1)X(n+1)-1”。当然,在页表遍历器1220分别执行第一阶段和第二阶段的页表遍历期间,页表遍历器1220可以参考存储在页表遍历缓存器1230中的部分地址转换信息来跳过获取描述符的操作。

图9至图11示出了图2的页表遍历器的详细框图和操作。将一起描述图9至图11。在图9至图11中,假设页表遍历器执行参考图3至图5所述的页表遍历。

页表遍历器1220可以包括页表遍历调度器1221、遍历器1223和1224、以及冗余遍历检测器1225。页表遍历器1220的所有组件可以通过使用模拟电路、数字电路、逻辑电路、时钟电路、触发器、寄存器等用硬件来实现。换言之,页表遍历器1220可以被实际标记为页表遍历器电路,无论是实现为存储和执行软件指令的处理器/存储器组合(例如,微处理器/存储器),还是实现为诸如专用集成电路的逻辑电路。页表遍历调度器1221可以接收尚未从TLB 1210中查找到的一个或多个输入地址(虚拟地址)。页表遍历调度器1221可以管理条目,每一个条目存储或包括输入地址的L0至L3索引、危险比特、危险级别比特和危险ID比特。可以将与具有输入地址的遍历请求相关联的信息输入到页表遍历调度器1221的每一个条目。

危险/重放控制器1222可以检查或识别每一个条目的危险比特、危险级别比特和危险ID比特,并且可以将存储在每一个条目中的输入地址或与具有输入地址的遍历请求相关联的信息提供给遍历器1223和1224中的任意一个遍历器。遍历器1223和1224中的每一个遍历器可以针对从页表遍历器1220提供的输入地址来执行页表遍历,并可以获取输出地址。输入地址可以是虚拟地址,并且由遍历器1223和1224中的每一个遍历器获取的每一个输出地址可以是物理地址。与图9中的图示不同,遍历器1223和1224的数量可以多于2,并且页表遍历器1220可以并行或同时执行2个或更多个页表遍历。

冗余遍历检测器1225可以计算已经确定要由遍历器1223和1224执行的页表遍历的输入地址与尚未确定是否继续执行的页表遍历的输入地址之间的匹配级别。匹配级别可以指示一个输入地址的索引和另一个输入地址的索引的匹配程度。由于匹配级别越高,输入地址之间的相似性越高,所以输入地址的各个页表遍历的执行结果可以彼此相似并且可以是重复的(或冗余的)。匹配级别也可以被称为“冗余命中级别”。可以由冗余遍历检测器1225或页表遍历调度器1221来计算匹配级别。

冗余遍历检测器1225可以管理对输入到遍历器1223和1224的输入地址进行存储或包括的条目。例如,可以在不修改的情况下将输入到页表遍历调度器1221的条目的输入地址提供给冗余遍历检测器1225的条目。冗余遍历检测器1225可以使用存储在每一个条目中的输入地址的索引来查找页表遍历缓存器1230,以获得并存储遍历缓存命中级别。遍历缓存命中级别可以用于冗余遍历检测器1225的比较(即,与输入地址的索引之间的匹配级别),以预先检测和预测输入地址的页表遍历的冗余。作为使用遍历缓存命中级别的实际意义的示例,当结果能够避免冗余时,这提高了效率,避免了不必要的功耗并避免了不必要的处理。而且,当上述遍历器1223和1224将由输入地址的索引分别指示的输出地址中的每一个存储在页表遍历缓存器1230中时,冗余遍历检测器1225可以获得并存储此时被更新的遍历缓存级别。

在由任意索引指示的描述符已经被调度为要从存储有页表的存储器中获取或已经存储在页表遍历缓存器1230中的情况下,不需要再次从存储器中获取该描述符。冗余遍历检测器1225可以将匹配级别与遍历缓存命中级别进行比较,并且可以基于比较结果来标示危险比特。冗余遍历检测器1225可以基于比较结果预先检测并预测针对输入地址的页表遍历的冗余。针对输入地址的页表遍历的冗余是指,在使用输入地址的索引之中与已经被确定要执行的另一页表遍历的输入地址的索引匹配的索引来查找页表的操作的至少一部分中存在冗余。页表遍历器1220可以执行其中不存在冗余的页表遍历,而不是其中存在冗余的页表遍历,从而提高SoC 1000的性能并降低SoC 1000的功耗。冗余遍历检测器1225可以将匹配级别与遍历缓存级别进行比较,并且可以基于比较结果清除标示的危险比特。以下将更全面地描述检测页表遍历的冗余的方法。

参考图9,假设输入地址分别被输入到页表遍历调度器1221的条目0和条目1,危险比特、危险级别比特和危险ID比特处于清除状态,并且先前执行的页表遍历的结果(即地址转换信息)存储在页表遍历缓存器1230的条目0中。条目的数量不限于图9至图11的示例。在图9至图11中,多个条目中的有效条目的有效比特可以用“Y”来标示。

页表遍历调度器1221可以将输入到条目0的输入地址IA0分配给遍历器1223(其处于等待状态),并且遍历器1223可以执行针对输入地址IA0的页表遍历。遍历器1223可以检查(或确定)是否从页表遍历缓存器1230中查找到由L0、L1、L2和L3索引0x12、0x23、0x34和0x78指示的输出地址。参考图9,由L0索引0x12指示的输出地址0x100已经存储在页表遍历缓存器1230中(在页表遍历缓存器1230中发生L0级别命中)。冗余遍历检测器1225可以使用输入地址IA0的L0、L1、L2和L3索引0x12、0x23、0x34和0x78来查找页表遍历缓存器1230,以获得或计算输入地址IA0的遍历缓存命中级别是“L0”。而且,将由L0索引0x12指示的输出地址0x100存储在页表遍历缓存器1230中时,冗余遍历检测器1225可以标示输入地址IA0的遍历缓存级别是“L0”(Y)。因为由L0索引0x12指示的输出地址0x100已经存储在页表遍历缓存器1230中,所以可以跳过从存储器获取输出地址0x100的操作。然而,因为由L1索引0x23指示的输出地址未存储在页表遍历缓存器1230中(即,在页表遍历缓存器1230中发生未命中),所以遍历器1223可以发起(启动或开始)从存储器获取由L1索引0x23指示的输出地址。

参考图10,页表遍历调度器1221可以将输入到条目1的输入地址IA1分配给遍历器1224。遍历器1224可以执行针对输入地址IA1的页表遍历。遍历器1224可以检查是否从页表遍历缓存器1230中查找到由L0、L1、L2和L3索引0x12、0x23、0x9A和0xBC指示的输出地址。参考图10,由L0索引0x12指示的输出地址0x100已经存储在页表遍历缓存器1230中。冗余遍历检测器1225可以使用L0、L1、L2和L3索引0x12、0x23、0x9A和0xBC来查找页表遍历缓存器1230,以获得或计算输入地址IA1的遍历缓存命中级别是“L0”。而且,将由L0索引0x12指示的输出地址0x100存储在页表遍历缓存器1230中时,冗余遍历检测器1225可以标示输入地址IA1的遍历缓存级别是“L0”(Y)。

因为由L0索引0x12指示的输出地址0x100已经存储在页表遍历缓存器1230中,所以可以跳过从存储器获取输出地址0x100的操作。因为由L1索引0x23指示的输出地址未存储在页表遍历缓存器1230中,所以遍历器1224可以发起从存储器获取由L1索引0x23指示的输出地址。

在所有遍历器1223和1224从存储器获取由L1索引0x23指示的输出地址的情况下,遍历器1223和1224可以获取相同的输出地址,因此遍历器1223和1224的操作可以具有冗余并且可以是重复的。因为遍历器1223首先开始从存储器获取由L1索引0x23指示的输出地址,所以遍历器1224从存储器获取由L1索引0x23指示的输出地址的操作可能是冗余的并且可能是重复的。针对输入地址IA1的页表遍历的冗余是从存储在存储器中的L1页表获取由L1索引0x23指示的输出地址的操作。因此,可以预测和/或检测将由遍历器1224执行的页表遍历的冗余以防止这种冗余。

为了检测将由遍历器1224执行的页表遍历的冗余,冗余遍历检测器1225可以以基于片段的索引或级别为单位将输入地址IA0与IA1进行比较,其中每个片段是输入虚拟地址的不同部分。索引级别的增加可以反映输入虚拟地址的粒度,并且如本文所述,当前的输入虚拟地址与现有的和/或先前的输入虚拟地址之间的匹配越高,能够避免处理中的越多冗余。输入地址IA1的L0索引0x12和L1索引0x23可以分别匹配(等于)输入地址IA0的L0索引0x12和L1索引0x23。冗余遍历检测器1225可以计算输入地址IA0和IA1之间的匹配级别是“L1”。而且,冗余遍历检测器1225可以计算与用于计算匹配级别的输入地址IA1相比而言,不同的输入地址IA0的遍历缓存命中级别为“L0”。冗余遍历检测器1225可以将输入地址IA0和输入地址IA1之间的匹配级别L1与输入地址IA1的遍历缓存命中级别L0进行比较。

因为匹配级别L1大于(或高于)遍历缓存命中级别L0,所以冗余遍历检测器1225可以标示页表遍历调度器1221的条目1的危险比特(Y)。被标示的危险比特指示输入地址IA1的匹配级别L1大于遍历缓存命中级别L0,并且指示在针对输入地址IA1的页表遍历中存在冗余。在危险比特被标示的情况下,可以取消在遍历器1224中执行针对输入地址IA1的页表遍历。取而代之,遍历器1224可以针对存储在页表遍历调度器1221中的另一条目(例如,2、3或4)中的输入地址来执行页表遍历。冗余遍历检测器1225可以防止遍历器1224的冗余使用。作为使用遍历缓存命中级别的实际意义的示例,通过这样使用遍历缓存命中级别,可以避免冗余,还可以提高效率、避免不必要的功耗并避免不必要的处理。

在以上示例中,给出了在遍历器1224执行针对输入地址IA1的页表遍历时,在标示危险比特的情况下取消页表遍历的描述。在另一实施例中,页表遍历调度器1221可首先检查输入地址IA1的危险比特是否被标示,然后可以将输入地址IA1提供给遍历器1224。在这种情况下,可以在消除了针对输入地址IA1的页表遍历的冗余之后(即,在清除了危险比特之后)执行页表遍历。

冗余遍历检测器1225可以将页表遍历调度器1221的条目1的危险级别比特标示为“1”。这里,“1”表示用于分级地构建页表的级别中的“L1”,并且仅是示例性的值。危险级别比特可以表示输入地址IA0和IA1的匹配索引的最高级别,或者可以表示输入地址IA0和IA1的匹配索引的另一级别。冗余遍历检测器1225可以将页表遍历调度器1221的条目1的危险ID标示为“0”。危险ID可以指示遍历器1223和1224中的哪一个遍历器(以上示例中是遍历器1223)针对具有与输入地址IA1的一些索引相同的索引的输入地址IA0来执行页表遍历。

参考图11,遍历器1223可以完成从存储器获取由输入地址IA0的L1索引0x23指示的输出地址0x200,并且可以将输出地址0x200存储在页表遍历缓存器1230的条目1中以填充条目1。可以在页表遍历缓存器1230中存储和更新针对输入地址IA0的L1索引0x23的部分地址转换信息。当输出地址0x200被存储在页表遍历缓存器1230的条目1中时,冗余遍历检测器1225可以将输入地址IA0和输入地址IA1的遍历缓存级别更新为“L1”。例如,遍历缓存命中级别可以被计算为如下级别:与最近获取的输出地址相对应的输入地址的索引所属的级别。因此,可以基于冗余遍历检测器1225的操作来动态地更新用于减少冗余的遍历缓存命中级别。

因为更新了输入地址IA0的遍历缓存级别L1,所以冗余遍历检测器1225可以将输入地址IA1的匹配级别L1与输入地址IA0的遍历缓存级别L1进行比较。因为匹配级别L1不大于(即,等于)遍历缓存命中级别L1,所以冗余遍历检测器1225可以清除包括页表遍历调度器1221的输入地址IA1的条目1的危险比特、危险级别比特和危险TD。

当条目1的危险比特被清除时,页表遍历调度器1221的危险/重放控制器1222可以再次向遍历器1224提供输入地址IA1。遍历器1224可以在页表遍历缓存器1230中查找由L0索引和L1索引指示的输出地址0x100和0x200,然后可以开始从存储器获取由L2索引指示的输出地址。遍历器1224可以重放或重新执行输入地址IA1的页表遍历。

当在页表遍历缓存器1230中发生关于L0索引的命中时,跳过L0页表的查找并执行剩余的L1至L3页表的查找。遍历器1223通过查找存储在页表遍历缓存器1230中的地址转换信息(输出地址0x100)和页表的至少一部分,来获取由输入地址IA0的索引指示的输出地址。当遍历器1223获取输出地址时,冗余遍历检测器1225可以将输入地址IA0和输入地址IA1之间的匹配级别与输入地址IA1的遍历缓存命中级别进行比较,并且可以检测针对输入地址IA1的页表遍历的冗余。页表遍历调度器1221不能向遍历器1223和1224提供输入地址IA1,直到冗余遍历检测器1225清除输入地址IA1的危险比特为止。

图12示出了图2的页表遍历器的详细框图和由页表遍历器管理的条目。在图12中,假设页表遍历器执行参照图6至图8B所述的第一阶段的页表遍历和第二阶段的页表遍历。描述将集中在基于图12的实施例与基于图9至图11的实施例之间的差异。

页表遍历器1220可以包括冗余遍历检测器1225作为第一冗余遍历检测器,并包括第二冗余遍历检测器1226。作为第一冗余遍历检测器的冗余遍历检测器1225可以与用于将虚拟地址转换为中间物理地址的第一阶段的页表遍历相关联。第二冗余遍历检测器1226可以与用于将中间物理地址转换为物理地址的第二阶段的页表遍历相关联。

如参照图9至图11所述的冗余遍历检测器1225那样,第一冗余遍历检测器可以检测第一阶段的页表遍历的冗余。作为第一冗余遍历检测器的冗余遍历检测器1225可以将诸如当前输入地址的输入地址(虚拟地址)和诸如先前输入地址的另一输入地址之间的第一匹配级别与通过使用输入地址的索引查找页表遍历缓存器1230而获得的第一遍历缓存命中级别进行比较。作为第一冗余遍历检测器的冗余遍历检测器1225可以基于比较结果标示危险比特、第一阶段危险级别比特和危险ID比特。

如参照图9至图11所述的冗余遍历检测器1225那样,第二冗余遍历检测器1226可以检测第二阶段的页表遍历的冗余。第二冗余遍历检测器1226可以将输入地址和另一输入地址之间的第二匹配级别与通过使用输入地址的索引查找页表遍历缓存器1230而来获得的第二遍历缓存命中级别进行比较。例如,输入地址可以是诸如当前中间物理地址的中间物理地址,而另一输入地址可以是诸如先前中间物理地址的另一中间物理地址。第二冗余遍历检测器1226可以基于比较结果来标示危险比特、第二阶段危险级别比特、以及危险ID比特。由作为第一冗余遍历检测器的冗余遍历检测器1225标示或清除的危险比特可以与由第二冗余遍历检测器1226标示或清除的危险比特相同或不同。

遍历器1223获取中间物理地址,中间物理地址是从图8A和图8B的S1L0至S1L3页表获取的输出地址,并由诸如当前输入地址的输入地址的索引来指示。遍历器通过查找存储在页表遍历缓存器1230中的第一阶段的地址转换信息和第一阶段的页表的至少一部分来获取中间物理地址。当遍历器1223获取中间物理地址时,作为第一冗余遍历检测器的冗余遍历检测器1225可以将第一匹配级别与第一遍历缓存命中级别进行比较,并且可以检测针对输入地址的页表遍历的冗余。此外,遍历器1223获取物理地址,物理地址是从图8A和图8B的S2L0至S2L3页表获取的输出地址并由中间物理地址的索引来指示。遍历器1223通过查找存储在页表遍历缓存器1230中的第二阶段的地址转换信息和第二阶段的页表的至少一部分来获取物理地址。当遍历器1223获取物理地址时,第二冗余遍历检测器1226可以将中间物理地址之间的第二匹配级别与第二遍历缓存命中级别进行比较,并且可以检测针对中间物理地址的页表遍历的冗余。遍历器1223和1224中的每一个遍历器可以针对从页表遍历器1220提供的输入地址来执行页表遍历并可获取输出地址。例如,输入地址可以是虚拟地址,并且每一个输出地址可以是中间物理地址。又例如,输入地址可以是中间物理地址,并且每一个输出地址可以是物理地址。

图13示出了图2的页表遍历器执行用于将虚拟地址转换为物理地址的页表遍历的流程图,并且参考图5来进行描述。在操作S103中,页表遍历器1220可以在TLB未命中之后接收虚拟地址(即,输入地址)。页表遍历器1220接收的输入地址是未从TLB 1210中查找到的地址。MMU 1200可以使用输入地址和上下文来查找TLB 1210。为了便于描述,在图5和图8A以及图8B中将输入地址示为包括索引和偏移,但是输入地址还可以包括上下文。例如,上下文可以是地址空间ID(ASID)、权限级别、非安全性、虚拟机ID(VMID)等的信息。

在操作S106中,页表遍历器1220可以将输入地址和上下文分配或提供给页表遍历调度器1221。例如,如参考图9所述,可以将输入地址分别存储在页表遍历器1220的条目中。

在操作S109中,页表遍历调度器1221可以检查输入地址的危险比特是否被标示。当危险比特被标示时(S109=是),页表遍历调度器1221可以不将输入地址分配给遍历器1223和1224,直到危险比特被清除为止。可以不执行针对输入地址的页表遍历,直到清除了危险比特。

在操作S113中,当危险比特未被标示(S109=否)或被清除时,页表遍历调度器1221可以将输入地址分配给遍历器1223和1224中的任意一个遍历器(例如,未执行页表遍历的空闲遍历器)。而且,页表遍历调度器1221可以将输入地址分配给冗余遍历检测器1225。

在操作S116中,遍历器可以检查部分和完整的地址转换信息是否存储在页表遍历缓存器1230中。例如,遍历器可以是遍历器1223和1224中的任意一个遍历器,部分和完整的地址转换信息可以是由输入地址(比如当前的输入地址)的索引指示的描述符,并且页表遍历缓存器1230可以是第一阶段的页表遍历缓存器S1WC。也就是说,在操作S116中被分配输入地址的遍历器可以检查与输入地址和上下文相关联的部分或完整的地址转换信息是否存储在页表遍历缓存器1230中。遍历器可以识别存储在页表遍历缓存器1230中的、由输入地址的索引指示的输出地址的第一阶段的级别中的最高级别。遍历器可以检查由输入地址的索引指示的页表遍历缓存器1230中存储的输出地址的第一阶段的级别。当遍历器查找页表遍历缓存器1230时,遍历器可以进一步参考上下文以及第一阶段的级别L0至L3中的每个级别的索引。例如,遍历器可以使用页表遍历缓存器1230的条目的部分地址转换信息,其具有分别与所请求的上下文和索引匹配的上下文和索引。

在操作S119中,当在页表遍历缓存器1230中发生命中时(S116=是),遍历器可以跳过获取存储在页表遍历缓存器1230中的或由命中索引指示的输出地址的操作。遍历器可以跳过获取输出地址的操作,直到第一阶段的命中级别。例如,在当前输入地址是图11的输入地址IA1的情况下,遍历器可以跳过获取由L0和L1索引分别指示的输出地址的操作。遍历器可以跳过从操作S116中命中的第一阶段的第一级别(例如,L0)至命中级别(例如,L1)获取对应输出地址的操作。随着第一阶段的命中级别变高,遍历器查找的页表的数量会减少。

在操作S123中,冗余遍历检测器1225可以通过将匹配级别与遍历缓存命中级别进行比较,来检测在遍历器获取由页表遍历缓存器1230中未命中的索引所指示的输出地址的操作中是否存在冗余。冗余遍历检测器1225可以计算未决的页表遍历的输入地址(或任意其他输入地址)与当前输入地址之间的第一阶段的匹配级别。匹配级别可以指示当前输入地址和任意其他输入地址的匹配索引的级别(例如,与危险级别比特对应的匹配级别)。随着匹配级别变高,当前输入地址的索引和其他输入地址的索引彼此匹配的程度会变高。冗余遍历检测器1225可以计算匹配级别中的最高(最大)匹配级别,作为当前输入地址的匹配级别。而且,冗余遍历检测器1225可以通过使用当前输入地址的索引来查找页表遍历缓存器1230,并且可以获得第一阶段的遍历缓存命中级别。

在操作S126中,当匹配级别高于遍历缓存命中级别时(即,当检测到冗余时)(S123=是),冗余遍历检测器1225可以对存储或包括输入地址和上下文的条目中的危险信息(例如,危险比特、危险级别比特、危险ID比特)进行更新,使得不执行包括冗余的页表遍历。冗余遍历检测器1225可以标示针对输入地址的第一阶段的危险比特。而且,可以从冗余遍历检测器1225解除对危险比特被标示的输入地址的分配。如操作S109所述,在标示的危险比特被清除之前,不会将输入地址分配给遍历器1223和1224以及冗余遍历检测器1225。页表遍历器1220不会将当前输入地址提供给遍历器1223和1224,不会执行针对当前输入地址的页表遍历,并且当正在执行页表遍历时可以取消或停止该页表遍历。

在操作S129中,当匹配级别不高于遍历缓存命中级别(S123=否)时,遍历器可以检查针对输入地址的页表遍历是否完成。在操作S133中,当针对输入地址的页表遍历未完成时(S129=否),遍历器可以获取由输入地址的索引指示的且未从页表遍历缓存器1230中查找到的输出地址。在操作S136中,遍历器可以将所获取的输出地址存储在页表遍历缓存器1230中(即,更新页表遍历缓存器1230)。也可以将遍历器获取的输出地址存储在冗余遍历检测器1225中(即,更新冗余遍历检测器1225)。

在操作S139中,冗余遍历检测器1225可以获得或计算遍历缓存级别,该遍历缓存级别在由输入地址的索引指示的输出地址被存储在页表遍历缓存器1230中时被更新。冗余遍历检测器1225可以基于当前输入地址的遍历缓存级别与当前输入地址和其他输入地址的匹配级别进行比较的结果,来清除任意其他页表遍历的第一阶段的危险比特。例如,当遍历缓存级别达到或与匹配级别相同时,冗余遍历检测器1225可以清除先前输入的另一输入地址的危险比特。可以重复执行操作S133和操作S136,直到在操作S129中确定页表遍历完成为止;当重复执行操作S133和操作S136时,遍历缓存级别可以逐渐变高。

当页表遍历完成时(S129=是),在操作S143中,可以从页表遍历调度器1221和冗余遍历检测器1225解除对输入地址的分配。在操作S146中,MMU 1200可以参考存储在TLB1210中的地址转换信息来获得与虚拟地址(即,输入地址)对应的物理地址。

图14A和14B示出了参考图8A和图8B所述的图2的页表遍历器执行将虚拟地址转换为中间物理地址的第一阶段的页表遍历以及将中间物理地址转换为物理地址的第二阶段的页表遍历的流程图。将一起描述图14A和图14B。

如在操作S103中那样,在操作S203中,页表遍历器1220可以在TLB未命中之后接收虚拟地址(即输入地址)。如在操作S106中那样,在操作S206中,页表遍历器1220可以将虚拟地址和上下文分配或提供给页表遍历调度器1221。如在操作S109中那样,在操作S209中,页表遍历调度器1221可以检查虚拟地址的第一阶段或第二阶段的危险比特是否被标示。如上所述,可以关于第一阶段和第二阶段,由作为第一冗余遍历检测器的冗余遍历检测器1225和第二冗余遍历检测器1226一起管理危险比特。可选地,可以由作为第一冗余遍历检测器的冗余遍历检测器1225管理第一阶段的危险比特,并且可以由第二冗余遍历检测器1226管理第二阶段的危险比特。

如在操作S113中那样,在操作S213中,当危险比特未标示或清除了时(S209=否),页表遍历调度器1221可以将虚拟地址分配给遍历器1223和1224中的任意一个遍历器以及作为第一冗余遍历检测器的冗余遍历检测器1225。如在操作S116中,在操作S216中,被分配输入地址的遍历器可以检查与虚拟地址和上下文相关联的部分和完整的地址转换信息是否存储在页表遍历缓存器1230中。例如,部分和完整的转换信息可以是由虚拟地址的索引指示的描述符,并且页表遍历缓存器1230可以是第一阶段的页表遍历缓存器S1WC。如在操作S119中,在操作S219中,遍历器可以跳过获取输出地址的操作,直到操作S216的第一阶段的命中级别。如在操作S123中那样,在操作S223中,作为第一冗余遍历检测器的冗余遍历检测器1225可以通过将遍历命中级别与第一阶段的匹配级别进行比较,来检测在遍历器获取由页表遍历缓存器1230中未命中的索引所指示的输出地址的操作(例如,页表遍历)中是否存在冗余。如在操作S126中那样,在操作S226中,当第一阶段的匹配级别高于遍历缓存命中级别时(S223=是),作为第一冗余遍历检测器的冗余遍历检测器1225可以标示虚拟地址的第一阶段的危险比特。可以从作为第一冗余遍历检测器的冗余遍历检测器1225解除对危险比特被标示的输入地址的分配。

在操作S229中,当匹配级别不大于遍历缓存命中级别时(S223=否),页表遍历调度器1221可以将虚拟地址的中间物理地址分配给第二冗余遍历检测器1226。在操作S233中,遍历器(例如,与操作S216的遍历器相同)可以确定中间物理地址的部分和完整的地址转换信息(例如,中间物理地址的索引指示的描述符)是否存储在页表遍历缓存器1230中(例如,第二阶段的页表遍历缓存器S2WC)。这里,第一阶段的页表遍历缓存器S1WC和第二阶段的页表遍历缓存器S2WC都可以包括在页表遍历缓存器1230中,或者第一阶段的页表遍历缓存器S1WC和第二阶段的页表遍历缓存器S2WC可以分离地实现在页表遍历缓存器1230中。在操作S236中,遍历器可以跳过获取输出地址的操作,直到操作S233的第二阶段的命中级别。

在操作S239中,第二冗余遍历检测器1226可以通过将遍历命中级别与第二阶段的匹配级别进行比较,来检测在遍历器获取由页表遍历缓存器1230中未命中的索引指示的输出地址的操作(例如,页表遍历)中是否存在冗余。第二冗余遍历检测器1226可以计算未决的页表遍历的中间物理地址与当前中间物理地址之间的第二阶段的匹配级别。匹配级别可以指示当前中间物理地址和任意其他输入地址的匹配索引的级别。第二冗余遍历检测器1226可以计算匹配级别中最高(最大)的匹配级别,作为当前中间物理地址的匹配级别。而且,冗余遍历检测器1226可以通过使用当前中间物理地址的索引来查找页表遍历缓存器1230,并且可以获得第二阶段的遍历缓存命中级别。在操作S243中,当第二阶段的匹配级别高于遍历缓存命中级别时(S239=是),第二冗余遍历检测器1226可以标示中间物理地址的第二阶段的危险比特。可以从第二冗余遍历检测器1226解除对危险比特被标示的中间物理地址的分配。

在操作S246中,当匹配级别不高于遍历缓存命中级别时(S239=否),遍历器可以检查中间物理地址的第二阶段的页表遍历是否完成。当页表遍历未完成时(S246=否),在操作S249中,遍历器可以获取由中间物理地址的索引指示的且未从页表遍历缓存器1230中找到的输出地址。在操作S253中,遍历器可以将所获取的输出地址存储在页表遍历缓存器1230中(即,更新页表遍历缓存器1230)。也可以将遍历器获取的输出地址存储在第二冗余遍历检测器1226中(即,更新第二冗余遍历检测器1226)。

在操作S256中,第二冗余遍历检测器1226可以获得或计算遍历缓存级别,所述遍历缓存级别在由中间物理地址的索引指示的输出地址被存储在页表遍历缓存器1230中时被更新。第二冗余遍历检测器1226可以基于当前中间物理地址的遍历缓存级别与当前中间物理地址和其他中间物理地址之间的匹配级别进行比较的结果,来清除任意其他页表遍历的第二阶段的危险比特。可以重复执行操作S249和操作S253,直到操作S246中确定第二阶段的页表遍历完成为止。当重复执行操作S249和操作S253时,遍历缓存命中级别可以逐渐变高。

当页表遍历完成时(S246=是),在操作S259中,可以从第二冗余遍历检测器1226解除对中间物理地址的分配。此后,操作S263至操作S273可以与图13的操作S129至操作S139基本相同。当第一页表遍历完成时(S263=是),在操作S276中,可以从页表遍历调度器1221和作为第一冗余遍历检测器的冗余遍历检测器1225解除对输入地址的分配。在操作S279中,MMU 1200可以参考存储在TLB 1210中的地址转换信息来获得与虚拟地址(即,输入地址)对应的物理地址。

根据本公开的实施例,可以通过将匹配级别与遍历缓存命中级别进行比较来预测和检测页表遍历的冗余。处理器可以执行不存在冗余的其他页表遍历,从而改善处理器的性能并降低功耗。

尽管已参考本发明的示例性实施例来进行本文所述发明构思的教导,但是对于本领域普通技术人员显而易见的是,在不脱离如在以下权利要求中阐述的本公开的精神和范围的情况下,可以对其进行各种改变和修改。

34页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种兼容PogoPin、Y-cable与USB的方法与设备

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类