共享转换后备缓冲器及方法

文档序号:6568620阅读:224来源:国知局
专利名称:共享转换后备缓冲器及方法
技术领域
本发明一般来说涉及处理器领域,且更具体来说涉及共享转换后备缓冲器及方法。背景技水转换后备缓冲器(TLB)是用于存储目前使用的虚拟-至-物理地址转换的高速缓 冲存储器。当处理器需要存取由虚拟地址指示的存储器位置时,其向转换后备缓冲器 询问存储器位置的对应物理地址。如果所述转换后备缓冲器含有既定虚拟地址,则其 为"命中"且向所述处理器提供对应的物理地址。当既定虚拟地址不在所述转换后备 缓冲器中时,则其为"未命中"且处理器必须搜索或"漫步"页表来寻找对应的物理 地址。然后将所述物理地址提供或"填充"到转换后备缓冲器。然而,在多个处理器 线程之间存在共享转换后备缓冲器的情况下,另一线程的地址转换可由当前线程"驱 逐"出去。在某些关键操作系统的操作中,这样可导致严重的错误。转换后备缓冲器未命中可以软件或硬件来处理。然而,在转换后备缓冲器未命中 异常的情况下使用硬件来填充转换后备缓冲器条目需要不经常使用的专用硬件。在某 些处理器实施方案中,在处理异常或中断期间使用阴影寄存器来自动地保存某些寄存 器内容。转换后备缓冲器未命中可由硬件来自动处理,或者可导致异常且由软件来处 理。由于中断、异常及转换后备缓冲器未命中很少发生,因此配备专用硬件资源因复 杂度增加及低效率设计而并非需要的。在某些处理器中,使用软件来处理转换后备缓冲器未命中。在发生转换后备缓冲 器未命中的情况下,使用软件漫歩页表条目来进行虚拟-至-物理地址转换。在这些处 理器中,为每一中央处理器(CPU)或每一处理线程提供转换后备缓冲器以避免另一 处理器或线程改变转换后备缓冲器条目的问题。然而,由于为每一线程提供转换后备 缓冲器是昂贵且低效的,所以这在某些应用中也是不可行的。发明内容在本发明的实施例中, 一种方法包括在遇到异常/中断时将存储在第一选定寄存 器组中的数据保存到存储器中的线程专有区域的预定区段;重新启用异常且视情况重 新启用中断;在安全地准许另一异常的同时解决所述异常/中断的原因;及将所述保存 的数据恢复到所述第一选定寄存器组。在另一实施例中, 一种处理器包括软件管理转换后备缓冲器,其在多个处理线 程之间共享;及虚拟存储器,其具有用于在处理非转换后备缓冲器未命中异常期间临 时存储数据的所述线程专有区域的第一预定区段、及用于在处理转换后备缓冲器未命 中异常期间临时存储数据的所述线程专有区域的至少一个第二预定区段。在又一实施例中, 一种具有共享转换后备缓冲器的处理器包括保存构件,其用 于在遇到异常/中断时将存储在所选第一寄存器组中的数据保存到存储器中的线程专 有区域的预定区段;重新启用构件,其用于重新启用异常且视情况重新启用中断;解 决构件,其用于在安全地准许另一异常的同时解决所述异常/中断的原因;及恢复构件,其用于将所述保存的数据恢复到所述第一选定寄存器组。在本发明的另一实施例中,揭示一种其上具有经编码方法的计算机可读媒体,所 述方法包括在遇到异常/中断时将存储在第一选定寄存器组中的数据保存到存储器中 的线程专有区域的预定区段;重新启用异常且视情况重新启用中断;在安全地准许另 一异常的同时解决所述异常/中断的原因;及将所述保存的数据恢复到所述第一选定寄 存器组。


