具体实施方式
示例性计算配置
图1示出了可实施本发明的诸方面的示例性计算环境。计算系统环境100仅仅是合适的计算环境的一个例子,并不打算限制本发明的使用或功能。计算环境100不应被解释成具有对示例性操作环境100中所例示的任一组件或其组合的任何依赖性或要求。
本发明可用许多其它的通用或专用计算系统环境或配置来操作。可适用于本发明的众所周知的计算系统、环境和/或配置的例子包括但不限于,个人计算机、服务器计算机、手持或膝上型设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费电子产品、网络PC、微型计算机、大型计算机、嵌入式系统、可包括任何上述系统或设备的分布式计算环境等等。
可在由计算机执行的诸如程序模块的计算机可执行指令的一般上下文环境中描述本发明。一般来说,程序模块包括例行程序、程序、对象、组件、数据结构等,它们执行特定的任务或实现特定的抽象数据类型。本发明还可在由通过通信网络或其它数据传输媒体链接的远程处理设备来执行任务的分布式计算环境中实施。在分布式计算环境中,程序模块和其它数据可位于包括存储器设备的本地或远程计算机存储媒体中。
参考图1,用于实现本发明的示例性系统包括形式为计算机110的通用计算设备。计算机110的组件可包括但不限于:处理单元120、系统存储器130以及将包括系统存储器的各种系统组件连接到处理单元120的系统总线121。系统总线121可以是总线结构的若干类型中的任一种,包括使用各种总线结构体系中的任一种的存储器总线或存储器控制器、外围总线和局部总线。例如但不限于,这种总线结构体系包括工业标准结构(ISA)总线、微通道结构(MCA)总线、增强型ISA(EISA)总线、视频电子标准协会(VESA)局部总线、以及外设部件互连(PCI)总线(也称为夹层总线(Mezzanine bus))。
计算机110一般包括各种计算机可读媒体。计算机可读媒体可以是能由计算机200存取访问的任何可利用的媒体,包括易失性和非易失性媒体、可移除和不可移除的媒体。例如,计算机可读媒体可包括但不限于:计算机存储媒体和通信媒体。计算机存储媒体包括以任何技术或方法实现的用于存储诸如计算机可读指令、数据结构、程序模块或其它数据之类的信息的易失性和非易失性、可移除和不可移除的媒体。计算机存储媒体包括但不限于:RAM、ROM、EEPROM、闪存或其它存储技术、CDROM、数字通用盘(DVD)或其它光存储设备、磁带盒、磁带、磁盘存储器或其它磁存储设备、或能用于存储所需信息并能由计算机110存取访问的任何其它媒体。通信媒体一般以如载波或其它传送机制之类的调制数据信号的形式来表示计算机可读指令、数据结构、程序模块或其它数据,并包括任何信息传送媒体。术语“调制数据信号”指的是以编码信号中的信息的方式设置或改变信号的一个或多个特征。作为例子但非限制,通信媒体包括如有线网络或直接线缆连接之类的有线媒体,和如声音、RF、红外线之类的无线媒体和其它无线媒体。任何上述的组合也应包括在计算机可读媒体的范围之中。
系统存储器130包括诸如只读存储器(ROM)131和随机存取存储器(RAM)132之类的易失性和/或非易失性形式的计算机存储媒体。包含如在启动期间帮助计算机100内的各元件间传输信息的基本例行程序的基本输入/输出系统133(BIOS)一般存储在ROM 131中。RAM 132一般包含可由处理单元120立即存取和/或当前正在运行的数据和/或程序模块。作为例子但非限制,图1例示了操作系统134、应用程序135、其它程序模块136和程序数据137。
计算机110还可包括其它可移除/不可移除、易失性/非易失性的计算机存储媒体。例如,图1例示了对不可移除的非易失性磁性媒体进行读写的硬盘驱动器140、对可移除的非易失性磁盘152(如“软盘”)进行读写的磁盘驱动器151,以及对可移除的非易失性的光盘156进行读写的光盘驱动器155,光盘例如CD-ROM或其它光媒体。可用于示例性操作环境的其它可移除/不可移除、易失性/非易失性计算机存储媒体包括但不限于:磁带盒、闪存卡、数字通用盘、数字视频带、固态RAM、固态ROM等。硬盘驱动器141一般通过诸如接口140之类的不可移除存储器接口连接到系统总线121,磁盘驱动器151和光盘驱动器155一般通过诸如接口150之类的可移除存储器接口而连接到系统总线121。
图1中所示的以及上述的驱动器及其相关的计算机存储媒体向计算机110提供对计算机可读指令、数据结构、程序模块以及其它数据的存储。例如,在图1中,所例示的硬盘驱动器141存储操作系统144、应用程序145、其它程序模块146和程序数据147。注意到这些组件可以与操作系统134、应用程序135、其它程序模块136和程序数据137相同或不同。在这里以不同的标号给出操作系统144、应用程序145、其它程序模块146以及程序数据147是为了例示出它们至少是不同的副本。用户可通过诸如键盘162和通常称为鼠标、轨迹球或触板的指针设备161之类的输入设备向计算机20输入命令或信息。其它输入设备(未示出)可包括话筒、操纵杆、游戏手柄、卫星反射器、扫描仪等等。这些以及其它输入设备通常通过连接至系统总线的用户输入接口160而连接到处理单元120,但也可通过诸如并行端口、游戏端口或通用串行总线(USB)之类的其它接口和总线结构而连接。还通过诸如视频接口190之类的接口将监视器191或其它类型的显示设备连接到系统总线121。除了监视器之外,计算机还可包括通过输出外设接口190连接的诸如扬声器197和打印机196之类外围输出设备。
计算机110可操作于使用对诸如远程计算机180之类的一个或多个远程计算机的逻辑连接的联网环境中。远程计算机180可以是个人计算机、服务器、路由器、网络PC、对等设备或其它公共网络节点等等,一般包括上述关于计算机110所述的元件的部分或全部,虽然图1仅示出了存储器设备181。图1中所描述的逻辑连接包括局域网(LAN)171和广域网(WAN)173,但还可包括其它网络。这些联网环境在办公室、企业范围的计算机网络、企业内部互联网以及因特网之中是常见的
当用于LAN联网环境时,计算机110通过网络接口或适配器170连接到LAN171。当用于WAN联网环境时,计算机110一般包括调制解调器172或其它手段来在诸如因特网之类的WAN 173上建立通信连接。调制解调器172,它可外置或内置于计算机中,可以通过输入接口160或其它合适的机构连接到系统总线112。在联网环境中,关于计算机110所描述的程序模块或其部分可存储于远程存储器设备中。作为例子但非限制,图1例示了驻留于存储器设备181上的远程应用程序185。要理解到所示的网络连接仅仅是示例性的,可以使用在计算机之间建立通信链路的其它手段。
使用地址转换的存储器存取
计算机系统中的存储器(如图1中所示的RAM 132)对于每个字节都具有实际地址。从而,构成存储器的字节可被看作是编号的,其中由各自的编号可明确地标识各字节。在此情况下,所述编号构成了实际地址。例如,在256字节的存储器中,诸字节的实际地址的范围是0至28-1。然而,在当代计算机系统中,存储器一般不是通过其实际地址而被访问的,而是通过虚拟地址进行访问。使用地址转换映射来将实际地址变换成虚拟地址。
图2示出了地址转换映射的例子及其在实际计算机系统中的使用。图2中所示的示例性地址转换映射是一种“分页”方案,其中按称为“页面”的块来分配存储器。图2表示了用于英特尔(INTEL)x86处理器的分页方案。
在图2中,页面目录202包含指针指向诸如页面表204(1)、204(2)和204(3)之类的页面表(即页面表的实际地址)的指针数组。各页面表又包含指针指向页面(如页面206(1)、206(2)、206(3)以及206(4))的基地址的指针数组,并且还可包含诸如如上所述的只读/读写属性、存在/不存在位等的信息。页面是RAM 132中的固定长度的部分。此外,页面目录和页面表一般也存储在RAM 132中。图2中所描述的分页方案是二级分页方案,因为必须通过页面目录(第1级)和页面表(第2级)来定位某一页。本领域的技术人员会理解到设计任意级数的分页方案是可能的,并且本发明适用于所有这些分页方案。本领域还已知英特尔x86处理器一般使用图2中所示的二级分页方案,但是还可配置成使用一级或三级分页方案。
在图2的分页方案中,页面上的任一字节可由虚拟地址210标识,虚拟地址210包含页面目录偏移量211、页面表偏移量212和页面偏移量213。从而,为了定位实际地址,存储器管理单元(MMU)220使用页面目录偏移量211来定位页面目录202中的某一项。该项是页面表的实际基地址,从而MMU 220间接引用该地址来定位一个页面表(如页面表204(1))。然后,MMU 220使用页面表偏移量212作为所标识的页面表的索引,然后取回在此偏移量处的项。该项是页面(如页面206(1))的实际基地址,从而MMU将页面偏移量213加到所表示的页面的基地址上,以便定位实际存储器的某一字节。MMU 220还可配置成考虑诸如页面是否被标记为只读或读写、页面是否被标记为存在或不存在之类的信息,如下面结合图3所述。
图2的分页方案还包括包含指向页面目录的指针的存储单元201。MMU 220在它开始转换虚拟地址210时使用该指针来定位页面目录202。在英特尔x86处理器的例子中,存储单元201对应于名为CR3的寄存器,即,在英特尔x86处理器上,寄存器CR3存储当前上下文环境的页面目录的实际地址。从而就可能建立替代的转换表组(即两组或多组页面目录和页面表),并可能简单地通过将新页面目录的基地址写入存储单元201来改变使用哪组转换表。该技术的一个普通用法用于使运行于计算机上的各进程具有其自己的页面目录和页面表,其中,通过将新进程的页面目录的基地址写入存储单元201来实现“上下文环境切换”(即尤其引起虚拟存储器系统指向新进程的地址空间的操作)。在各进程具有其自己的页面目录的情况下,当前运行的进程的标识确定了把什么值载入存储单元201。
除了包含指向页面的指针之外,页面表和页面目录还可包含用于页面的“属性”。图3示出了示例性页面表204(1)的细节,它包含指针和属性。页面表204(1)中的每一项包括某一页面的地址302、指示出该项所指向的页面是否是“只读”的位304、以及指示出该项所指向的页面是否“存在”的位306。从而,如果页面表204(1)中的第一项301指向页面206(1)(示于图2),则位304根据其值为0或1来指示出MMU 220(示于图2)是否应允许对页面206(1)进行读写或只读。类似地,位306指示出页面206(1)是否存在于存储器中。(例如,如果页面206(1)的内容已移到磁盘来为存储器中的其它页面腾出空间,则可把位306设置成0,指示出不存在)。也可在页面表204(1)中存储其它属性。
使用地址转换映射用于存储器存取控制
在存储区可由虚拟地址存取访问的系统中,可根据如果地址转换映射配置成无虚拟地址转换成给定的实际地址,则该实际地址所表示的存储器是不可访问的这样一种规则来实施限制对存储器存取访问的系统。例如,在上述关于图2所描述的分页方案中,通过确保没有通过映射导向存储器的一给定页面(如页面206(1))的路径,可使得该页面不可被存取访问。在没有这种路径的情况下,将没有会转换到该页面的虚拟地址210。在所有的存储器存取访问都是由虚拟地址进行的系统中,对地址转换映射施加控制以拒绝对存储器的给定页面(或其它部分)的虚拟地址,这有效地使得该存储器部分不可被存取访问。即使在允许对存储器的某些实际寻址的系统中,可通过对地址转换映射控制补充对基于实际地址的那些存取访问请求的控制,来使得存储器不可被存取访问。
控制地址转换映射的内容以便控制对存储器的存取访问的技术在形式上可如下表示:假设S是可能存取访问一存储器的一组源。又假设P是定义存储器的哪些部分可由哪些源存取访问的策略。从而,如果s∈S,s是一个源,则MP(s)表示可由该源s通过地址转换映射存储访问的存储器部分(如具有虚拟地址的一组存储单元),NA(P,s)表示在策略P的约束下不允许源s存取访问的存储器部分。(虽然会理解到源的概念可推广到进程之外,但是在各进程具有其自己的地址转换映射的情况下,各进程可被看作是不同的“源”。)从而,只要条件:NA(P,s)∩MP(s)=φ,得到满足,则可确保该策略的执行。图4描述了该条件,示出存储器132作为一组存储单元,MP(s)402作为源s通过地址转换映射而可见的存储单元集合,NA(P,s)404作为在策略P的约束下不允许源s存取访问的存储单元集合。由于源s能够通过地址转换映射来寻址的存储单元(MP(s))都不包含在策略P的约束下不允许源s存取访问的存储单元集合中,因此,图4中所描述的条件有效地对源s执行了策略P。
从而,在某些示例情况中,可将控制源s对存储器132的部分的存取访问的问题简化成确保图4中所描述的条件总为真。该问题的一个解决方案是评估可能改变地址转换映射、策略或当前源的操作(如存储器写、CR3寄存器的加载等)。本发明提供允许有效地进行这种评估的技术。
会理解到图4中所示的条件仅仅是能用于实现存储器存取控制的示例性条件。在图4的主题下,其它变型是可能的,如那些涉及包含于地址转换映射中的存储单元集合、允许源s存取访问但不可写(或读)的存储单元集合等等。然而,要注意到用于存储器存取控制的条件一般包括校验两个或多个存储单元集合的非交集。
此外,虽然可把MP(s)看作是对源s可见的“映射页面”,但是应注意到存储器存取控制的概念并不限于采用分页方案的系统。在一典型的实现方式中,以逐页面的方式作出关于允许源在策略的约束下对哪些存储单元进行写操作或把哪些存储单元映射到源的判定。然而,本发明并不限于以逐页面的方式分配存储器、或以逐页面的方式允许或限制对存储器的存取访问的情况。
地址转换的广义模型
可使用有向标记图模型来将上述的和图2所示的地址转换映射一般化。下面描述用于某些类型的地址转换映射的广义模型。
在该模型中,B是基集合,L是字母表。给定B和L,G=(V,E)是带有边标记的有向图,VB以及E{(v,w,l):v∈V,w∈W,l∈L}。E的任一元可解释成从顶点v至顶点w的具有标记l的有向边。顶点也可被标记。
图5示出了根据上述模型的图。图500包括顶点502、504、506、508、510以及512。这些顶点由边522、524、526、528、530、532以及534通过所示的方式连接。各边以字母表中的一个符号标记。在本例中,字母表包含符号A、B和C。从而,边522和524以符号A标记、边526、528和532以符号B标记、边530和534以符号C标记。基集合中也可存在在图500中不是顶点的元素(如元素550和552)。
应理解图500的分量对应于图2所示的地址转换映射的某些分量。例如,图2中页面目录202、页面表204(1)-204(3)以及页面206(1)-206(4)可被看作是图中的顶点。连接这些顶点的指针(如从页面表204(1)中的项指向页面206(1)和206(2)的指针)可被看作是图的边。对于图3,项的属性304和306(如只读和存在位)可被看作是边的标记。从而,“字母表”是属性的可能排列的集合。(在图3的例子中,有两个二进制属性,存在四个可能的组合,因此在字母表中有四个符号。)在不使用属性的情况中,字母表可由“零”(nil)符号组成。此外,存储器的未分配的页面对应于基集合中不具有进入边的成员。
在如上所述的图的模型中,可能定义一种“状态”。给定B和L,“状态”是(R,G)对,其中G是如上所定义的有向标记图,RV,V是G的顶点集合。R表示“根顶点”集合。根顶点表示的是基集合中可合理地充当图的根的一组顶点。在图2的例子中,合法页面目录集合(即允许载入诸如英特尔x86处理器上的CR3寄存器之类的存储单元201的那些值)是“根顶点”集合。给定B和L,S是所有状态的集合。
根据上述定义的模型,可对地址转换机制(ATM)按下述建模:
-顶点的基集合B
-字母表L(可能为空)
-初始状态s0∈S(S是状态)
-一组状态转移规则(可能为空)
-地址转换功能
-全局标记
状态转移规则将ATM从一个状态改变到另一状态。从而可能定义一组状态转移规则ri:S S(其中i是某一索引),该组状态转移规则改变ATM的当前状态。ATM可具有下述类型的转移规则中的任何一种:
-改变(添加、删除、重标记)G的边
-添加或删除G的顶点
-改变根集合R。
例如,在图2和图3的例子中,删除指向一页面的指针或改变一页面的属性对应于改变图的一个边。添加新的页面目录、新的页面表或新的数据页面对应于添加或删除顶点。定义其基地址可载入存储单元201(如寄存器CR3)的新的页面目录对应于对根集合的改变。实质上,当前状态定义了通过地址转换可能存取访问哪些存储单元。
如上所述,可通过对地址转换映射强加限制条件来控制对存储器的存取访问,这种地址转换映射不向源暴露在策略约束下不允许该源存取访问的任一存储器部分的虚拟地址。而且,如前所述,在可能影响条件的真实性的操作被执行时,能评估那些条件的连续存在性。对于存储器存取控制,查验该技术的一种方式是将ATM的合法状态限制到S的某个子集T,或者关于当前状态的某个特性(或属性)P必须总为真。
给定某个特性P(不同于上述的策略P),可评估对执行可能将状态从s改变到ri(s)的动作的请求(对于某个i执行ri),以判断P(ri(s))是否为真--即,是否执行ri而导致产生的新的(所建议的)状态将具有特性P。如果P为真暗示出不会违反对存储器的存取访问的限制,那么P(ri(s))为真则意味着应允许进行通过执行ri而引起的状态改变。否则,不应允许进行操作。
应观察到每个存储器写操作都可能改变ATM的状态。从而,应作出以下两个观察:
-算法必须计算P(s)-可能是频繁地。
-一般地,新状态s’是从旧状态s导出的。如果旧状态具有特性P,
那么就可能通过假设P(s)和仅仅分析产生s’的向s的(有限数量的)改变是否会导致违反P,来简化确定P(s’)的复杂性。
本发明提供允许有效地计算P的真值的技术。如下所述,在许多情况下,可通过存储(或高速缓存)关于ATM的当前状态的某些代表性信息来实现这种有效性,这些代表性信息可随后用于判定需要执行什么检验来确认P在状态转移下的真值,以及可避免哪些检验。
示例性特性类
特性P的一个类型是可由顶点集合来表示的特性。例如,上述的以及图4中所示的条件实质上就是一个特性,其中集合MP(s)和NA(P,s)不相交。可按照顶点集合以及这些集合之间的关系来表示的许多特性可通过存储(或高速缓存)一集合中顶点的标识来有效实施。
可用于评估ATM是否处于满足存储器存取控制条件的状态的集合的例子是:
1.与根顶点相距k的顶点的集合。在形式上,如果S是顶点集合,w是一顶点,设dk(S,w)表示存在从S中的某个顶点到顶点w的长度为k的(有向)路径。Sd={v∈V:dk(S,w)}。如果S是根顶点,则Sd指的是离根顶点距离为d的页面集合。例如,如果顶点502图500的根,则离根顶点为距离为1的顶点集合由顶点504和510组成,因为这两个顶点中任一个都可从根顶点通过一个边就能到达。参考图2所示的页面映射,页面目录202离根距离为1,页面表204(1)至204(3)离根距离为2。从而,在图2的例子中,可通过存储离根距离分别为1和2的那些页面的标识来高速缓存页面目录和页面表的地址。
2.根据边标记来确定的集合。例如,参考图5,具有标记为“A”的进入边的顶点的集合由顶点504和510组成,而具有标记为“B”的进入边的顶点的集合由顶点504、506和512组成。在图2的页面映射中,属性对应于边标记,可按照具有给定属性的那些页面来定义集合。例如,定义(以及高速缓存)标记为只读的页面集合可能是有用的,在此情况中,只读位为“置位(on)”(图3中所示的参考标号304)的页面集合可被定义。(可能的是一页面在页面映射中会被引用不止一次,在此情况中,对于该页面的不同引用会使得它们的只读属性设置不同;在此情况中,集合的定义能解决冲突--例如,如果对于页面的至少一个引用具有只读属性,或者如果对于页面的每个引用都具有只读属性等,则该页面在集合中)。
局部和非局部特性之间可能引起差异。局部特性可从进入一给定顶点的边来计算。也就是说,如果仅从进入顶点v的边就能够判断顶点v是否具有特性P,那么我们就说P的局部特性。否则,P是非局部特性。局部特性的一个例子是“顶点具有标记为读写的进入边”。非局部特性的一个例子是“页面(x86机器上)具有读写映射”。
3.具有某个特性的k个边的目标的顶点集合。在形式上,如果P、Q是属性,w是顶点,设In-degP,Q(w)=|{v∈V:P(v)和(v,w,l)∈E和Q(l)}|可按照具有给定入度(in-degree):{v∈V:In-degP,Q(v)=k}的顶点集合来定义集合。类似地,还可根据不等式来定义集合——例如,是具有某个特性的不少于(或不多于)k个边的目标的顶点集合。
例如,参考图5,具有至少一个标记为“C”的进入边的顶点集合由顶点508和512组成。参考图2的页面映射,可使用这种类型的集合定义来高速缓存页面的类别——例如,具有两个或多个映射的页面的集合,仅具有一个只读映射的页面的集合,等等。
4.可根据出度(out-degree)来定义一类似的集合,即具有带有某个特性的k个出边(多于k个出边或少于k个出边)的顶点的集合。例如,参考图5,仅具有两个标记为“A”的出边的顶点的集合由顶点502组成。图2包含类似的例子——例如,具有至少三个出边(即对其它页面的引用)的页面的集合包含页面目录202。
可通过普通的集合运算(如并集、交集、补集、差集)来组合这些集合。例如,如果S2是离根距离为2的页面的集合,则x86 CPU的某些配置中的带有读写映射的页面的集合可如下表示:
({x:x具有大页面进入边}交集{x:x具有读写进入边}交集S2)并集
({x:x具有小页面进入边}交集{x:x具有读写映射}交集S3)
每当状态变化时,一种幼稚的算法可能通过遍历每个顶点v,并检验该顶点是否示于集合来重新计算这些集合。这是开销巨大的。如果算法计算可按照所刚刚描述的类型的集合来表示的状态特性,则可利用高速缓存方案,如下所述:
高速缓存方案
可使用各种方案来高速缓存用于有效评估状态改变的数据。下面描述了示例性的高速缓存方案。
方案1:简单焦合高速缓存
该方案直接计算集合并存储(高速缓存)集合。每当各后续状态改变,算法更新高速缓存器。在一个例子中,可保存一高速缓存器,该高速缓存器受到以下访问操作:
-Init()——将高速缓存器初始化到某一明确定义的值,如空集合。
-Add(S)——将S(单个元素或元素集合)加入高速缓存器。
-Remove(S)——将S(单个元素或元素集合)从高速缓存器删除。
-ShowCache(S)——返回当前被高速缓存的所有元素。
还可对高速缓存器进行其它访问操作(例如以提高效率)。
表示这样一种高速缓存器的一种方式是通过位向量。例如,如果系统具有216个存储器实际页面,长为216比特(即8K字节)的向量可表示各页面的布尔(Boolean)值。第n个比特是导通或关断取决于第n个页面是否在定义的集合中。从而,给出一定义的页面集合,集合中的成员就可以仅仅以每个页面一个位的开销进行高速缓存。应理解到,通过使用按位“或”和“与”运算符,诸如并集和交集的集合运算可非常简单地进行这种类型的表示。
方案2:扩展集合,构造子集
根据执行存储器存取控制的基础算法的细节,可能不要求高速缓存包含确切的目标集合。例如,高速缓存目标集合的某个扩展集合或某个子集合就可能足够了。这能减少保存高速缓存的开销。在图3的例子中,存储器存取控制条件要求MP(s)不与NA(P,s)交集。然而,如果不便于或实际不能计算确切的NA(P,s)的成员,则可能计算和高速缓存NA(P,s)的某个扩展集合,并随后确保MP(s)不与所计算出的NA(P,s)的扩展集合相交集。这种技术可能造成拒绝某些本应该允许的状态改变,但不会允许本应不允许的任何状态改变——从而保持了存储器存取控制的状态。
方案3:保留边表示
一般来说,边被存储或与源顶点一起存储。例如,图2中,页面目录和页面表存储指向其它页面以及它们的属性的指针。给定一顶点,一般容易找到所有出边的目标。同时,找到所有入边的源一般是开销大的。因为顶点不载有关于其入边的信息,因此,可能要求彻底搜索所有的边来寻找所有入边。
如果算法要求快速访问顶点的入边或可从这些入边导出的信息,则可能较佳的是在一与顶点以某种方式相关联的数据结构中直接存储关于各顶点的入边的信息。术语“以某种方式相关联”的意思是给定顶点,则容易找到数据结构(如数组查找)。
在最极端的情况中,数据结构存储所有的入边。在该情况下,数据结构可以是如上所定义的一个高速缓存,其元素是边。(高速缓存还可存储集合或多重集合)。以此结构进行的存储与顶点的入边数成比例,并且,如果对于所有顶点都保持这种类型的结构,则总的存储量与图中的边数成比例。
存储导出信息通常就足够了,这要求较少的存储量。例如,算法可能仅存储各顶点的入边数。在此情况下,高速缓存器可实现为引用计数器。引用计数器一般受到下述访问操作:
-Init()——将高速缓存器初始化到某一明确定义的值,如0。
-Increment()
-Decrement()
-GetValue()
引用计数器(或类似的数据结构)的一个普通应用是构造集合。例如,一示例性的存储器存取控制算法可能不得不计算没有入边的顶点的集合,即引用计数为0的顶点的集合。引用计数器的聚集可如下控制该集合的高速缓存(方案1):无论何时一引用计数器的值改变,算法就检验它是否变为0。如果是,则将顶点加入高速缓存器。类似地,算法监视值为0的引用计数器获得不同的值的事件。在此事件中,算法将顶点从高速缓存器中删除。
下述是使用高速缓存的某些例子:
-对于d=1、2、3,高速缓存Sd的扩展子集Sd’。
-对于d=2、3:高速缓存器可以(a)被直接存储,或(b)由一引用计数器驱动。
-计算局部标记特性:“具有读写进入边”以及具有“大/小页面进入边”。
-计算非局部特性:“具有读写映射”。
-对S2中的顶点的读写进入边数使用引用计数器。
该信息可用于加速非局部特性“具有读写映射”的计算。
使用存储的信息对存储器存取控制的示例性过程
图6示出了使用这里所描述的级数执行存储器存取控制的示例性过程。
一开始,接收到存取访问存储器的请求(602)。当接收到存取访问请求时,存储器存取控制系统评估该请求,以判断对该请求的执行是否会符合支配存储器存取的策略(604)。存储器存取策略的例子已在上述讨论过。作为一个例子,策略可定义按超出一组源的范围来定义某些页面,策略可禁止对于一个超出范围的页面会导致建立对于不允许访问该页面的一个源可见的映射的任何存取访问请求。可通过存储或高速缓存信息(606)来助于对请求的评估。该存储的或高速缓存的信息可包含关于页面映射的信息——如,对于某些合法页面目录来说是已知的页面的集合。
如果判断出执行请求会符合策略(608),则允许请求继续下去(612)。否则,阻挡该请求,或将该请求修改成不会违反策略的形式(610)。将请求修改成不违反策略的形式的一个例子如下:如果请求要求将一会导致对一超出范围的页面的映射的项写入页面表,则可修改该请求使得该项被写入,但是页面的“存在”位关闭。从而,对于该新映射的页面的存取访问的任何未来企图都将产生异常,从而异常处理器能够最终阻碍对该超出范围的页面的存取访问。如果以这种方式(或某种其它方式)修改请求,则允许修改的请求继续下去(614)。在执行了修改的或未修改的请求之后,如果对请求的执行引起对所高速缓存的信息的改变,则可更新该高速缓存器(616)。
注意到上述例子仅仅出于解释的目的,并不能解释成对本发明的限制。虽然参考各实施例描述了本发明,但是要理解到这里所使用的词仅仅是用于说明书和描述的词,而不是用于限制的词。此外,虽然这里参考特定的装置、材料和实施例描述了本发明,但是本发明并不限于这里的特定揭示,相反,本发明涉及功能上相同的所有结构、方法和使用。从本发明说明书的教示中受益的本领域的技术人员可对本发明进行各种修改,各种修改不背离本发明的范围和要旨。