CN105993003A - 同时无效化所有关联于一x86进程内容标识符的地址转译快取项目 - Google Patents
同时无效化所有关联于一x86进程内容标识符的地址转译快取项目 Download PDFInfo
- Publication number
- CN105993003A CN105993003A CN201480065921.4A CN201480065921A CN105993003A CN 105993003 A CN105993003 A CN 105993003A CN 201480065921 A CN201480065921 A CN 201480065921A CN 105993003 A CN105993003 A CN 105993003A
- Authority
- CN
- China
- Prior art keywords
- address
- bit
- translation
- project
- region
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0891—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using clearing, invalidating or resetting means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1027—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
- G06F12/1036—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] for multiple virtual address spaces, e.g. segmentation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1027—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
- G06F12/1045—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache
- G06F12/1063—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache the data cache being concurrently virtually addressed
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/109—Address translation for multiple virtual address spaces, e.g. segmentation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7839—Architectures of general purpose stored program computers comprising a single central processing unit with memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1027—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1041—Resource optimization
- G06F2212/1044—Space efficiency improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/68—Details of translation look-aside buffer [TLB]
- G06F2212/683—Invalidation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/68—Details of translation look-aside buffer [TLB]
- G06F2212/684—TLB miss handling
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
一种转译后备缓冲器(TLB)。此转译后备缓冲器包含多个项目,其中,各该项目用以保存一地址转译与一区域有效比特向量;其中,该区域有效比特向量的各个比特由一x86指令集架构的进程内容标识符(PCID)的不同值所映射。此转译后备缓冲器还包含一输入,接收一无效化比特向量,其比特对应于该多个项目的该区域有效比特向量的比特。此转译后备缓冲器还包含逻辑,对于该多个项目中对应有该无效化比特向量的一设定比特的各该项目,同时无效化各该项目的该区域有效比特向量的一比特。
Description
相关申请交叉引用
本申请主张申请日为2014年7月21日的美国专利第62/026,830号临时申请的优先权。该优先权申请的全文并入本申请以供参考。
背景技术
现代处理器支持虚拟存储器功能。虚拟存储器***将由程序使用的虚拟地址映射或转译至由硬件使用的物理地址以对存储器定址。虚拟存储器可以对程序隐藏物理存储器散布的问题,以利程序重定位(relocation)的进行,并可容许程序看到相较于可取用的物理存储器更大的地址空间。这些优点尤其有利于现代使用多程序或进程以支持处理器时间共享(time-sharing)的***。
操作***(operationg system)产生并维护存储器转译表(memorytranslation table)。存储器转译表通常被称为分页虚拟存储器***的页表(pagetable),用以将虚拟地址映射至物理地址。此转译表可采取阶层表单的型式,其中部分表单将虚拟地址映射至中间表单的地址。在程序利用虚拟地址来存取存储器的时候,转译表必须能被存取,以完成虚拟地址转译至其物理位置的过程,这过程通常被称为页表移动(page table walk)或表移动(table walk)。这个存取转译表的额外存取动作,会明显造成存取存储器以取得程序所需的数据或指令的最终存取动作的延迟。
现代处理器具有转译后备缓冲器(translation-lookaside buffer,TLB)来处理这个问题并提升效能。TLB是一个处理器的硬件结构,通过依序存取虚拟至物理地址的转译,以大幅降低需要存取转译表的可能性。先在TLB内查看待转译的虚拟地址,然后再由TLB提供物理地址。如果此虚拟地址存在(命中)于TLB内,所需要的时间就会明显少于存取存储器内的转译表来执行页移动所需的时间。TLB的效率(命中率)对于处理器的效能来说非常关键。
各个进程(process)或内容(context)都具有其特殊地址空间与相关联的地址转译。因此,对于一个进程而言正确的TLB项目,对于另一个进程来说未必正确。当处理器切换处理进程时,TLB效能会降低。此***必须确保没有因为使用过时的TLB项目而误用TLB中用于旧进程的地址转译来转译新进程的虚拟地址。
发明内容
本发明提供一种转译后备缓冲器(translation-lookaside buffer,TLB)。此转译后备缓冲器包含多个项目,其中,各该项目用以保存(hold)一地址转译与一区域有效比特向量;其中,该区域有效比特向量的各个比特由一x86指令集架构的进程内容标识符(PCID)的不同值所映射。此转译后备缓冲器还包含一输入,接收一无效化(invalidation)比特向量,其比特对应于该多个项目的该区域有效比特向量的比特。此转译后备缓冲器还包含逻辑,对于该多个项目中对应有该无效化比特向量的一设定(set)比特的各该项目,同时无效化各该项目的该区域有效比特向量的一比特。
本发明并提供一种操作一转译后备缓冲器(translation-lookaside buffer,TLB)的方法,此转译后备缓冲器包含多个项目,其中,各该项目用以保存(hold)一地址转译与一区域有效比特向量,其中,该区域有效比特向量的各个比特由一x86指令集架构的进程内容标识符(PCID)的不同值所映射。此方法包含:接收一无效化(invalidation)比特向量,其比特对应于该多个项目的该区域有效比特向量的比特;以及对于该多个项目中对应有该无效化比特向量的一设定(set)比特的各该项目,同时无效化各该项目的该区域有效比特向量的一比特。
本发明更提供一种处理器。此处理器包含一转译后备缓冲器(translation-lookaside buffer,TLB)。此转译后备缓冲器包含多个项目,其中,各该项目用以保存(hold)一地址转译与一区域有效比特向量;其中,该区域有效比特向量的各个比特由一x86指令集架构的进程内容标识符(PCID)的不同值所映射。此转译后备缓冲器还包含一输入,接收一无效化(invalidation)比特向量,其比特对应于该多个项目的该区域有效比特向量的比特。此转译后备缓冲器还包含逻辑,对于该多个项目中对应有该无效化比特向量的一设定(set)比特的各该项目,同时无效化各该项目的该区域有效比特向量的一比特。此处理器还包含一映射模组,用以产生该无效化比特向量。
本发明所采用的具体实施例,将藉由以下的实施例及附图作进一步的说明。
附图说明
图1是一处理器的方块示意图;
图2是一方块图详细显示图1的处理器;
图3是转译后备缓冲器的一项目的方块示意图;
图4是一流程图显示图1的处理器填入转译后备缓冲器的项目的操作流程;
图5是一方块示意图显示一位于转译后备缓冲器内的逻辑以确认查找过程中是否发生命中;
图6是一方块示意图显示一逻辑,用以无效化转译后备缓冲器(请参照图2)的项目(请参照图3)的LVAL比特向量的比特;
图7是一方块示意图显示图1的处理器内的一控制寄存器;
图8是一流程图显示映射模块响应于图7的控制寄存器中各个不同比特的设定所执行的操作;
图9是一方块示意图详细显示图2的区域内容表;
图10是一方块示意图详细显示图2的全域内容表;
图11是一流程图显示图1的处理器执行指令使处理器的架构特征失效的操作,而此处理器支持多个进程内容标识符(process context identifier,PCID);
图12是一流程图显示图1的处理器执行指令以改变当前地址转译内容的操作;
图13是一流程图,显示图1的处理器执行图12的步骤(以及图19与图21的步骤1918与2106)所呼叫的MOV_CR3()例程的操作;
图14是一流程图显示图1的处理器执行图13的步骤1308(以及图16与图17的步骤1606与1722)所呼叫的ALLOCATE_LOCAL_CONTEXT()例程的操作;
图15是一流程图显示图1的处理器在虚拟机器监视器至客户的移转过程的操作;
图16是一流程图显示图1的处理器执行例程MOVTOCR3NOVPID的操作;
图17是一流程图显示图1的处理器执行例程MOVTOCR3VPID的操作;
图18是一流程图显示图1的处理器执行图17的步骤1712所呼叫的ALLOCATE_GLOBAL_CONTEXT()例程的操作。
图19是一流程图显示图1的处理器在由客户至虚拟机器监视器的移转过程的操作;
图20是一流程图显示图1的处理器进入***管理模式(systemmanagement mode,SMM)的移转过程的操作;
图21是一流程图显示图1的处理器离开SMM的移转过程的操作;
图22,此图是一流程图显示处理器执行指令以无效化转译后备缓冲器中与一进程内容标识符有关的地址转译的操作;
图23A与图23B(整体称为图23)是一流程图显示处理器执行指令以无效化转译后备缓冲器中关联于一虚拟处理器标识符(virtual processor identifier,VPID)的地址转译的操作;以及
图24是一流程图显示处理器执行指令以无效化转译后备缓冲器中关联于一扩展页表指针(extended page table pointer)的地址转译的操作。
具体实施方式
名词说明
地址转译内容(address translation context)是一组可以使存储器地址从一第一存储器地址空间转译至一第二存储器地址空间的信息。举例来说,在x86指令集架构中,地址转译内容可以是一组位于CR3寄存器(与其他控制寄存器,例如CR0与CR4与相关的特定模式寄存器(model specific register,MSR))、页表(page table)、页目录(page directory)、页目录指针表(page-directory-pointertable,PDPT)、PML4表、扩展页表指针(extended page table pointer,EPTP)、与/或扩展页表(extended page table,EPT)内的信息,可以使线性地址(linearaddress)转译为物理存储器地址。不过,在其他指令集架构中(例如MIPS、SPARC),则可由操作***执行此转译。而在ARM指令集架构中,地址转译内容可以是一组位于转译表基址寄存器(translation table base register,TTBR)(与其他控制寄存器,例如转译控制寄存器(translation control register,TCR)、***控制寄存器(system control register,SCTLR)与Hyp组态寄存器(Hypconfiguration register,HCR))与/或转译表内的信息。
地址转译(address translation)是一对存储器地址,这对存储器地址的第一个是待转译地址,而这对存储器地址的第二个是转译后地址。
区域地址转译(local address translation)是一种地址转译,使用单一个地址转译内容来将待转译地址转译为转译后地址。
全域地址转译(global address translation)是一种地址转译,使用多个地址转译内容来将待转译地址转译为转译后地址。
区域存储器页(local memory page)(或是区域页(local page),是一个具有一区域地址转译的存储器页。
全域存储器页(global memory page)(或是全域页(global page)),是一个具有一全域地址转译的存储器页。
许多习知的指令集架构(ISA)都具有设计来提升TLB效率的特征。举例来说,x86指令集架构可支持PCIDs、VPIDs与EPTEs。处理器一次无效化一个相关的TLB项目的实施方式会需要相对较长的时间来执行指令,尤其是在TLB较大且具有多个项目需要被无效化的情形。相较之下,本文所描述的实施例则可支持多个TLB项目的同时无效化。
此外,为了避免在各个TLB项目内纳入大量比特以储存处理器指令集架构所支持的整个地址转译内容空间所需要的信息,本文所述的实施例将此大空间映射至远小于此空间的非架构空间,如此,TLB项目内只须纳入少量比特。然而,当新的地址转译内容需要被映射至较小的非架构空间内时,就需要针对非由此非架构空间所映射的一地址转译空间,无效化其相关的TLB项目。本文所描述的实施例使处理器可以同时无效化所有与待映射的地址转译内容相关的TLB项目。这些实施例并考量到区域与全域地址转译的性质不同,而能支持此二种类型的TLB项目的无效化处理。
现在请参照图1,此图是一处理器100的方块示意图。此处理器100包含一指令快取102、一包含微码(microcode)106的指令转译器104、执行单元112、架构寄存器114、一存储器子***122、一快取存储器阶层架构(cachememory hierarchy)118与一总线接口单元116。其他功能单元(图中未显示)可包含一表移动引擎(table walk engine),执行转译表移动以产生虚拟至物理的地址转译;分支预测器(branch predictor);一重排缓冲器;保留站;一指令排程器(instruction scheduler);与数据预撷取单元(data prefetch unit)等等。在一实施例中,此微处理器100具有一超纯量微架构(superscalarmicroarchitecture),而能在单一时钟周期发布多个指令给执行单元112执行。在一实施例中,微处理器100大致符合x86指令集架构,不过也可能符合其他不同的指令集架构。
指令快取102储存(cache)撷取自***存储器的架构指令,而此***存储器与总线接口单元116互相沟通。就一较佳实施例而言,TLB关联于储存地址转译供指令使用的指令快取102,例如图2的TLB 206。在一实施例中,指令转译器104将撷取自指令快取102的架构指令转译为此微处理器100的微架构的微指令集的微指令。执行单元112执行这些微指令。这些由架构指令转译出的微指令可实现架构指令。
执行单元112由架构寄存器114(或是由重排缓冲器或一转送总线)接收源运算元(source operand)。这些运算元由存储器通过存储器子***122载入寄存器114。存储器子***122可将数据写入快取存储器阶层结构118(例如:第一层数据快取、第二层快取、第三层快取)或将数据读出。就一较佳实施例而言,各个快取存储器具有一相关联的TLB,如图2的TLB 206。若是在快取阶层结构118的最末层快取发生快取失误(cache miss),总线接口单元116就会针对数据或指令快取线(cache line)发出请求,而从***存储器撷取快取线。
存储器子***122(例如表移动引擎)并于***存储器存取转译表(例如,x86指令集架构所称的分页结构(paging structure))来执行页表移动以产生虚拟至物理的地址转译。在后续步骤中,此地址转译会载入处理器100的TLB,例如图2的TLB 206。这部分在后续的图4中会有更详细的说明。在一转译表阶层结构中,前述转译表可包含映射至页的表(例如:x86指令集架构的页表),或是参照至其他转译表的表(例如:x86指令集架构的页目录、页目录指针表、PML4表)。此转译表并可包含将虚拟的物理地址(virtualizedphysical address)(例如x86指令集架构中的客户物理地址(guest physicaladdress),而相对应的转译表则为扩展页表(extended page table,EPT))是指映射至真实的物理地址(trun physical address)的表(例如x86指令集架构中的主机物理地址(host physical address))。
就一较佳实施例而言,处理器100包含一微码单元(microcode unit)。微码单元包含一用以储存微码106或微码例程(microcode routine)的微码存储器,以及一用以从微码存储器撷取微码指令的微序列器(microsequencer)。在一实施例中,这些微码程序是微指令。在一实施例中,这些微码指令则是会被转译为微指令。微码106可实现某些架构指令,例如特别复杂的架构指令。在一实施例中,图11、图12、图15、图21至图24中分别显示的MOV CR4、MOV CR3、VMLAUNCH/VMRESUME、RSM、INVPCID、INVVPID与INVEPT指令由微码106加以实现。此外,微码106并可执行处理器100的其他功能。在一实施例中,微码106处理图19与图20分别显示的虚拟机器退出(VM exit)与SMIs,详见后述。
现在请参照图2,此图是一方块图详细显示图1的处理器100。此处理器100包含一转译后备缓冲器(translation lookaside buffer,TLB)206、一耦接于TLB 206的映射模块(mapping module)204、一耦接于TLB 206与映射模块204的存储器子***122、以及耦接于映射模块204的一区域内容表(local contexttable)212与一全域内容表(global context table)214。映射模块204包含微码、一硬件状态机器(hardware state machine)、或是其组合。映射模块204接收一进程内容标识符(process context identifier,PCID)252、一虚拟处理器标识符(virtual processor identifier,VPID)254、与一扩展页表指针(extended page tablepointer,EPTP)256。映射模块204会响应于各种事件,例如改变当前地址转译内容与/或无效化地址转译内容的指令,来接收PCID 252、VPID 254与EPTP256,详见后述。响应于所接收的PCID 252、VPID 254与EPTP 256,映射模块204可通过产生一无效化区域(INV_LOCAL)比特向量232与/或一无效化全域(INV_GLOBAL)比特向量234分别同时无效化TLB 206内的多个区域地址转译与/或多个全域地址转译。其操作过程如后续图6至图8的描述,而其用途如后续图11、图13至图14、图16、图18至图20与图22至图24的描述。
此外,响应于所接收的PCID 252、VPID 254与EPTP 256,映射模块204可更新当前区域内容标识符(CUR_LID)242与/或当前全域内容标识符(CUR_GID)244。CUR_LID 242与CUR_GID 244会识别当前地址转译内容。特别是,CUR_LID 242会识别当前地址转译内容的区域存储器页,而CUR_GID 244会识别当前地址转译内容的全域存储器页,详见后述。就一较佳实施例而言,CUR_LID 242是一编码值(encoded value),解码器262将CUR_LID 242解码并提供一查找区域有效(LOOKUP_LVAL)的解码独热(one-hot)比特向量272(即一个比特被设定而其他比特被清除)至TLB 206。CUR_GLD 244是一编码值,解码器264将CUR_GID 244解码并提供一查找全域有效(LOOKUP_GVAL)的解码独热比特向量274至TLB 206。其他表示CUR_LID 242与CUR_GID 244的实施例亦可用于本发明。举例来说,他们可以用解码后的形式进行储存,并直接提供至TLB 206而无需使用解码器262/264。
当存储器子***122想要针对TLB 206内的存储器页的虚拟地址执行一查找(lookup)动作,它会提供查找地址(LOOKUP_ADDR)276给TLB 206。LOOKUP_LVAL 272与LOOKUP_GVAL 274也会提供给TLB 206并被纳入此查找中。TLB 206会利用一命中指标(hit indicator)224指出是否有命中(hit)发生,若有,就提供转译后地址(TRANSLATED_ADDR)226至存储器子***122。此操作详见后续图4的描述。
现在请参照图3,此图是TLB 206的一项目300的方块示意图。TLB 206的各个项目300都包含一区域有效比特向量(LVAL)302、一全域有效比特向量(GVAL)304、一虚拟页地址(VPADDR)306与一物理页地址(PPADDR)308。在一实施例中,LVAL 302包含四个比特且GVAL 304包含四个比特。LVAL302、GVAL 304与VPADDR 306在一起即为此项目300的地址转译。就一较佳实施例而言,TLB项目300并具有权限比特(permissions bit)(未图示)来设定与页有关的权限。
在一实施例中,映射模块204可确保:(1)各个LID映射自一唯一的VPID:EPTP:PCID组合(扩展页表的特征生效)、VPID:PCID组合(扩展页表的特征失效)、或PCID(虚拟处理器标识符的特征失效);(2)各个GID映射自一唯一的VPID:EPTP组合(扩展页表的特征生效)或VPID(扩展页表的特征失效);(3)若是TLB 206的项目300是一有效全域地址转译(如:GVAL304为非零),它就不会是一有效区域地址转译(LVAL 302为零);反之,(4)若是TLB 206的项目300是一有效区域地址转译(如:LVAL 302为非零),它就不会是一有效全域地址转译(GVAL 304为零)。如此可产生以下优点:(1)映射模块204可同时无效化所有TLB 206的全域地址转译;以及(2)映射模块204可同时无效化所有TLB 206的区域地址转译。此外,映射模块204并不保证LID会映射自特别的PCID。也就是说,相同的PCID值可由多个虚拟处理器设定而映射至不同的ILD。同样地,映射模块204亦可使多个ILD关联于一给定的GID。不过,反之则否,亦即,映射模块204不会使多个GID关联于一给定的ILD。不过,在处理器100操作的某个阶段,每个ILD可对应至一个唯一的GID,例如:在GID的数量等于ILD的数量(标识符为N)的实施例中,有N个虚拟处理器各自设定一个PCID。
现在请参照图4,此图是一流程图显示图1的处理器100填入TLB 206的项目300的操作流程。此流程始于步骤402。
在步骤402中,存储器子***122检测到TLB 206内的查找地址276显示为未命中(miss)而执行表移动(tablewalk)以产生一地址转译。亦即,存储器子***122利用当前地址转译内容来将未命中的查找地址276转译至一物理地址。存储器子***122可包含一表移动引擎(未图示)以执行表移动。表移动可包含使用遗留页结构(legacy paging structure)(例如x86指令集架构的页描述子基址(page descriptor base address)、页描述子表(page descriptor table)与页表项目)的部分以及与处理器100的虚拟机能力有关的扩展页表(例如x86指令集架构的虚拟机扩展(Virtual Machine eXtensions,VMX)扩展页表指针(EPTP)与扩展页表(EPT))。接下来前进至步骤404。
在步骤404中,存储器子***122在TLB 206内选择一项目来取代。在一实施例中,TLB 206是一集合关联快取(set-associative cache),而此TLB 206的各个集合包含有取代信息,例如最近最少使用(least recently used,LRU)的信息或伪LRU的信息,而存储器子***122依据取代信息的指示,在设有目录的集合中,选择要取代的项目。接下来前进至步骤406。
在决策步骤406中,存储器子***122确认此地址转译为全域转译或区域转译。就一较佳实施例而言,存储器子***122依据步骤402中执行表移动所用的当前地址转译内容的信息来进行此确认动作。若为全域转译,此流程就前进至步骤412;否则就前进至步骤408。
在步骤408中,存储器子***122会将一个因为是区域地址转译而为零的GVAL 304、一个等于LOOKUP_LVAL 272以代表CUR_LID 242的LVAL302、一个等于未命中的LOOKUP_ADDR 276的VPADDR 306与一个等于转译后地址(即步骤402的表移动所产生的物理地址)的PPADDR 308填入前述步骤404所选定的TLB 206的项目300内。流程到此结束。
在步骤412中,存储器子***122会将一个等于LOOKUP_GVAL 274以代表CUR_GID 244的GVAL 304、一个因为是全域地址转译而为零的LVAL302、一个等于未命中的LOOKUP_ADDR 276的VPADDR 306与一个等于转译后地址(即步骤402的表移动所产生的物理地址)的PPADDR 308填入前述步骤404所选定的TLB 206的项目300内。流程到此结束。
现在请参照图5,此图是一方块示意图显示一位于TLB 206内的逻辑500以确认查找过程中是否发生命中。如图5所示,逻辑500(除了OR功能534)对应至TLB 206的单一项目300以确认此项目是否产生命中。需要理解的是,对于一全关联(fully associative)的实施例,TLB 206内的逻辑500用于每一个项目300,为简化说明,此特征并未显示于附图中。而对于一集合关联(setassociative)的实施例,逻辑500则是用于各个路(per way)。TLB 206的所有项目300的命中指标524会由OR功能534执行逻辑或(OR-ed)的布尔(Boolean)运算,以产生图1所示的TLB 206的命中指标224。需要理解的是,在图5与其他附图中所显示的多种布尔逻辑功能对应有布尔门(Boolean gate)(例如AND门、OR门),而这些布尔门可进行合成或客制化设计;不过,此逻辑500亦可包含其他已知可执行所示布尔逻辑功能(例如:线或(wired-OR))的硬件元件,并且可以由多种逻辑类型,包含静态或动态逻辑,来加以实现。本实施例可以同时无效化TLB 206的区域与/或全域地址转译,不论其底下的处理技术或逻辑类型为何。
此逻辑500具有比较LOOKUP_LVAL 272与项目300的LVAL 302的第一比较功能522,其输出作为布尔OR功能528的二个输入中的第一个输入。此逻辑500并具有比较LOOKUP_GVAL 274与项目300的GVAL 304的第二比较功能524,而其输出作为前述布尔OR功能528的第二个输入。布尔OR功能528的输出作为一布尔AND功能532的二个输入中的第一个输入。而此逻辑500并具有比较LOOKUP_ADDR 276与项目300的VPADDR 306的第三比较功能522,其输出作为布尔AND功能532的第二个输入。布尔AND功能532所输出的信号就是命中指标,在LOOKUP_LVAL 272与LVAL 302一致、LOOKUP_GVAL 274与GVAL 304一致且LOOKUP_ADDR 276与VPADDR 306一致时,命中指标为真,否则即为假。
在图5中可以观察到,TLB 206内的各个区域地址转译由其相对应的LVAL 302来进行确认,LVAL即为其区域内容标识符(local context identifier)的代表,而各个全域地址转译由其相对应的GVAL 304来进行确认,GVAL即为其全域内容标识符(global context identifier)的代表。LOOKUP_LVAL 272与LOOKUP_GVAL 274包含在TLB 206的查找中。不过,在LOOKU_ADDR276与VPADDR 306一致的情况下,为了使命中发生,只需要LOOKUP_LVAL272与LVAL 302一致,或是LOOKUP_GVAL 274与GVAL 304一致,而不需要二者,即整个标识符(tag),都一致。因此,如同对应于图4与图5的操作所能观察到,为了使用来自TLB 206的地址转译,从VPADDR 306转译出PPADDR 308所使用的地址转译内容,必须是与CUR_LID 242相关联的地址转译内容或是多个与CUR_GID 244相关联的地址转译内容的其中之一。
现在请参照图6,此图是一方块示意图显示一逻辑600,用以无效化TLB206(请参照图2)的项目300(请参照图3)的LVAL比特向量302的比特。图6显示LVAL比特向量302的单一个比特。此比特的储存装置可以是一正反器(flip-flop)、一存储器阵列比特胞(memory array bit cell)、或其他比特储存装置。布尔求反(invert或NOT)功能604接收INV_LOCAL比特向量232的比特,此比特对应于LVAL比特向量302的比特。举例来说,用于LVAL比特向量302的比特[2]的布尔求反功能604接收INV_LOCAL比特向量232的比特[2]。比特求反功能604的输出作为布尔AND功能606的二个输入中的第一个输入。布尔AND功能606并接收LVAL比特向量302的当前值做为其第二个输入。布尔AND功能606的输出开始做为LVAL比特向量302的新值。因此,映射模块204可通过设定INV_LOCAL比特向量232的相对应比特,来清除LVAL比特向量302内的任何比特。
虽然图6所显示的逻辑600仅用于单一个比特,不过在TLB 206内可对此逻辑600进行复制,以适用到各个项目300的LVAL比特向量302的各个比特。通过设定INV_LOCAL比特向量232的比特,映射模块204可针对TLB206的每个项目300,清除其LVAL比特向量302的相对应比特。因为对于各别的地址转译内容的所有区域地址转译而言,相对应的LVAL 302的各个比特位置均为有效比特,因此,无效化逻辑600能够使映射模块204同时无效化TLB 206内用于各别的地址转译内容的所有区域地址转译。此方式会比依序无效化TLB 206的所有区域地址转译的处理方式来的快。而随着TLB 206增大(例如:具有一大型末层(last-level)的TLB 206),所能节省的时间也变得更为明显。
对于各个项目的GVAL比特向量304的各个比特,TLB 206具有类似的逻辑600来处理,不过,此逻辑600接收INV_GLOBAL比特向量234的比特,而非INV_LOCAL比特向量232的比特。通过设定INV_GLOBAL比特向量234的比特,映射模块204可针对TLB 206的每个项目300,清除其GVAL比特向量304的相对应比特。因为对于各别的地址转译内容的所有全域地址转译而言,相对应的GVAL 304的各个比特位置均为有效比特,因此,无效化逻辑600能够使映射模块204同时无效化TLB 206内用于各别的地址转译内容的所有全域地址转译,而具有与前述无效化区域地址转译相同的优点。
虽然在图中并未显示,不过,此逻辑600可具有其他功能来来设定或清除LVAL/GVAL比特向量302/304的比特。举例来说,为了配合图4的步骤408与412的需求,存储器子***122可将此比特写为二元状态(binary state)的其中之一。此外,存储器子***122可清除TLB 206的一特别集合(set)与路(way)的LVAL比特302,如同图22与图23所示的步骤2214或步骤2308所需的处理过程。就一较佳实施例而言,在比特302前方设有多工功能(未图示),其多个输入的其中之一接收布尔AND功能606的输出,而其他输入则是接收其他前述逻辑的输出。
值得注意的是,在必要的时候,可通过分别设定INV_LOCAL比特向量232与INV_GLOBAL比特234向量的比特,同时清除LVAL 302与GVAL 304的比特。举例来说,存储器子***122可在步骤1828、2318、2326、2408与2414中执行此操作。最后,在必要的时候,可通过分别设定INV_LOCAL比特向量232与INV_GLOBAL比特向量234的所有比特,同时清除LVAL 302与GVAL 304的所有比特。举例来说,存储器子***122可在步骤1602、1914与2004中执行此操作。
现在请参照图7,此图是一方块示意图显示图1的处理器100内的一控制寄存器700。在一实施例中,微码106可写入此控制寄存器700以无效化TLB 206的地址转译。此控制寄存器700包含INV_LOCAL比特702、INV_GLOBAL比特704、INV_ALL_LOCALS比特706、INV_ALL_GLOBALS比特708与INV_ALL比特712。映射模块204响应于这些比特的设定所执行的操作将会在后续图8中进行描述。
现在请参照图8,此图是一流程图显示映射模块204响应于图7所示的控制寄存器700中各个不同比特的设定所执行的操作。此流程始于步骤802。
在步骤802中,此控制寄存器700中一个或多个比特被设定,例如被微码106设定。接下来前进至步骤804。
在决策步骤804中,若是INV_LOCAL比特702被设定,流程会前进至步骤806;否则就会前进至决策步骤814。
在步骤806中,映射模块204对CUR_LID 242解码以产生一独热(one-hot)比特向量值,并主张此位于INV_LOCAL比特向量232上的数值。对TLB 206的任何项目300,此数值清除LVAL 302中对应于INV_LOCAL比特向量232中被设定比特的比特,以无效化TLB 206内使用当前地址转译内容进行转译的所有区域地址转译。接下来前进至决策步骤814。
在决策步骤814中,若是INV_GLOBAL比特704被设定,流程会前进至步骤816;否则就会前进至决策步骤824。
在步骤816中,映射模块204对CUR_GID 244解码以产生一独热比特向量值,并主张此位于INV_GLOBAL比特向量234上的数值。对TLB 206的任何项目300,此数值清除GVAL 304中对应于INV_GLOBAL比特向量234中被设定比特的比特,以无效化TLB 206内使用当前地址转译内容进行转译的所有全域地址转译。接下来前进至决策步骤824。
在决策步骤824中,若是INV_ALL_LOCALS比特706被设定,流程会前进至步骤826;否则就会前进至决策步骤834。
在步骤826中,映射模块204会主张所有INV_LOCAL比特向量232的比特,而对于TLB 206的任何项目300,这些比特会清除LVAL 302的所有比特,而无效化TLB 206内使用任何地址转译内容进行转译的所有区域地址转译。接下来前进至决策步骤834。
在决策步骤834中,若是INV_ALL_GLOBALS比特708被设定,流程会前进至步骤836;否则就会前进至决策决策步骤844。
在步骤836中,映射模块204会主张INV_GLOBAL比特向量234的所有比特,而对于TLB 206的任何项目300,这些比特会清除GVAL 304的所有比特,而无效化TLB 206内使用任何地址转译内容进行转译的所有全域地址转译。接下来前进至决策步骤844。
在决策步骤844中,若是INV_ALL比特712为设定,流程会前进至步骤846;否则流程就会终止。
在步骤846中,映射模块204会主张INV_LOCAL比特向量232与INV_GLOBAL比特向量234的所有比特,而对于TLB 206的任何项目300,这些比特会清除LVAL 302与GVAL 304的所有比特,而无效化TLB 206内使用任何地址转译内容进行转译的所有地址转译。此流程终止于此。
现在请参照图9,此图是一方块示意图详细显示图2的区域内容表212。各个项目包含一有效比特906、一全域内容标识符(global context identifier,GID)904、一区域内容标识符(local context identifier,LID)902、一进程内容标识符(process context identifier,PCID)908与一地址转译内容基址(addresstranslation context base address,ATCB)912。对于区域内容表212的各个项目,GID 904会指向图10的全域内容表214中具有匹配的GID 1004数值的项目。映射模块204确保区域内容表212的各个有效项目都具有一唯一的LID 902数值,而全域内容表214的各个有效项目都具有一唯一的GID 1004数值。举例来说,就一x86指令集架构而言,PCID 908对应于一x86的PCID而ATCB912对应于CR3寄存器中设定页目录基址(page directory base address)的比特[63:12]。在一实施例中,CR3寄存器的比特[63:36]位被使用。在图9的实施例中,区域内容表212包含四个项目而各个LID 902均为二比特编码值,即表示非架构区域内容标识符空间(non-architectural local context identifier space)的大小为四。在一实施例中,亦表示同时至多四个地址转译内容的地址转译可以在TLB 206内生效。不过,本发明并不限于此,具有不同数量项目与LID902比特的实施例亦可适用于本发明。在一实施例中,映射模块204通过清除有效比特906、对区域内容表212的各个项目的LID 902指定唯一值、并使剩下的字段归零,来开始区域内容表212的运作。在一实施例中,映射模块204使区域内容表212的项目维持在一推迭状态,其中置顶(top most)的项目为最近最常使用(most recently used)的项目,而置底(bottom)的项目为最近最少使用(least recently used)的项目。最近最少使用(置底)的项目会被重新配置。映射模块204通过将一项目置顶来使其为最近最常使用的项目,并在必要时下移其他项目。区域内容表212与其字段的操作在后续其他附图中会有更详细的说明。
现在请参照图10,此图是一方块示意图详细显示图2的全域内容表214。各个项目包含一有效比特1006、一全域内容标识符(global context identifier,GID)1004、一虚拟处理器标识符(virtual processor identifier,VPID)1008与一扩展页表指针(extended page table pointer,EPTP)1012。举例来说,就一x86指令集架构而言,VPID 1008对应于一x86VMX虚拟处理器标识符(VPID),而EPTP 1012对应于虚拟机器控制结构(virtual machine control structure,VMCS)特定的VMX EPTP。在图10的实施例中,全域内容表214包含四个项目而各个GID 1004均为二比特编码值,即表示非架构全域内容标识符空间(non-architectural global context identifier space)的大小为四。不过,本发明并不限于此,具有不同数量项目与GID 904比特的实施例亦可适用于本发明。在一实施例中,映射模块204通过清除有效比特1006、对全域内容表214的各个项目的GID 1004指定唯一值、并使剩下的字段归零,来开始全域内容表214的运作。在一实施例中,映射模块204使全域内容表214的项目维持在一类似于前述区域内容表212的推迭状态。全域内容表214与其字段的操作在后续其他附图中会有更详细的说明。由本文描述可以发现,LID与GID的关联状态会随着处理器100执行的操作而改变。举例来说,在图9与图10的实施例中,一个给定的GID可能有一个到四个相关联的LID。不过,若是多于一个LID关联至一个GID,就会减少当前生效的GID的数量。举例来说,若是各个GID具有两个相关联的LID,就只会有两个GID生效。
在x86指令集架构的实施例中,在非虚拟机扩展(non-VMX)线性地址空间的情况下,VPID与EPTP会被设定为零;而在虚拟机扩展主机(VMX host)的情况下,VPID与EPTP会被设定为零。因此,在x86指令集架构的一实施例中,映射模块204会将全域表214的一项目(置顶项目、项目零)视为特殊项目,因为此项目总是有效(即有效(V)比特1006在一开始会赋予一设定值,并且始终维持在设定状态)、从不会被取代(例如:此项目绝不会是最近最少使用项目)以及总是保持在VPID 1008与EPTP 1012被设为零的情况。在LID的数量有限但又需要将大量地址转译内容映射置这些LID的情况下,可以减少需要执行的TLB 206地址转译无效化。在一实施例中,区域内容表212与全域内容表214被保留在处理器100的一私有存储器(PRAM)内。
现在请参照图11,此图是一流程图显示图1的处理器100执行指令使处理器100的架构特征失效的操作,而此处理器100支持多个进程内容标识符(process context identifier)。此流程始于步骤1102。
在步骤1102中,处理器100遭遇到一个使处理器100的架构特征失效的指令。此处理器100支持多进程内容标识符。举例来说,在x86指令集架构的实施例中,此指令可以是MOV CR4指令,其可清除PCIDE比特,而使x86PCID特征失效。接下来前进至步骤1104。
在步骤1104中,响应于在步骤1102中遭遇到的指令,映射模块204在区域内容表212寻找所有具有非零PCID值的项目。接下来前进至步骤1106。
在步骤1106中,对于在步骤1104于区域内容表212内找到的各个项目,映射模块204会(1)无效化TLB 206内,关联于区域内容表212匹配项目的LID902的区域地址转译(例如:通过解码LID 902并将此解码值用于INV_LOCAL比特向量232);(2)无效化此区域内容表212的匹配项目。此实施例假定PCID为零是一有效值,亦即当PCID特征失效时,PCID为零。如此即可使与PCID为零有关的TLB 206地址转译维持完好。接下来前进至步骤1106。
现在请参照图12,此图是一流程图显示图1的处理器100执行指令以改变当前地址转译内容的操作。此流程始于步骤1202。
在步骤1202中,处理器100遭遇到一个改变当前地址转译内容的指令。举例来说,在x86指令集架构的实施例中,此指令可以是MOV CR3指令。接下来前进至步骤1204。
在步骤1204中,响应于在步骤1202中遭遇到的指令,在一定条件出现的情况下,处理器100会作为一虚拟机器监视器(hypervisor)。在一实施例中,此指令由微码106所实现。举例来说,在x86指令集架构的实施例中,虚拟机器监视器是VMX主机,而条件为一个VMX客户(guest)执行MOV CR3指令,并且响应于此MOV CR3指令,存在错误或VMX控制标识符VM退出。接下来前进至步骤1206。
在步骤1206中,对一例程(routine)(在此称为MOV_CR3())进行呼叫(call)。此例程会在图13加以说明。需要理解的是,虽然步骤1206的操作称为对于例程(以及本文所述的其他操作)的呼叫,在图11至图25所描述的功能可以利用硬件、微码、或是其组合来实现。此流程终止于步骤1206。
现在请参照图13,此图是一流程图,显示图1的处理器100执行图12的步骤1206(以及图19与图21的步骤1918与2106)所呼叫的MOV_CR3()例程1300的操作。此流程始于步骤1304。
在步骤1304中,映射模块204在区域内容表212寻找PCID值的一有效匹配作为MOV_CR3()例程1300的输入。当例程在步骤1206被呼叫后,PCID输入值就会是步骤1202的指令所特定的值。当例程在步骤1918或在步骤2106被呼叫后,PCID输入值就会是虚拟机器监视器的PCID值,而在x86VMX的实施例中,此数值为零。接下来前进至步骤1306。
在步骤1306中,映射模块204确认步骤1304是否存在匹配。若是,流程前进至步骤1322;否则就前进至步骤1308。
在步骤1308中,呼叫ALLOCATE_LOCAL_CONTEXT()例程。此例程会在图14加以说明。接下来前进至步骤1312。
在步骤1312中,传递至MOV_CR3()例程的CR3寄存器输入值被载入架构寄存器CR3。在步骤1206呼叫例程后,CR3输入值就会是由步骤1202的指令所特定的值。当例程在步骤1918或在步骤2106被呼叫后,CR3输入值就会是虚拟机器监视器的CR3值。而在非x86的实施例中,则是载入类似于CR3寄存器的架构寄存器。接下来前进至步骤1314。
在步骤1314中,映射模块204利用步骤1308配置的区域内容表212项目的LID 902与GID 904,分别更新CUR_LID 242与CUR_GID 244。接下来,前进至步骤1316,流程会回到MOV_CR3()例程被呼叫的时候。
在步骤1322中,映射模块204将区域内容表212的匹配项目(即步骤1304找到的项目)作为最近最常使用项目。接下来前进至步骤1324。
在步骤1324中,映射模块204利用区域内容表212的匹配项目的LID 902与GID 904,分别更新CUR_LID 242与CUR_GID 244。接下来前进至决策步骤1326。
在决策步骤1326中,映射模块204确认所呼叫的MOV_CR3()例程是否呼应VM进入或退出。若是,流程前进至决策步骤1328;否则就前进至步骤1334。
在决策步骤1328中,映射模块204确认VPID特征是否开启。若是,前进至步骤1322,流程会回到MOV_CR3()例程被呼叫的时候;否则就前进至步骤1334。
在步骤1334中,若是寄存器CR3的比特63的值为零,映射模块204会无效化TLB 206中与CUR_LID 242值有关的区域地址转译(例如:通过解码CUR_LID 242并将解码值用于INV_LOCAL比特向量232)。也就是说,映射模块204会无效化用于当前地址转译内容的区域地址转译。接下来,前进至步骤1336,流程会到MOV_CR3()例程被呼叫的时候。
现在请参照图14,此图是一流程图显示图1的处理器100执行图13的步骤1308(以及图16与图17的步骤1606与1722)所呼叫的ALLOCATE_LOCAL_CONTEXT()例程1400的操作。此流程始于步骤1404。
在步骤1404中,映射模块204确认区域内容表212的最近最少使用项目来进行配置。不过,本发明并不限于此,使用最近最少使用(LRU)以外的其他运算方式来进行取代的实施例亦可适用于本发明。接下来前进至步骤1406。
在步骤1406中,映射模块204无效化TLB 206内与步骤1404配置的区域内容表212项目的LID 902有关的区域地址转译。也就是说,此映射模块204会无效化用于被逐出(evicted)的地址转译内容的区域地址转译。接下来前进至步骤1408。
在步骤1408中,映射模块204计算区域内容表212的项目的新值。特别是,此映射模块204会:保留LID 902字段的数值,亦即,此新项目会承接其所要取代的项目的LID 902值;将CUR_GID 244值填入GID 904字段,以使区域内容表212的项目连结至适当的全域内容表214的项目;以及在PCID908与ACTB 912的字段中,填入传递至ALLOCATE_LOCAL_CONTEXT()例程的相对应数值。若是此例程响应于一RSM(请参照图21)而从MOVTOCR3VPID、MOVTOCR3NOVPID或MOV_CR3()中呼叫,PCID与ACTB的值就会是由SMI中断的进程的值。若是此例程响应于一VM项目(请参照图15)而从MOVTOCR3VPID或MOVTOCR3NOVPID中呼叫,PCID与ACTB的值就会是由接收到控制权的虚拟处理器的VMCS取得的值。若是此例程响应于一VM退出(exit)(请参照图19)而从MOV_CR3()呼叫,PCID与ACTB的值就会是虚拟机器监视器的值。若是此例程响应于一MOV CR3指令(请参照图12)而从MOV_CR3()呼叫,PCID与ACTB的值就会是由指令特定的值。映射模块204接下来会将计算出来的新值载入步骤1404所配置的项目,并将其配置为最近最常使用项目。接下来,在步骤1412,流程会到ALLOCATE_LOCAL_CONTEXT()例程被呼叫的时候。
现在请参照图15,此图是一流程图显示图1的处理器100在虚拟机器监视器至客户的移转过程的操作。此流程始于步骤1502。
在步骤1502中,发生虚拟机器监视器至客户的移转。举例来说,在x86指令集架构的实施例中,此移转被称为VM进入(entry),会响应于VMXVMLAUNCH或VMRESUME指令的执行而发生。接下来前进至步骤1504。
在步骤1504中,映射模块204从VMCS取得新的PCIDE值与CR3寄存器的新值,此新值包含一新的PCID值。接下来前进至步骤1506。
在步骤1506中,映射模块204确认VIPD特征是否开启。若是,流程前进至步骤1508;否则就前进至步骤1512。
在步骤1508中,此流程移转至图17所描述的例程MOVTOCR3VPID。
在步骤1512中,此流程移转至图16所描述的例程MOVTOCR3NOVPID。
现在请参照图16,此图是一流程图显示图1的处理器100执行例程MOVTOCR3NOVPID 1600的操作。此流程始于步骤1602。
在步骤1602中,映射模块204无效化TLB 206的所有地址转译。接下来流程前进至步骤1604。
在步骤1604中,映射模块204使区域内容表212与全域内容表214开始运作。此外,映射模块204将全域内容标识符的一暂时值设定为零,以传递给ALLOCATE_LOCAL_CONTEXT()例程(请参照图14)。接下来流程前进至步骤1606。
在步骤1606中,映射模块204呼叫ALLOCATE_LOCAL_CONTEXT()例程。接下来前进至步骤1608。
在步骤1608中,架构寄存器CR3中载入传递至ALLOCATE_LOCAL_CONTEXT()例程的CR3寄存器输入值。此例程的数值将会是由SMI中断的进程的值(RSM的实施例)或是从接收到控制权的虚拟处理器的VMCS取得的值(VM进入的实施例)。接下来前进至步骤1612。
在步骤1612中,映射模块204以零值更新CUR_LID 242与CUR_GID244。此流程终止于此。
现在请参照图17,此图是一流程图显示图1的处理器100执行例程MOVTOCR3VPID 1700的操作。流程始于步骤1712。
在步骤1712中,映射模块204呼叫图18所描述的例程ALLOCATE_GLOBAL_CONTEXT()。接下来前进至步骤1714。
在步骤1714中,若是PCIDE比特为零,映射模块204就会将新的PCID值设定为零。接下来前进至步骤1716。
在步骤1716中,映射模块204在区域内容表212寻找由步骤1712的呼叫步骤取得的全域内容标识符与新的PCID值的一有效匹配。此新的PCID值由步骤1504或是图21的步骤2116恢复(resume)控制的VMX客户的VMCS取得。接下来前进至决策步骤1718。
在决策步骤1718中,若是在步骤1716中找到匹配项目,流程就会前进至步骤1724;否则就会前进至步骤1722。
在步骤1722中,映射模块204呼叫ALLOCATE_LOCAL_CONTEXT()例程(请参照图14)。接下来前进至步骤1726。
在步骤1724中,映射模块204将区域内容表212的匹配项目作为最近最常使用项目。此映射模块204并使新的区域内容标识符等于区域内容表212的匹配项目的LID 902。接下来前进至步骤1726。
在步骤1726中,架构寄存器CR3中载入CR3寄存器输入值。此新的CR3数值由步骤1504或是图21的步骤2116恢复(resume)控制的VMX客户的VMCS取得。接下来前进至步骤1728。
在步骤1728中,映射模块204以步骤1712取得的新的全域内容标识符更新CUR_GID 244并以步骤1722或步骤1724取得的新的区域内容标识符更新CUR_LID 242。此流程终止于此。
现在请参照图18,此图是一流程图显示图1的处理器100执行图17的步骤1712所呼叫的ALLOCATE_GLOBAL_CONTEXT()例程1800的操作。此流程始于步骤1802。
在步骤1802中,映射模块204从赋予控制权的VMX客户的VMCS取得VPID与EPTP。接下来前进至步骤1804。
在步骤1804中,若是EPT特征关闭,映射模块204就会将EPTP设为零。接下来前进至步骤1806。
在步骤1806中,映射模块204从全域内容表214寻找VIPD与EPTP的一有效匹配。在前文图10所描述的实施例中,置顶项目为特殊项目,而此步骤只会寻找非特殊项目,因此,此特殊项目不会被重新配置,也不会与VMX客户建立关联。接下来前进至步骤1808。
在步骤1808中,映射模块204确认步骤1806是否找到匹配。若是,流程前进至步骤1812;否则就前进至步骤1822。
在步骤1812中,映射模块204将全域内容表214的匹配项目作为最近最常使用项目。接下来前进至步骤1814。
在步骤1814中,映射模块204以此全域内容表214的匹配项目的GID1004值更新CUR_GID 244。接下来,在步骤1816,此流程会回到呼叫ALLOCATE_GLOBAL_CONTEXT()例程的时候。
在步骤1822中,映射模块204确认全域内容表214的最近最少使用项目,以有效逐出此项目。然后,此映射模块204会对将被逐出的项目的GID 1004值指定一个变数EVICTED_GID。接下来前进至步骤1824。
在步骤1824中,映射模块204计算全域内容表214的项目的新值。特别是,映射模块204会以EVICTED_GID填入GID字段1004,并以传递至ALLOCATE_GLOBAL_CONTEXT()的相对应数值填入VPID 1008与EPTP1012。这些数值将会是由SMI中断的进程的值(RSM的实施例)或是从接收到控制权的虚拟处理器的VMCS取得的值(VM进入的实施例)。然后,映射模块204会以计算出来的新值载入在步骤1822中配置的项目。然后,映射模块204会将此项目设为最近最常使用项目。接下来前进至步骤1826。
在步骤1826中,映射模块204在区域内容表212寻找EVICTED_GID的一有效匹配。接下来前进至步骤1828。
在步骤1828中,对于步骤1826在区域内容表212找到的各个项目,映射模块204会(1)无效化TLB 206中,与匹配项目的LID 902有关的区域地址转译;(2)无效化TLB 206中,与EVICTED_GID有关的全域地址转译(例如:通过解码EVICTED_GID并将此解码值用于INV_GLOBAL比特向量234);(3)无效化区域内容表212的匹配项目。接下来,在步骤1832中,流程会回到呼叫ALLOCATE_GLOBAL_CONTEXT()例程的时候。
现在请参照图19,此图是一流程图显示图1的处理器100在由客户至虚拟机器监视器的移转过程的操作。此流程始于步骤1902。
在步骤1902中,发生客户至虚拟机器监视器的移转。举例来说,在x86指令集架构的实施例中,此移转被称为VM退出(exit),会响应于一定指令的执行(VM退出需要仰赖对于控制字段的设定)与非根虚拟化操作(VMXnon-root operation)的一定事件,如例外事件(exception)、中断(interrupt)、任务切换(task switch)与中断计时器触发(preemption timer tick)。接下来前进至步骤1904。
在步骤1904中,映射模块204从VMCS取得CR3寄存器的新值,此新值包含一新的PCID值,此数值为虚拟机器监视器的PCID值。接下来前进至步骤1906。
在步骤1906中,映射模块204会使EPT特征失效(因为虚拟机器监视器不需使用此特征)、将暂时全域内容标识符的变数与VPID设为零,这些数值是与虚拟机器监视器有关的数值。接下来前进至步骤1908。
在步骤1908中,架构寄存器CR3内载入步骤1904所取得的CR3寄存器值。接下来前进至决策步骤1912。
在决策步骤1912中,映射模块204确认VIPD特征是否开启。若是,流程前进至步骤1918;否则就前进至步骤1914。
在步骤1914中,映射模块204无效化TLB 206的所有地址转译。接下来前进至步骤1916。
在步骤1916中,映射模块204使区域内容表212开始运作。接下来前进至步骤1918。
在步骤1918中,此流程呼叫MOV_CR3()例程(请参照图13)。此流程终止于此。
现在请参照图20,此图是一流程图显示图1的处理器100进入***管理模式(system management mode,SMM)的移转过程的操作。此流程始于步骤2002。
在步骤2002中,发生进入***管理模式的移转过程,这也称为SMM进入。举例来说,在x86指令集架构的实施例中,此移转会通过一***管理中断(system management interrupt,SMI)发生。接下来前进至步骤2004。
在步骤2004中,映射模块204无效化TLB 206的所有地址转译。接下来前进至步骤2006。
在步骤2006中,映射模块204使区域内容表212与全域内容表214开始运作。接下来前进至步骤2008。
在步骤2008中,映射模块204以零值更新CUR_LID 242与CUR_GID244。此流程终止于此。
现在请参照图21,此图是一流程图显示图1的处理器100离开SMM的移转过程的操作。此流程始于步骤2102。
在步骤2102中,发生离开SMM的移转过程。举例来说,在x86指令集架构的实施例,在执行一返回原来模式(return from SMM,RSM)指令时,即会发生此移转。接下来前进至决策步骤2104。
在决策步骤2104中,映射模块204确认VMX特征是否关闭。若是,流程前进至步骤2106;否则就前进至决策步骤2112。
在步骤2106中,此流程呼叫MOV_CR3()例程(请参照图13)。接下来前进至步骤2108。
在步骤2108中,此流程跳跃(jump)至MOVTOCR3NOVPID(请参照图16)。此流程终止于此。
在决策步骤2112中,映射模块204确认此返回原来模式是否为返回至虚拟机器监视器,在x86指令集架构的实施例中,即为虚拟机扩展主机(VMXhost)。若是,流程前进至步骤2116;否则就前进至决策步骤2114。
在决策步骤2114中,映射模块确认VPID特征是否开启。若是,流程前进至步骤2116;否则流程就前进至步骤2108。
在步骤2116中,此流程跳跃至MOVTOCR3VPID(请参照图17)。此流程终止于此。
现在请参照图22,此图是一流程图显示处理器100执行指令以无效化TLB 206中与一进程内容标识符有关的地址转译的操作。此流程始于步骤2202。
在步骤2202中,处理器100遭遇到一个指令,会无效化TLB 206中与一进程内容标识符有关的地址转译。举例来说,在x86指令集架构的实施例中,此指令可以是INVPCID指令。接下来前进至步骤2204。
在步骤2204中,映射模块204在全域内容表214中寻找当前VPID的一有效匹配。若没有找到匹配,此流程就会终止。否则,映射模块204会将此全域内容表214的匹配项目的GID 1004指派给一暂时变数THIS_GID。接下来前进至决策步骤2206。
在决策步骤2206中,映射模块204确认指令类型(例如:x86INVPCID指令的寄存器运算元)是否为零。若是,流程前进至步骤2208;否则前进至决策步骤2216。
在步骤2208中,映射模块204在区域内容表212内寻找变数THIS_GID与INVPCID指令所特定的PCID的有效匹配。接下来前进至决策步骤2212。
在决策步骤2212中,映射模块204确认在步骤2208中是否找到匹配。若是,流程前进至步骤2214;否则流程就终止于此。
在步骤2214中,映射模块204将步骤2208找到的区域内容表212的匹配项目的LID 902指派给一暂时变数THIS_LID。然后,映射模块204无效化TLB 206中,关联于变数THIS_LID并具有由INVPCID指令所特定的虚拟地址(在x86指令集架构中,即为线性地址)的区域地址转译。TLB 206并具有一目录输入,选择TLB 206的一列(row)执行读取(read)或写入(write)。在一实施例中,TLB 206是一多路(multiple way)集合关联快取,并具有一额外输入来特定进行读取或写入的路(way)。在一实施例中,此目录/路输入可用于特定所要无效化的项目。在一实施例中,当存储器子***122执行一微码无效化页微指令(microcode invalidate page microinstruction)以特定一虚拟地址,此存储器子***122会在TLB 206中检测此虚拟地址的匹配,并接收命中此虚拟地址的目录/路。此外,存储器子***122会利用一最近最少使用项目的目录/路,将一项目配置于TLB 206内。此流程终止于步骤2214。
在决策步骤2216中,映射模块204确认类型是否为一。若是,流程前进至步骤2218;否则就前进至决策步骤2226。
在步骤2218中,映射模块204在区域内容表212内寻找THIS_GID与由INVPCID指令特定的PCID的有效匹配。接下来前进至决策步骤2222。
在决策步骤2222中,映射模块204确认在步骤2218中是否找到匹配。若是,流程前进至步骤2224;否则流程终止。
在步骤2224中,映射模块204将步骤2218中找到的区域内容表212的匹配项目的LID 902指派给一暂时变数THIS_LID。然后,此映射模块204无效化TLB 206内关联于变数THIS_LID的区域地址转译。此流程终止于步骤2224。
在决策步骤2226中,映射模块204确认类型是否为二。若是,流程前进至步骤2228;否则流程就前进至决策步骤2236。
在步骤2228中,映射模块204无效化TLB 206内关联于变数THIS_GID的全域地址转译。接下来前进至步骤2238。
在决策步骤2236中,映射模块204确认类型是否为三。若是,流程前进至步骤2238;否则前进至步骤2248。
在步骤2238中,映射模块204在区域内容表212内寻找THIS_GID的有效匹配。对于区域内容表212中每一个找到的项目,映射模块204会(1)将区域内容表212的匹配项目的LID 902指派为一暂时变数THIS_LID;以及(2)无效化TLB 206中,关联于变数THIS_LID的区域地址转译。此流程终止于步骤2238。
在步骤2248中,映射模块204会引起处理器100错误(fault)的产生,就x86指令集架构的实施例而言,即为一般保护错误(general protection fault)。此流程终止于步骤2248。
现在请参照图23A与图23B(整体称为图23),此图是一流程图显示处理器100执行指令以无效化TLB 206中关联于一虚拟处理器标识符(virtualprocessor identifier)的地址转译的操作。此流程始于步骤2302。
在步骤2302中,处理器100遭遇到一个指令,会无效化TLB 206中与一虚拟处理器标识符有关的地址转译。举例来说,在x86指令集架构的实施例中,此指令可以是INVVPID指令。接下来前进至决策步骤2304。
在决策步骤2304中,映射模块204确认指令类型(例如:x86INVVPID指令的寄存器运算元)是否为零。若是,流程前进至步骤2306;否则前进至决策步骤2314。
在步骤2306中,映射模块204在全域内容表214内寻找当前VPID的有效匹配。若是未找到匹配,此流程终止;否则,映射模块204会将全域内容表214内的匹配项目的GID 1004指派给一暂时变数THIS_GID。接下来前进至步骤2308。
在步骤2308中,映射模块204无效化关联于变数THIS_GID的全域地址转译。此映射模块204并于区域内容表212内寻找变数THIS_GID的有效匹配。对于区域内容表212中找到的各个匹配项目,映射模块204会(1)将区域内容表212的匹配项目的LID 902指派为一暂时变数THIS_LID;以及(2)无效化TLB 206内,关联于变数THIS_LID且具有特定于INVPCID指令内的虚拟地址(在x86指令集架构的实施例中,即为线性地址)的区域地址转译。此流程终止于步骤2308。
在决策步骤2314中,映射模块204确认指令类型是否为一。若是,流程前进至步骤2316;否则就前进至决策步骤2324。
在步骤2316中,映射模块204在全域内容表214内寻找当前VPID的有效匹配。若未找到匹配,此流程终止。否则,映射模块204会将全域内容表214内的匹配项目的GID 1004指派给一暂时变数THIS_GID。接下来前进至步骤2318。
在步骤2318中,映射模块204无效化关联于变数THIS_GID的全域地址转译。此映射模块204并于区域内容表212中寻找变数THIS_GID的有效匹配。对于区域内容表212中找到的各个匹配项目,映射模块204会(1)将区域内容表212的匹配项目的LID 902指派为一暂时变数THIS_LID;以及(2)无效化TLB 206内,关联于变数THIS_LID的区域地址转译。此流程终止于步骤2318。
在决策步骤2324中,映射模块204确认指令类型是否为二。若是,流程前进至步骤2326;否则流程前进至决策步骤2334。
在步骤2326中,映射模块204在全域内容表214中寻找每个非零VPID值的有效匹配。若未找到匹配,此流程终止;否则,对于全域内容表214的各个匹配项目,映射模块204会:(1)将全域内容表214的匹配项目的GID 1004指派为一暂时变数THIS_GID;(2)无效化TLB 206内,关联于变数THIS_GID的全域地址转译;以及(3)在区域内容表212中寻找变数THIS_GID的有效匹配,并且对于区域内容表212中各个找到的匹配项目,(A)将区域内容表212的匹配项目的LID 902指派为一暂时变数THIS_LID,以及(B)无效化TLB 206内,关联于变数THIS_LID的区域地址转译。此流程终止于步骤2326。
在决策步骤2334中,映射模块204确认指令类型是否为三。若是,流程前进至步骤2336;否则就前进至步骤2342。
在步骤2336中,映射模块204在全域内容表214内寻找当前VPID的有效匹配。若未找到匹配,此流程终止;否则就前进至步骤2338。
在步骤2338中,映射模块204在区域内容表212内寻找THIS_GID的有效匹配。对于区域内容表212中各个匹配项目,映射模块204会(1)将此区域内容表212的匹配项目的LID 902指派为一暂时变数THIS_LID;以及(2)无效化TLB 206中,关联于变数THIS_LID的区域地址转译。此流程终止于步骤2338。
在步骤2342中,映射模块204会引起处理器100错误的产生,就x86指令集架构的实施例而言,即为一般保护错误(general protection fault)。此流程终止于步骤2342。
现在请参照图24,此图是一流程图显示处理器100执行指令以无效化TLB 206中关联于一扩展页表指针(extended page table pointer)的地址转译的操作。此流程始于步骤2402。
在步骤2402中,处理器100遭遇到一个指令,会无效化TLB 206中与一扩展页表指针有关的地址转译。举例来说,在x86指令集架构的实施例中,此指令是一INVEPT指令。接下来前进至决策步骤2404。
在决策步骤2404中,映射模块204确认指令类型(例如:x86INVEPT指令的寄存器运算元)是否为一。若是,流程前进至步骤2406;否则前进至决策步骤2412。
在步骤2406中,映射模块204在全域内容表214内寻找于INVEPT指令内特定的EPTP的有效匹配。若未找到匹配,此流程终止;否则,映射模块204会将全域内容表214的匹配项目的GID 1004指派为一暂时变数THIS_GID。接下来前进至步骤2408。
在步骤2408中,映射模块204无效化关联于变数THIS_GID的全域地址转译。此映射模块204并于区域内容表212内寻找变数THIS_GID的有效匹配。对于区域内容表212内各个找到的匹配项目,此映射模块204会(1)将此区域内容表212匹配项目的LID 902指派为一暂时变数THIS_LID;以及(2)无效化TLB 206中,关联于变数THIS_LID的区域地址转译。此流程终止于步骤2408。
在决策步骤2412中,映射模块204确认指令类型是否为二。若是,流程前进至步骤2414;否则前进至步骤2442。
在步骤2414中,映射模块204在全域内容表214内寻找每个非零EPTP值的有效匹配。若未找到匹配,此流程终止;否则,对于全域内容表214的各个匹配项目,映射模块204会:(1)将全域内容表214的匹配项目的GID 1004指派为一暂时变数THIS_GID;(2)无效化关联于变数THIS_GID的全域地址转译;以及(3)在区域内容表212中寻找变数THIS_GID的有效匹配,并且对于区域内容表212中各个找到的匹配项目,(A)将区域内容表212匹配项目的LID 902指派为一暂时变数THIS_LID,以及(B)无效化TLB 206内,关联于变数THIS_LID的区域地址转译。此流程终止于步骤2414。
在步骤2442中,映射模块会引起处理器100错误的产生,就x86指令集架构的实施例而言,即为一般保护错误(general protection fault)。此流程终止于步骤2442。
在前述各实施例中,区域(与全域)内容标识符空间的尺寸是一预设尺寸(例如:四),不过,本发明并不限于此。此区域(与全域)内容标识符空间的尺寸可依据所需的设计目的,效能、尺寸与功耗,而有不同。此外,本文所述的实施例对应于单一个TLB,不过,所属技术领域者当能理解,本文描述的机制可用于其他转译快取结构,例如分页结构快取(paging structurecache)。举例来说,在x86指令集架构中,即为PML4快取、PDPTE快取与PDE快取。此外,本文所述的实施例中出现的比特具有一特别的定义,如设定(set)或清除(clear)或零或一。不过,所属技术领域者当能理解,正逻辑(positive logic)与负逻辑(negative logic)的实施方式均可适用于本发明。最后,虽然本文描述多种对应于x86指令集架构的实施例,不过,本文所述的将大的架构地址转译内容空间映射至一小的非架构地址转译内容空间的机制,以及同时无效化地址转译的机制,可适用于其他指令集架构,如ARM、MIPS或Sun指令集架构。
惟以上所述者,仅为本发明的较佳实施例而已,当不能以此限定本发明实施的范围,即大凡依本发明权利要求及发明说明内容所作的简单的等效变化与修饰,皆仍属本发明专利涵盖的范围内。举例来说,软件可以执行本发明所述的装置与方法的功能、制造、形塑、模拟、描述以及/或测试等。这可由一般的程序语言(如C、C++)、硬件描述语言(HDL)包含Verilog HDL,VHDL等,或是其他既有程序来达成。此软件可以设置于任何已知的计算机可利用介质,如磁带、半导体、磁碟、光碟(如CD-ROM、DVD-ROM等)、网络接线、无线或是其他通讯介质。此处描述的装置与方法的实施例可被包含于一半导体智财核心,例如一微处理核心(如以硬件描述语言的实施方式)并且通过集成电路的制作转换为硬件。此外,本文所描述的装置与方法亦可包含硬件与软件的结合。因此,本文所述的任何实施例,并非用以限定本发明的范围。此外,本发明可应用于一般通用计算机的微处理器装置。最后,所属技术领域具有通常知识者利用本发明所揭露的观念与实施例作为基础,来设计并调整出不同的结构已达成相同的目的,亦不超出本发明的范围。
藉由以上较佳具体实施例之详,希望能更加清楚描述本发明的特征与精神,而并非以上述所揭露的较佳具体实施例来对本发明的范畴加以限制。相反地,其目的是希望能涵盖各种改变及具相等性的安排于本发明所欲申请的专利范围的范畴内。
Claims (20)
1.一种转译后备缓冲器,包含:
多个项目,其中,各该项目用以保存一地址转译与一区域有效比特向量;
其中,该区域有效比特向量的各个比特由一x86指令集架构的进程内容标识符的不同值所映射;
一输入,接收一无效化比特向量,其比特对应于该多个项目的该区域有效比特向量的比特;以及
逻辑,对于该多个项目中对应有该无效化比特向量的一设定比特的各该项目,同时无效化各该项目的该区域有效比特向量的一比特。
2.如权利要求1所述的转译后备缓冲器,其中,该区域有效比特向量是N比特,其中N大于1,并且其大小比该些x86指令集架构进程内容标识符的不同值所需的空间小至少二个数量级。
3.如权利要求1所述的转译后备缓冲器,
其中,该地址转译包含一对存储器地址,其中,该对存储器地址的第一个是一待转译地址,而该对存储器地址的第二个是一转译后地址;
其中,对于该些项目其中之一,当该项目的待转译地址符合提供至该转译后备缓冲器的一查找地址,并且,该项目的该区域有效比特向量包含一设定比特,符合提供至该转译后备缓冲器的一查找区域比特向量的一相对应设定比特,该转译后备缓冲器显示命中并提供该项目的该转译后地址;
其中,该查找区域比特向量指示关联于产生该查找地址的一进程的一当前地址转译内容。
4.如权利要求1所述的转译后备缓冲器,其中,该些x86指令集架构进程内容标识符的不同值用以辨识包含该转译后备缓冲器的一处理器内当前有效的进程内容。
5.如权利要求1所述的转译后备缓冲器,其中,当该无效化比特向量的所有比特均为设定时,该逻辑同时无效化各该项目的该区域有效比特向量的所有比特。
6.如权利要求1所述的转译后备缓冲器,
其中,各该项目还用以保存至少一全域有效比特;
其中,该无效化比特向量还包含至少一全域比特,对应于该至少一全域有效比特;
其中,当该区域有效比特向量的一个或多个比特为设定时,该地址转译是一有效区域地址转译,而当该至少一全域有效比特中一个或多个比特为设定时,该地址转译是一有效全域地址转译。
7.一种操作一转译后备缓冲器的方法,该转译后备缓冲器包含多个项目,其中,各该项目用以保存一地址转译与一区域有效比特向量,其中,该区域有效比特向量的各个比特由一x86指令集架构的进程内容标识符的不同值所映射,该方法包含:
接收一无效化比特向量,其比特对应于该多个项目的该区域有效比特向量的比特;以及
对于该多个项目中对应有该无效化比特向量的一设定比特的各该项目,同时无效化各该项目的该区域有效比特向量的一比特。
8.如权利要求7所述的方法,其中,该区域有效比特向量是N比特,其中N大于1,并且其大小比该些x86指令集架构进程内容标识符的不同值所需的空间小至少二个数量级。
9.如权利要求7所述的方法,
其中,该地址转译包含一对存储器地址,其中,该对存储器地址的第一个是一待转译地址,而该对存储器地址的第二个是一转译后地址;
该方法还包含:对于该些项目其中之一,当该项目的待转译地址符合提供至该转译后备缓冲器的一查找地址,并且,该项目的该区域有效比特向量包含一设定比特,符合提供至该转译后备缓冲器的一查找区域比特向量的一相对应设定比特,该转译后备缓冲器显示命中并提供该项目的该转译后地址;
其中,该查找区域比特向量指示关联于产生该查找地址的一进程的一当前地址转译内容。
10.如权利要求7所述的方法,其中,该些x86指令集架构进程内容标识符的不同值用以辨识包含该转译后备缓冲器的一处理器内当前有效的进程内容。
11.如权利要求7所述的方法,还包含:当该无效化比特向量的所有比特均为设定时,同时无效化各该项目的该区域有效比特向量的所有比特。
12.如权利要求7所述的方法,
其中,各该项目还用以保存至少一全域有效比特;
其中,该无效化比特向量还包含至少一全域比特,对应于该至少一全域有效比特;
其中,当该区域有效比特向量的一个或多个比特为设定时,该地址转译是一有效区域地址转译,而当该至少一全域有效比特中一个或多个比特为设定时,该地址转译是一有效全域地址转译。
13.如权利要求7所述的方法,还包含:
当一查找地址在该转译后备缓冲器内显示为之未命中,使用一当前地址转译内容来产生一新的地址转译;
在该些项目的其中之一,填入该新的地址转译作为其地址转译;以及
在该些项目的其中之一,填入一当前内容标识符的一向量化比特表示作为其区域有效比特向量,而该当前内容标识符辨识出一关联于一产生该查找地址的处理进程的当前地址转译内容。
14.一种处理器,包含:
转译后备缓冲器,包含:
多个项目,其中,各该项目用以保存一地址转译与一区域有效比特向量;
其中,该区域有效比特向量的各个比特由一x86指令集架构的进程内容标识符的不同值所映射;
一输入,接收一无效化比特向量,其比特对应于该多个项目的该区域有效比特向量的比特;以及
逻辑,对于该多个项目中对应有该无效化比特向量的一设定比特的各该项目,同时无效化各该项目的该区域有效比特向量的一比特;以及
一映射模组,用以产生该无效化比特向量。
15.如权利要求14所述的处理器,其中,该区域有效比特向量是N比特,其中N大于1,并且其大小比该些x86指令集架构进程内容标识符的不同值所需的空间小至少二个数量级。
16.如权利要求14所述的处理器,
其中,该地址转译包含一对存储器地址,其中,该对存储器地址的第一个是一待转译地址,而该对存储器地址的第二个是一转译后地址。
其中,对于该些项目其中之一,当该项目的待转译地址符合提供至该转译后备缓冲器的一查找地址,并且,该项目的该区域有效比特向量包含一设定比特,符合提供至该转译后备缓冲器的一查找区域比特向量的一相对应设定比特,该转译后备缓冲器显示命中并提供该项目的该转译后地址;
其中,该查找区域比特向量指示关联于产生该查找地址的一进程的一当前地址转译内容。
17.如权利要求14所述的处理器,其中,该些x86指令集架构进程内容标识符的不同值用以辨识包含该转译后备缓冲器的一处理器内当前有效的进程内容。
18.如权利要求14所述的处理器,其中,当该无效化比特向量的所有比特均为设定时,该逻辑同时无效化各该项目的该区域有效比特向量的所有比特。
19.如权利要求14所述的处理器,
其中,各该项目还用以保存至少一全域有效比特;
其中,该无效化比特向量还包含至少一全域比特,对应于该至少一全域有效比特;
其中,当该区域有效比特向量的一个或多个比特为设定时,该地址转译是一有效区域地址转译,而当该至少一全域有效比特中一个或多个比特为设定时,该地址转译是一有效全域地址转译。
20.如权利要求14所述的处理器,还包含:
一存储器子***,当一查找地址在该转译后备缓冲器内显示为之未命中,使用一当前地址转译内容来产生一新的地址转译;在该些项目的其中之一,填入该新的地址转译作为其地址转译;并且,在该些项目的其中之一,填入一当前内容标识符的一向量化比特表示作为其区域有效比特向量,而该当前内容标识符辨识出一关联于一产生该查找地址的进程的当前地址转译内容。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201462026830P | 2014-07-21 | 2014-07-21 | |
US62/026,830 | 2014-07-21 | ||
PCT/IB2014/003110 WO2016012831A1 (en) | 2014-07-21 | 2014-11-26 | Simultaneous invalidation of all address translation cache entries associated with x86 process context identifier |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105993003A true CN105993003A (zh) | 2016-10-05 |
CN105993003B CN105993003B (zh) | 2019-04-09 |
Family
ID=55162551
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480065921.4A Active CN105993003B (zh) | 2014-07-21 | 2014-11-26 | 转译后备缓冲器、操作转译后备缓冲器的方法以及处理器 |
CN201480065923.3A Active CN105993005B (zh) | 2014-07-21 | 2014-11-26 | 具有地址转译快取的处理器及其操作方法 |
CN201480065922.9A Active CN105993004B (zh) | 2014-07-21 | 2014-11-26 | 转译后备缓冲器、操作其的方法以及包含其的处理器 |
Family Applications After (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480065923.3A Active CN105993005B (zh) | 2014-07-21 | 2014-11-26 | 具有地址转译快取的处理器及其操作方法 |
CN201480065922.9A Active CN105993004B (zh) | 2014-07-21 | 2014-11-26 | 转译后备缓冲器、操作其的方法以及包含其的处理器 |
Country Status (7)
Country | Link |
---|---|
US (3) | US9727480B2 (zh) |
EP (2) | EP2997478B1 (zh) |
JP (1) | JP6081672B2 (zh) |
KR (2) | KR101770495B1 (zh) |
CN (3) | CN105993003B (zh) |
TW (3) | TWI605339B (zh) |
WO (3) | WO2016012830A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105993003B (zh) * | 2014-07-21 | 2019-04-09 | 上海兆芯集成电路有限公司 | 转译后备缓冲器、操作转译后备缓冲器的方法以及处理器 |
US11221957B2 (en) | 2018-08-31 | 2022-01-11 | International Business Machines Corporation | Promotion of ERAT cache entries |
Families Citing this family (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9697137B2 (en) | 2014-11-14 | 2017-07-04 | Cavium, Inc. | Filtering translation lookaside buffer invalidations |
US9684606B2 (en) * | 2014-11-14 | 2017-06-20 | Cavium, Inc. | Translation lookaside buffer invalidation suppression |
US9672159B2 (en) * | 2015-07-02 | 2017-06-06 | Arm Limited | Translation buffer unit management |
US10509729B2 (en) * | 2016-01-13 | 2019-12-17 | Intel Corporation | Address translation for scalable virtualization of input/output devices |
US10042691B2 (en) * | 2016-04-26 | 2018-08-07 | International Business Machines Corporation | Operation of a multi-slice processor implementing exception handling in a nested translation environment |
DK3255550T3 (da) | 2016-06-08 | 2019-07-15 | Google Llc | TLB shootdowns til lave omkostninger |
US10540292B2 (en) * | 2016-06-08 | 2020-01-21 | Google Llc | TLB shootdowns for low overhead |
US10108554B2 (en) * | 2016-12-05 | 2018-10-23 | Intel Corporation | Apparatuses, methods, and systems to share translation lookaside buffer entries |
US10922114B2 (en) | 2016-12-12 | 2021-02-16 | Intel Corporation | System and method to improve nested virtual machine monitor performance |
US10725685B2 (en) | 2017-01-19 | 2020-07-28 | International Business Machines Corporation | Load logical and shift guarded instruction |
US10496311B2 (en) | 2017-01-19 | 2019-12-03 | International Business Machines Corporation | Run-time instrumentation of guarded storage event processing |
US10496292B2 (en) * | 2017-01-19 | 2019-12-03 | International Business Machines Corporation | Saving/restoring guarded storage controls in a virtualized environment |
US10452288B2 (en) | 2017-01-19 | 2019-10-22 | International Business Machines Corporation | Identifying processor attributes based on detecting a guarded storage event |
US10579377B2 (en) | 2017-01-19 | 2020-03-03 | International Business Machines Corporation | Guarded storage event handling during transactional execution |
US10732858B2 (en) | 2017-01-19 | 2020-08-04 | International Business Machines Corporation | Loading and storing controls regulating the operation of a guarded storage facility |
US11409551B2 (en) | 2017-02-27 | 2022-08-09 | Red Hat, Inc. | Emulating VPID correctly for a nested hypervisor |
US10228981B2 (en) | 2017-05-02 | 2019-03-12 | Intel Corporation | High-performance input-output devices supporting scalable virtualization |
US10896030B2 (en) | 2017-09-19 | 2021-01-19 | International Business Machines Corporation | Code generation relating to providing table of contents pointer values |
US11061575B2 (en) | 2017-09-19 | 2021-07-13 | International Business Machines Corporation | Read-only table of contents register |
US10725918B2 (en) | 2017-09-19 | 2020-07-28 | International Business Machines Corporation | Table of contents cache entry having a pointer for a range of addresses |
US10884929B2 (en) | 2017-09-19 | 2021-01-05 | International Business Machines Corporation | Set table of contents (TOC) register instruction |
US10713050B2 (en) | 2017-09-19 | 2020-07-14 | International Business Machines Corporation | Replacing Table of Contents (TOC)-setting instructions in code with TOC predicting instructions |
US10620955B2 (en) | 2017-09-19 | 2020-04-14 | International Business Machines Corporation | Predicting a table of contents pointer value responsive to branching to a subroutine |
US10705973B2 (en) | 2017-09-19 | 2020-07-07 | International Business Machines Corporation | Initializing a data structure for use in predicting table of contents pointer values |
US10725822B2 (en) * | 2018-07-31 | 2020-07-28 | Advanced Micro Devices, Inc. | VMID as a GPU task container for virtualization |
US10769076B2 (en) | 2018-11-21 | 2020-09-08 | Nvidia Corporation | Distributed address translation in a multi-node interconnect fabric |
US11663118B2 (en) * | 2021-03-10 | 2023-05-30 | Infineon Technologies Ag | Address vectors for data storage elements |
US20220414016A1 (en) * | 2021-06-23 | 2022-12-29 | Advanced Micro Devices, Inc. | Concurrent processing of memory mapping invalidation requests |
CN114595164B (zh) * | 2022-05-09 | 2022-08-16 | 支付宝(杭州)信息技术有限公司 | 在虚拟化平台中管理tlb高速缓存的方法和装置 |
US11947992B2 (en) | 2022-05-09 | 2024-04-02 | Alipay (Hangzhou) Information Technology Co., Ltd. | Methods and apparatuses for managing TLB cache in virtualization platform |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1369808A (zh) * | 2001-07-18 | 2002-09-18 | 智权第一公司 | 储存存储器型式数据的转译旁视缓冲器 |
JP3821644B2 (ja) * | 1999-12-17 | 2006-09-13 | ヒューレット・パッカード・カンパニー | 旧キャッシュラインを無効化および除去する装置 |
CN101183339A (zh) * | 2006-11-13 | 2008-05-21 | 国际商业机器公司 | 使存储器高速缓存中数据无效的方法与*** |
US8099559B2 (en) * | 2007-09-11 | 2012-01-17 | International Business Machines Corporation | System and method for generating fast instruction and data interrupts for processor design verification and validation |
CN102707926A (zh) * | 2011-04-07 | 2012-10-03 | 威盛电子股份有限公司 | 可执行x86指令集及ARM指令集指令的微处理器及其运作方法 |
CN103620547A (zh) * | 2011-01-27 | 2014-03-05 | 索夫特机械公司 | 使用处理器的转换后备缓冲器的基于客户指令到本机指令范围的映射 |
Family Cites Families (54)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0690688B2 (ja) * | 1990-10-20 | 1994-11-14 | 富士通株式会社 | 変換バッファを具備する情報処理装置 |
US5430850A (en) | 1991-07-22 | 1995-07-04 | Massachusetts Institute Of Technology | Data processing system with synchronization coprocessor for multiple threads |
US5845331A (en) | 1994-09-28 | 1998-12-01 | Massachusetts Institute Of Technology | Memory system including guarded pointers |
US5926642A (en) * | 1995-10-06 | 1999-07-20 | Advanced Micro Devices, Inc. | RISC86 instruction set |
US5715427A (en) | 1996-01-26 | 1998-02-03 | International Business Machines Corporation | Semi-associative cache with MRU/LRU replacement |
US6041396A (en) | 1996-03-14 | 2000-03-21 | Advanced Micro Devices, Inc. | Segment descriptor cache addressed by part of the physical address of the desired descriptor |
US5953520A (en) * | 1997-09-22 | 1999-09-14 | International Business Machines Corporation | Address translation buffer for data processing system emulation mode |
US6047363A (en) | 1997-10-14 | 2000-04-04 | Advanced Micro Devices, Inc. | Prefetching data using profile of cache misses from earlier code executions |
JP2000020399A (ja) * | 1998-06-30 | 2000-01-21 | Hitachi Ltd | 仮想計算機システム |
US8074055B1 (en) * | 1999-01-28 | 2011-12-06 | Ati Technologies Ulc | Altering data storage conventions of a processor when execution flows from first architecture code to second architecture code |
US8121828B2 (en) * | 1999-01-28 | 2012-02-21 | Ati Technologies Ulc | Detecting conditions for transfer of execution from one computer instruction stream to another and executing transfer on satisfaction of the conditions |
US6212613B1 (en) | 1999-03-22 | 2001-04-03 | Cisco Technology, Inc. | Methods and apparatus for reusing addresses in a computer |
US6490671B1 (en) | 1999-05-28 | 2002-12-03 | Oracle Corporation | System for efficiently maintaining translation lockaside buffer consistency in a multi-threaded, multi-processor virtual memory system |
US6412043B1 (en) * | 1999-10-01 | 2002-06-25 | Hitachi, Ltd. | Microprocessor having improved memory management unit and cache memory |
US6604187B1 (en) | 2000-06-19 | 2003-08-05 | Advanced Micro Devices, Inc. | Providing global translations with address space numbers |
US6510506B2 (en) * | 2000-12-28 | 2003-01-21 | Intel Corporation | Error detection in cache tag array using valid vector |
US7073044B2 (en) | 2001-03-30 | 2006-07-04 | Intel Corporation | Method and apparatus for sharing TLB entries |
US6662289B1 (en) | 2001-05-15 | 2003-12-09 | Hewlett-Packard Development Company, Lp. | Method and apparatus for direct conveyance of physical addresses from user level code to peripheral devices in virtual memory systems |
US7089396B2 (en) * | 2002-10-10 | 2006-08-08 | International Business Machines Corporation | Method and profiling cache for management of virtual memory |
US7363462B2 (en) | 2003-04-04 | 2008-04-22 | Sun Microsystems, Inc. | Performing virtual to global address translation in processing subsystem |
US7284100B2 (en) * | 2003-05-12 | 2007-10-16 | International Business Machines Corporation | Invalidating storage, clearing buffer entries, and an instruction therefor |
KR100591755B1 (ko) * | 2003-07-22 | 2006-06-22 | 삼성전자주식회사 | 복수의 스레드를 동시에 처리하는 장치 및 방법 |
US7167970B2 (en) | 2004-05-24 | 2007-01-23 | Sun Microsystems, Inc. | Translating loads for accelerating virtualized partition |
US7234038B1 (en) | 2004-05-28 | 2007-06-19 | Sun Microsystems, Inc. | Page mapping cookies |
US7551614B2 (en) | 2004-12-14 | 2009-06-23 | Hewlett-Packard Development Company, L.P. | Aggregation over multiple processing nodes of network resources each providing offloaded connections between applications over a network |
US8522253B1 (en) * | 2005-03-31 | 2013-08-27 | Guillermo Rozas | Hardware support for virtual machine and operating system context switching in translation lookaside buffers and virtually tagged caches |
US20070005933A1 (en) * | 2005-06-29 | 2007-01-04 | Kopec Brian J | Preventing multiple translation lookaside buffer accesses for a same page in memory |
US20080005529A1 (en) | 2006-06-30 | 2008-01-03 | Morris Robert P | Methods, Systems, and Computer Program Products for Providing Access to Addressable Entities Using a Non-Sequential Virtual Address Space |
US20080005528A1 (en) * | 2006-06-30 | 2008-01-03 | Morris Robert P | Methods, Systems, and Computer Program Products for Using a Structured Data Storage System to Provide Access to Addressable Entities in Virtual Address Space |
US7484073B2 (en) * | 2006-07-12 | 2009-01-27 | Microsoft Corporation | Tagged translation lookaside buffers in a hypervisor computing environment |
US7555628B2 (en) * | 2006-08-15 | 2009-06-30 | Intel Corporation | Synchronizing a translation lookaside buffer to an extended paging table |
US7490191B2 (en) | 2006-09-22 | 2009-02-10 | Intel Corporation | Sharing information between guests in a virtual machine environment |
JP2009146344A (ja) * | 2007-12-18 | 2009-07-02 | Hitachi Ltd | 計算機仮想化装置のtlb仮想化方法および計算機仮想化プログラム |
US7937556B2 (en) * | 2008-04-30 | 2011-05-03 | Oracle America, Inc. | Minimizing TLB comparison size |
JP5300407B2 (ja) | 2008-10-20 | 2013-09-25 | 株式会社東芝 | 仮想アドレスキャッシュメモリ及び仮想アドレスキャッシュ方法 |
CN101398768B (zh) * | 2008-10-28 | 2011-06-15 | 北京航空航天大学 | 一种分布式虚拟机监视器***的构建方法 |
CN101794214B (zh) | 2009-02-04 | 2013-11-20 | 世意法(北京)半导体研发有限责任公司 | 使用多块物理寄存器映射表的寄存器重命名***及其方法 |
US8443156B2 (en) | 2009-03-27 | 2013-05-14 | Vmware, Inc. | Virtualization system using hardware assistance for shadow page table coherence |
US8533437B2 (en) * | 2009-06-01 | 2013-09-10 | Via Technologies, Inc. | Guaranteed prefetch instruction |
US8412911B2 (en) | 2009-06-29 | 2013-04-02 | Oracle America, Inc. | System and method to invalidate obsolete address translations |
US8301865B2 (en) * | 2009-06-29 | 2012-10-30 | Oracle America, Inc. | System and method to manage address translation requests |
US8930635B2 (en) * | 2009-12-14 | 2015-01-06 | International Business Machines Corporation | Page invalidation processing with setting of storage key to predefined value |
US8386749B2 (en) * | 2010-03-16 | 2013-02-26 | Advanced Micro Devices, Inc. | Address mapping in virtualized processing system |
US9003171B2 (en) * | 2010-06-23 | 2015-04-07 | Apple Inc. | Page fault prediction for processing vector instructions |
US8527736B1 (en) * | 2010-09-07 | 2013-09-03 | Adtran, Inc. | Systems and methods for improving address translation speed |
JP2013097671A (ja) | 2011-11-02 | 2013-05-20 | Fujitsu Ltd | アドレス変換装置、アドレス変換装置の制御方法及び演算処理装置 |
US10275242B2 (en) | 2012-03-30 | 2019-04-30 | Intel Corporation | System and method for real time instruction tracing |
US8856789B2 (en) | 2012-09-06 | 2014-10-07 | Assured Information Security, Inc. | Facilitating execution of a self-modifying executable |
US10310973B2 (en) * | 2012-10-25 | 2019-06-04 | Nvidia Corporation | Efficient memory virtualization in multi-threaded processing units |
US9311239B2 (en) * | 2013-03-14 | 2016-04-12 | Intel Corporation | Power efficient level one data cache access with pre-validated tags |
US9507597B2 (en) | 2013-06-10 | 2016-11-29 | Via Alliance Semiconductor Co., Ltd. | Selective accumulation and use of predicting unit history |
US10324863B2 (en) | 2013-06-24 | 2019-06-18 | Intel Corporation | Protected memory view for nested page table access by virtual machine guests |
CN104424034A (zh) * | 2013-09-04 | 2015-03-18 | 华为技术有限公司 | 硬件资源访问方法及装置 |
EP2997478B1 (en) * | 2014-07-21 | 2019-03-13 | VIA Alliance Semiconductor Co., Ltd. | Efficient address translation caching in processor that supports large number of different address spaces |
-
2014
- 2014-11-26 EP EP14891591.1A patent/EP2997478B1/en active Active
- 2014-11-26 CN CN201480065921.4A patent/CN105993003B/zh active Active
- 2014-11-26 WO PCT/IB2014/003084 patent/WO2016012830A1/en active Application Filing
- 2014-11-26 WO PCT/IB2014/003116 patent/WO2016012832A1/en active Application Filing
- 2014-11-26 JP JP2016535541A patent/JP6081672B2/ja active Active
- 2014-11-26 US US14/761,126 patent/US9727480B2/en active Active
- 2014-11-26 KR KR1020157033139A patent/KR101770495B1/ko active IP Right Grant
- 2014-11-26 CN CN201480065923.3A patent/CN105993005B/zh active Active
- 2014-11-26 KR KR1020157033233A patent/KR101770496B1/ko active IP Right Grant
- 2014-11-26 US US14/890,334 patent/US9842055B2/en active Active
- 2014-11-26 WO PCT/IB2014/003110 patent/WO2016012831A1/en active Application Filing
- 2014-11-26 US US14/890,341 patent/US9760496B2/en active Active
- 2014-11-26 CN CN201480065922.9A patent/CN105993004B/zh active Active
- 2014-11-26 EP EP14891592.9A patent/EP3172673B1/en active Active
-
2015
- 2015-07-20 TW TW104123452A patent/TWI605339B/zh active
- 2015-07-20 TW TW104123448A patent/TWI592867B/zh active
- 2015-07-20 TW TW104123447A patent/TWI581098B/zh active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3821644B2 (ja) * | 1999-12-17 | 2006-09-13 | ヒューレット・パッカード・カンパニー | 旧キャッシュラインを無効化および除去する装置 |
CN1369808A (zh) * | 2001-07-18 | 2002-09-18 | 智权第一公司 | 储存存储器型式数据的转译旁视缓冲器 |
CN101183339A (zh) * | 2006-11-13 | 2008-05-21 | 国际商业机器公司 | 使存储器高速缓存中数据无效的方法与*** |
US8099559B2 (en) * | 2007-09-11 | 2012-01-17 | International Business Machines Corporation | System and method for generating fast instruction and data interrupts for processor design verification and validation |
CN103620547A (zh) * | 2011-01-27 | 2014-03-05 | 索夫特机械公司 | 使用处理器的转换后备缓冲器的基于客户指令到本机指令范围的映射 |
CN102707926A (zh) * | 2011-04-07 | 2012-10-03 | 威盛电子股份有限公司 | 可执行x86指令集及ARM指令集指令的微处理器及其运作方法 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105993003B (zh) * | 2014-07-21 | 2019-04-09 | 上海兆芯集成电路有限公司 | 转译后备缓冲器、操作转译后备缓冲器的方法以及处理器 |
US11221957B2 (en) | 2018-08-31 | 2022-01-11 | International Business Machines Corporation | Promotion of ERAT cache entries |
Also Published As
Publication number | Publication date |
---|---|
KR101770496B1 (ko) | 2017-09-05 |
US9760496B2 (en) | 2017-09-12 |
EP3172673A1 (en) | 2017-05-31 |
EP3172673B1 (en) | 2020-09-02 |
CN105993004A (zh) | 2016-10-05 |
US20160179688A1 (en) | 2016-06-23 |
US20160041922A1 (en) | 2016-02-11 |
JP2016527652A (ja) | 2016-09-08 |
KR20160033653A (ko) | 2016-03-28 |
US9842055B2 (en) | 2017-12-12 |
TW201610837A (zh) | 2016-03-16 |
EP2997478A4 (en) | 2017-06-07 |
CN105993004B (zh) | 2019-04-02 |
TW201617898A (zh) | 2016-05-16 |
EP2997478B1 (en) | 2019-03-13 |
TWI605339B (zh) | 2017-11-11 |
KR20160033654A (ko) | 2016-03-28 |
EP2997478A1 (en) | 2016-03-23 |
WO2016012832A1 (en) | 2016-01-28 |
JP6081672B2 (ja) | 2017-02-15 |
CN105993005B (zh) | 2019-06-04 |
WO2016012831A1 (en) | 2016-01-28 |
WO2016012830A1 (en) | 2016-01-28 |
CN105993003B (zh) | 2019-04-09 |
TWI592867B (zh) | 2017-07-21 |
US20160179701A1 (en) | 2016-06-23 |
US9727480B2 (en) | 2017-08-08 |
KR101770495B1 (ko) | 2017-08-22 |
EP3172673A4 (en) | 2018-03-28 |
CN105993005A (zh) | 2016-10-05 |
TWI581098B (zh) | 2017-05-01 |
TW201610683A (zh) | 2016-03-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105993003A (zh) | 同时无效化所有关联于一x86进程内容标识符的地址转译快取项目 | |
KR100834365B1 (ko) | 스토리지 무효화, 버퍼 엔트리 제거 | |
US10078597B2 (en) | System and method of distinguishing system management mode entries in a translation address cache of a processor | |
EP2862059B1 (en) | Local clearing control | |
US20140325167A1 (en) | Invalidating a Range of Two or More Translation Table Entries and Instruction Therefore | |
AU2012382781A1 (en) | Compare and replace DAT table entry |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address | ||
CP03 | Change of name, title or address |
Address after: Room 301, 2537 Jinke Road, Zhangjiang High Tech Park, Pudong New Area, Shanghai 201203 Patentee after: Shanghai Zhaoxin Semiconductor Co.,Ltd. Address before: Room 301, 2537 Jinke Road, Zhangjiang hi tech park, Shanghai 201203 Patentee before: VIA ALLIANCE SEMICONDUCTOR Co.,Ltd. |