当参照附图阅读下文详细说明时可从中最好地理解本发明的各方面。应强调,根 据标准的工业惯例,各种特征并非按比例绘制。实际上,为了进行清楚的论述,可任 意增加或减小各个特征的尺寸。 ^图1是处理器的存储器系统的一部分的实施例的简化逻辑方块图; 图2是处理非转换后备缓冲器未命中异常及中断的方法的实施例的简化流程图; 图3是处理转换后备缓冲器未命中异常及中断的方法的第一实施例的简化流程 图;及图4是处理转换后备缓冲器未命中异常及中断的方法的第二实施例的简化流程图。
具体实施方式
出于成本及功率考虑,在多个处理线程中使用共享转换后备缓冲器可是需要的。 然而,对软件编程的共享转换后备缓冲器(TLB)的管理并不是无关紧要的事情。图1是处理器11的存储器系统10的一部分的实施例的简化逻辑方块图。例如, 处理器11可以是通用微处理器或专用处理器,例如数字信号处理器(DSP)。存储器 系统10包括用于存储数据、指令代码及其他数据的存储器位置12。在存储器系统IO 的一个实施例中,针对每一处理线程界定称作线程专有区域(TSA) (14与15)的存 储器区段。每一TSA 14与15均包括正常区段及至少一个TLB区段。所述TLB TSA 区段专用于在处理TLB未命中异常的过程期间临时存储数据。例如,用于线程1的TSA14包含TLBTSA区段16及正常TSA区段17。在另一实施例中,所述TSA可包 含多于一个TLB区段。例如,显示用于线程0的TSA 15包含两个TLB TSA区段18 与19,及正常TSA区段20。如下文更详细描述,所述两个TLB TSA区段用于针对 两个嵌套TLB未命中异常临时存储数据。依照软件约定,TSA的物理地址总是存储在 TLB中且因此总是可转换的。存储器系统10可包含本文未以显式方式显示的附加TSA区段。依照约定,所述 TSA的虚拟-至-物理转换不会被从TLB 22中驱逐出去。存储器系统10同样包括通用 寄存器(GPR) R0 24、 R2 26及R3 28。另外,存储器系统10包括仅在管理程序模式 期间使用的管理程序专用寄存器。在完成异常或中断处理后,使用称作异常链接寄存 器(ELR) 30的管理程序专用寄存器来存储返回地址,且使用称作管理程序暂存或 STMP32的另一管理程序专用寄存器来进行临时存储。使用称作管理程序状态寄存器 (SSR)的另一寄存器来保持状态信息,例如异常或中断的原因。图1中所示存储器系统10的硬件约束条件是当将数据移动到ELR、SSR、STMP 及核心堆栈及将数据从ELR、 SSR、 STMP及核心堆栈中移出时,必须将通用寄存器 (例如,R0-R3)用作中间数据存储装置。应了解,存储器系统10通常含有其他存储 器组件,但为简明及清晰起见本文未对其加以描述。参照下文结合图2-4的说明,将 更详细地描述存储器系统10的这些组件的效用。图2是处理非TLB未命中异常及中断的方法40的实施例的简化流程图。有时可 参照图1中所示的存储器系统组件。当发生异常或中断时,处理器执行从用户模式到 管理程序模式的转变。在步骤42中,将返回地址保存在ELR 30中且将状态信息保存 在SSR34中。在步骤44中,将通用寄存器R0 24的内容保留在暂存寄存器STMP32 中以使RO可用于其他目的。在步骤46中,产生关于TSA的指针并保存在RO中。通 过TSA区段的处理线程ID来识别TSA区段。在下面的步骤中,将上下文数据、用户 数据及其他数据保存在正常TSA区段的适当区域中,且使用通用寄存器来将数据传出 这些寄存器并传入所述TSA中。在步骤48中,将通用寄存器R2及R3 28中的数据保 存在TSA中以便可使用R2及R3将数据转移出ELR 30、 STMP 32及SSR 34。在步骤 50中,将作为返回地址的ELR内容及SSR的内容分别地移动到R2与R3。在步骤52 中,再次将R2与R3的内容保存在TSA中的适当位置中。在步骤54中,将存储在STMP 32中的数据(曾位于RO中的数据)移动到R2。在步骤56中,现在可允许异常发生 或启用异常。在这个步骤期间,可使用R3来操纵及/或改变(例如)SSR34中的状态 数据的选定位。假如现在发生TLB未命中异常,则其将不会导致重要数据损失。在步 骤58中,将核心堆栈指针存储在R3中。在步骤60中,使用存储在R3中的核心堆栈 指针将用户寄存器(例如通用寄存器及其他寄存器)中的上下文数据(其中包含临时 保存在TSA中的数据)存储在所述核心堆栈上。在步骤56中的重新启用异常之前, 在数据尚未受到安全防护的情况下,写入到核心堆栈及从其读取可导致异常。因此, 在重新启用异常之前使用TSA来临时保持寄存器数据,且然后在重新启用异常之后将所述TSA推到核心堆栈上。在重新启用异常后,由于可在操作系统在返回到当前软件 线程之前切换到新的软件线程的情况下,TSA的内容可由另一软件线程改变,所以将 存储在TSA中的寄存器数据及其他必要数据存储在核心堆栈中,这些数据在核心堆栈 中将保持可存取且未改变。在步骤62中,调用用于异常处理程序的代码。在异常处理程序完成后,恢复寄存器数据。在步骤64中,从核心堆栈恢复来自 所有用户寄存器(除R0-R3外)的数据。在步骤66中,将关于TSA的指针存储在R0 中。在步骤68中,现在经由R0-R3将保存在核心堆栈中的通用寄存器数据移动到TSA。 在步骤70中,将来自SSR及ELR的数据从核心堆栈分别地移动到R2与R3。然后在 步骤72中停用所述异常以使TLB未命中异常不能发生。在步骤74中,将R0数据从 TSA移动到STMP。在步骤76中,将SSR及ELR数据从R2及R3恢复回到其各自的 寄存器。在步骤78中,将R1-R3数据从TSA中的数据恢复。在步骤80中,还将RO 数据从STMP恢复。这时,在发生异常时,便将所有曾处在用户寄存器、通用寄存器 及ELR与SSR寄存器中的数据恢复到其原始位置。因此,在步骤82中,执行可返回 到存储在ELR中的返回地址。图3是处理TLB未命中异常及中断的方法90的第一实施例的简化流程图。也可 参照图1中存储器系统10的各组件。在步骤92中,将完成异常处理时将返回的指令 地址存储在ELR30中。在步骤94中,将RO的内容存储在STMP中。在步骤96中, 在RO中产生关于TSA的指针。在步骤98中,将通用寄存器中的数据保存在TSA中。 更具体来说,将数据存储在通过线程识别符指定或加索引的TLBTSA区段中。在这个 步骤中,仅需要保存服务所述异常所需的足够数据。在步骤100中,可获得防止任何 其他处理线程改变TLB的锁。在步骤102与104中,"漫步"页表以得到未命中虚拟-至-物理地址转换并将其添加到TLB 22。由于不允许其他处理线程来改变TLB,所以 "保证"TLB的已更新条目仍在所述TLB中。由于某些物理地址可通过某种操作(例 如,向虚拟地址添加常数)从虚拟地址中导出,使得页漫步可以是不必要的,所以步 骤102可以是可选的。在步骤106中,将锁解除。在步骤108中,将通用寄存器的内 容从TSA恢复。然后在步骤110中返回指令。图4是处理TLB未命中异常及中断的方法120的第二实施例的简化流程图。也 可参照图1的存储器系统10的各组件。在步骤122中,将完成异常处理时将返回的指 令地址存储在ELR30中。在步骤124中,将RO的内容存储在STMP中。在步骤126 中,在RO中产生关于TSA的指针。在步骤128中,将通用寄存器中的数据保存在TSA 中。更具体来说,将数据存储在通过线程识别符指定的TSA (TLB1TSA)的第一 TLB 区段中。在这个步骤中,仅需要保存服务所述异常所需的足够数据。在步骤130中, 做出关于是否需要页表漫步以得到虚拟-至-物理地址转换的确定。如果不需要页表漫 步,则可以某种方式从虚拟地址中导出物理地址,且可在步骤132中导出对应的物理 地址并将其添加到TLB 22中。在步骤134中,从TSA TLB1区段恢复来自通用寄存 器的数据。在步骤136中,从STMP32恢复R0。然后在步骤138中,执行返回。如果在步骤130中确定需要页表漫步来得到物理地址,则在步骤140中将更多数 据(例如SSR、 ELR及其他寄存器数据)保存在TLB1TSA中。执行步骤140以保存 "足够"数据来服务所述异常,且视应用而定,步骤140可以是可选步骤。在步骤142 中,重新启用异常。应注意,如果发生第二TLB未命中异常,则将通用寄存器数据保 存在TSA (TLB2 TSA)的第二TLB区段中,所述TSA与用于存储来自第一 TLB未 命中异常的数据的TLB1TSA逻辑地分离。在这个实例中,最多准许两个嵌套TLB未 命中异常。然而,应注意,可通过产生任意数量的在逻辑上不同的TLBTSA区段来支 持任意数量的嵌套TLB未命中异常。在步骤144中,执行页表漫步以读取无需任何附 加页表漫步即可直接映射到物理地址的虚拟地址。这种限制应用于避免另一TLB未命 中异常或多于两个嵌套TLB异常。在步骤146中,使用新的经转换地址条目来更新所 述TLB。在步骤148中,使用存储在TLB TSA中的数据来恢复通用寄存器。在步骤 150中,所述执行返回。应注意,取决于硬件实施方案,可优化上述方法。例如,在具有多于一个管理程 序暂存寄存器的系统中,可使用这些方法来流线化所述步骤以将数据从通用寄存器移 动到TSA。此外,某些系统可提供交换寄存器内容的能力而不是使用两个或更多个连 续保存或移动指令。可使用其他优化方法来实现上述及本文涵盖的方法的所需目标。 应了解,仅将上文使用特定寄存器的说明提供为具体实例且对上述方法的变型涵盖于 本文中。虽然己详细描述了本发明实施例,但所属技术领域的技术人员将了解,可对本文 做出各种变化、替代及改变而不背离本发明的精神与范围。因此,所有此类变化、替 代及改变均意在包含在以下权利要求书中所界定的本发明范围内。在权利要求书中, 手段附加功能(means-plus-function)子句意在涵盖执行所述功能的本文中所述的结构,其不但涵盖结构等效物而且涵盖等效结构。
权利要求
1、一种方法,其包括在遇到异常/中断时,将存储在第一选定寄存器组中的数据保存到存储器中线程专有区域的预定区段;重新启用异常且视情况重新启用中断;在安全地准许另一异常的同时,解决所述异常/中断的原因;及将所述保存的数据恢复到所述第一选定寄存器组。
2、 如权利要求1所述的方法,其进一步包括将存储在所述线程专有区域的所述预定区段中的数据及存储在第二选定寄存器 组中的数据保存到核心堆栈;将所述保存的数据从所述核心堆栈恢复到所述第二选定寄存器组;将对应于所述第一寄存器组的数据从所述核心堆栈移动到所述线程专有区域的 所述预定区段;停用异常与中断;及将对应于所述第一寄存器组的数据从所述线程专有区域的所述预定区段恢复到 所述第一寄存器组。
3、 如权利要求l所述的方法,其中遇到异常/中断包括遇到转换后备缓冲器未命 中异常。
4、 如权利要求1所述的方法,其中解决所述异常/中断的原因包括使用新的转换 条目来更新转换后备缓冲器。
5、 如权利要求1所述的方法,其中解决所述异常/中断的原因包括调用异常处理 程序。
6、 如权利要求1所述的方法,其进一步包括将来自通用寄存器的数据保存到所述线程专有区域的所述预定区段; 将数据从管理程序专用寄存器移动到所述通用寄存器;及将来自所述通用寄存器的所述移动的数据保存到所述线程专有区域的所述预定 区段。
7、 如权利要求1所述的方法,其中将数据保存到线程专有区域的预定区段包括 将数据保存到所述线程专有区域的第一预定区段,其中所述遇到的异常/中断是转换后 备缓冲器未命中异常。
8、 如权利要求7所述的方法,其进一步包括 遇到第二转换后备缓冲器未命中异常;及将存储在所述第一选定寄存器组中的数据保存到线程专有区域的第二预定区段。
9、 如权利要求1所述的方法,其中将数据保存到线程专有区域的预定区段包括将数据保存到通过由线程识别符所索引的所述线程专有区域的预定区段。
10、 如权利要求1所述的方法,其中将数据保存到线程专有区域的预定区段包括 在异常处理期间将数据保存到专用于临时数据存储的所述线程专有区域的预定区段。
11、 如权利要求l所述的方法,其中将数据保存到线程专有区域的预定区段包括 在转换后备缓冲器未命中异常处理期间将数据保存到专用于临时数据存储的所述线程 专有区域的预定区段。
12、 一种处理器,其包括软件管理转换后备缓冲器,其在多个处理线程之间共享;及 虚拟存储器,其具有所述线程专有区域的第一预定区段,其用于在非转换后备缓冲器未命中异常 处理期间临时存储数据;及所述线程专有区域的至少一个第二预定区段,其用于在转换后备缓冲器未命 中异常处理期间临时存储数据。
13、 如权利要求12所述的处理器,其中用于在转换后备缓冲器未命中异常处理 期间临时存储数据的所述线程专有区域的所述至少一个第二预定区段包括第一区段, 其用于在第一转换后备缓冲器未命中异常处理期间临时存储数据;及第二区段,其用 于在第二嵌套转换后备缓冲器未命中异常处理期间临时存储数据。
14、 一种具有共享转换后备缓冲器的处理器,所述处理器包括 保存构件,其用于在遇到异常/中断时将存储在第一选定寄存器组中的数据保存到存储器中线程专有区域的预定区段;重新启用构件,其用于重新启用异常且视情况重新启用中断;解决构件,其用于在安全地准许另一异常的同时解决所述异常/中断的原因;及恢复构件,其用于将所述保存的数据恢复到所述第一选定寄存器组。
15、 如权利要求14所述的处理器,其进一步包括保存构件,其用于将存储在所述线程专有区域的所述预定区段中的数据及存储在第二选定寄存器组中的数据保存到核心堆栈;恢复构件,其用于将所述保存的数据从所述核心堆栈恢复到所述第二选定寄存器组;移动构件,其用于将对应于所述第一寄存器组的数据从所述核心堆栈移动到所述线程专有区域的所述预定区段;停用构件,其用于停用异常及中断;及恢复构件,其用于将对应于所述第一寄存器组的数据从所述线程专有区域的所述 预定区段移动到所述第一寄存器组。
16、 如权利要求14所述的处理器,其中用于在遇到异常/中断时将存储在第一选 定寄存器组中的数据保存到存储器中的线程专有区域的预定区段的构件包括用于在遇 到转换后备缓冲器未命中异常时保存数据的构件。
17、 如权利要求14所述的处理器,其中用于解决所述异常/中断的原因的构件包 括用于使用新的转换条目更新转换后备缓冲器的构件。
18、 如权利要求14所述的处理器,其中用于解决所述异常/中断的原因的构件包 括用于调用异常处理程序的构件。
19、 如权利要求14所述的处理器,其进一步包括保存构件,其用于将来自通用寄存器的数据保存到所述线程专有区域的所述预定 区段;移动构件,其用于将数据从管理程序专用寄存器移动到所述通用寄存器;及 保存构件,其用于将来自所述通用寄存器的所述移动的数据保存到所述线程专有区域的所述预定区段。
20、 如权利要求14所述的处理器,其中用于将数据保存到线程专有区域的预定 区段的构件包括用于将数据保存到所述线程专有区域的第一预定区段的构件,其中所 述遇到的异常/中断是转换后备缓冲器未命中异常。
21、 如权利要求20所述的处理器,其进一步包括 遇到构件,其用于遇到第二转换后备缓冲器未命中异常;及保存构件,其用于将存储在所述第一选定寄存器组中的数据保存到线程专有区域的第二预定区段。
22、 如权利要求14所述的处理器,其中用于将数据保存到线程专有区域的预定 区段的构件包括用于将数据保存到通过由线程识别符所索引的所述线程专有区域的预 定区段的构件。
23、 如权利要求14所述的处理器,其中用于将数据保存到线程专有区域的预定 区段的构件包括用于将数据保存到所述线程专有区域的正常区段的构件。
24、 如权利要求14所述的处理器,其中用于将数据保存到线程专有区域的预定区段的构件包括用于将数据保存到所述线程专有区域的转换后备缓冲器区段的构件。
25、 一种上面编码有方法的计算机可读媒体,所述方法包括 在遇到异常/中断时,将存储在第一选定寄存器组中的数据保存到存储器中的线程专有区域的预定区段;重新启用异常且视情况重新启用中断;在安全地准许另一异常的同时解决所述异常/中断的原因;及 将所述保存的数据恢复到所述第一选定寄存器组。
26、 如权利要求25所述的方法,其进一步包括将存储在所述线程专有区域的所述预定区段中的数据及存储在第二选定寄存器组中的数据保存到核心堆栈; ,将所述保存的数据从所述核心堆栈恢复到所述第二选定寄存器组; 将对应于所述第一寄存器组的数据从所述核心堆栈移动到所述线程专有区域的所述预定区段;停用异常及中断;及将对应于所述第一寄存器组的数据从所述线程专有区域的所述预定区段恢复到 所述第一寄存器组。
27、 如权利要求25所述的方法,其中遇到异常/中断包括遇到转换后备缓冲器未 命中异常。
28、 如权利要求25所述的方法,其中解决所述异常/中断的原因包括使用新的转 换条目更新转换后备缓冲器。
29、 如权利要求25所述的方法,其中解决所述异常/中断的原因包括调用异常处 理程序。
30、 如权利要求25所述的方法,其进一步包括 将数据从通用寄存器保存到所述线程专有区域的所述预定区段; 将数据从管理程序专用寄存器移动到所述通用寄存器;及将来自所述通用寄存器的所述移动的数据保存到所述线程专有区域的所述预定 区段。
31、 如权利要求25所述的方法,其中将数据保存到线程专有区域的预定区段包 括将数据保存到所述线程专有区域的第一预定区段,其中所述遇到的异常/中断是转换 后备缓冲器未命中异常。
32、 如权利要求31所述的方法,其进一步包括 遇到第二转换后备缓冲器未命中异常;及将存储在所述第一选定寄存器组中的数据保存到线程专有区域的第二预定区段。
33、 如权利要求25所述的方法,其中将数据保存到线程专有区域的预定区段包 括将数据保存到通过由线程识别符所索引的所述线程专有区域的预定区段。
34、 如权利要求25所述的方法,其中将数据保存到线程专有区域的预定区段包 括在异常处理期间将数据保存到专用于临时数据存储的所述线程专有区域的预定区 段。
35、 如权利要求25所述的方法,其中将数据保存到线程专有区域的预定区段包 括在转换后备缓冲器未命中异常处理期间将数据保存到专用于临时数据存储的所述线 程专有区域的预定区段。
全文摘要
一种共享转换后备缓冲器方法,其包括在遇到异常/中断时将存储在第一选定寄存器组中的数据保存到存储器中的线程专有区域的预定区段;重新启用异常且视情况重新启用中断;在安全地准许另一异常的同时解决所述异常/中断的原因;及将所述保存的数据恢复到所述第一选定寄存器组。
文档编号G06F9/48GK101243398SQ200680030072
公开日2008年8月13日 申请日期2006年6月23日 优先权日2005年6月23日
发明者卢西恩·康德雷斯库, 埃里希·普罗恩德克, 威廉·C·安德森 申请人:高通股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1