用于向共享虚拟存储器提供访问保护的技术的制作方法

文档序号:17319746发布日期:2019-04-05 21:28阅读:184来源:国知局
用于向共享虚拟存储器提供访问保护的技术的制作方法

共享存储器可以指代可由多个程序或进程同时地访问以旨在在它们之间提供通信或者避免冗余副本的存储器。虚拟存储器可以指代将由程序或进程使用的存储器地址(被称作虚拟地址)映射到计算机存储器中的物理地址的存储器管理技术。在各种实施例中,对程序或进程而言从物理地址到虚拟地址/从虚拟地址到物理地址的转换可以透明地发生。通常,操作系统(os)可以管理虚拟地址空间以及物理存储器到虚拟存储器的指派。

附图说明

图1图示了第一操作环境的实施例。

图2a图示了第二操作环境的实施例。

图2b图示了第三操作环境的实施例。

图3图示了第四操作环境的实施例。

图4图示了第五操作环境的实施例。

图5a图示了第一逻辑流程的实施例。

图5b图示了第二逻辑流程的实施例。

图6a图示了第三逻辑流程的实施例。

图6b图示了第四逻辑流程的实施例。

图7图示了存储介质的实施例。

图8图示了计算架构的实施例。

图9图示了通信架构的实施例。

具体实施方式

例如,各种实施例一般地涉及用于共享虚拟存储器(svm)访问保护的技术,诸如通过每当写入请求从svm器件到达时就执行安全检查。一些实施例特别涉及一种通过响应于存储器事务请求而生成访问请求故障和/或具有只读访问的转换完成来防止svm器件因所述存储器事务请求而修改代码页面的输入/输出存储器管理单元(iommu)。在各种实施例中,存储器事务请求可以包括存储器访问请求和存储器转换请求中的一个或多个。在一个实施例中,例如,用于存储器访问保护的装置可以包括用于iommu的存储器和逻辑,所述逻辑的至少一部分被实现在耦合到存储器的电路中。在各种实施例中,逻辑可以接收存储器访问请求,标识与包括在存储器访问请求中的地址相关联的缓存转换条目,并且基于存储器事务请求的类型和包括在缓存转换条目中的权限集来确定是否执行存储器访问请求。在一些实施例中,逻辑可以接收存储器转换请求并且基于与转换请求相关联的存储器页面是否是可执行的来确定是否生成具有读写访问或只读访问的转换完成。这些及其他实施例被描述并要求保护。

iommu面临的一些挑战包括无能力执行安全检查以防止svm器件修改代码页面。这些挑战可以由svm器件能够隐式访问整个进程存储器空间产生。在一些情形下,这些挑战可以为恶意用户提供攻击向量。例如,恶意用户可以操纵svm器件的工作负载以破坏中央处理单元(cpu)的进程存储器并劫持其控制流。添加更多的复杂性,许多应用可选取它们自己的存储器页面的读取、写入和执行权限。例如,有时可以同时地授予写入权限和执行权限两者,诸如在即时(jit)代码、打包程序、自修改代码和内核情况下。这些和其他因素可以导致iommu具有差安全性和有限功能性。此类局限性可大大地降低iommu的可用性和适用性,从而导致具有安全漏洞和有限功能性的无效系统。

本文中描述的各种实施例包括iommu,所述iommu可通过执行一个或多个安全检查来防止svm器件(诸如硬件加速器(例如,图形处理单元(gpu))修改cpu的代码页面。在一个或多个实施例中,安全检查可以操作来限制源自于svm器件对cpu的代码页面的写入访问。本文中描述的这个及其他特征可防止svm器件被用于攻击并操纵cpu的行为。例如,在一些实施例中,iommu可以执行安全检查,使得每当写入请求从svm器件到达时,如果所请求的页面存在并且是可执行的,则访问违反故障被生成并且请求被终止。在另一示例中,iommu可以执行安全检查,使得每当与写入操作相对应的存储器转换请求从svm器件到达时,如果与转换请求相关联的存储器页面是可执行的,则具有只读访问的转换完成被生成。这可以防止恶意或易受攻击的器件破坏cpu的进程存储器并且用cpu进程的特权引起任意代码执行。附加地,在各种实施例中,可以通过基于高速缓存条目(诸如在转换后备缓冲器(tlb)高速缓存中)中的一个或多个位执行安全检查来实现效率。在各种此类实施例中,这可以防止诸如附加页面遍历之类的开销。

以这些和其他方式iommu可以使得能实现可靠且高效的安全检查以从svm器件实现改进的共享虚拟存储器访问保护,同时减少用于恶意用户的攻击向量,从而产生若干技术效果和优点。

一般参考本文中使用的表示法和命名法,可以在计算机或这些计算机的网络上执行的程序过程方面呈现以下详细描述的一个或多个部分。这些过程描述和表示由本领域的技术人员使用来将他们的工作的本质最有效地传达给本领域的其他技术人员。过程在这里并且一般地被设想为导致期望结果的操作的自洽序列。这些操作是要求物理上操纵物理量的操作。通常,尽管不一定,然而这些量采取能够被存储、转移、组合、比较和以其他方式操纵的电、磁或光信号的形式。有时主要出于常见用法的原因,将这些信号称为位、值、元素、符号、字符、项、数字等证明是方便的。然而,应该注意的是,所有这些和类似的术语都将与适当的物理量相关联,并且仅仅是应用于那些量的方便标签。

进一步地,这些操纵常常用通常与由人类操作员执行的心理操作相关联的术语(诸如添加或比较)来指代。然而,在本文中描述的形成一个或多个实施例的一部分的任何操作中,人类操作员的这种能力不是必需的,或者在大多数情况下是所希望的。相反,这些操作是机器操作。用于执行各种实施例的操作的有用机器包括如通过根据本文教导编写的存储在内部的计算机程序选择性地激活或者配置的通用数字计算机,和/或包括为所需目的而专门地构造的装置。各种实施例也涉及用于执行这些操作的装置或系统。这些装置可以是为所需目的而专门地构造的或者可以包括通用计算机。用于各种这些机器的所需结构将从给出的描述中显而易见。

现在参考附图,其中相似的附图标记自始至终用于指代相似的元素。在以下描述中,出于说明的目的,阐述了许多具体细节以便提供其透彻理解。然而,可能显然的是,可在没有这些具体细节的情况下实践新颖实施例。在其他实例中,众所周知的结构和器件被以框图形式示出以方便其描述。意图是为了涵盖权利要求的范围内的所有修改、等同物和替代物。

图1图示了可以表示各种实施例的操作环境100的示例。操作环境100可以包括共享虚拟存储器(svm)器件102-1、102-2、102-n、输入/输出存储器管理单元(iommu)104、共享虚拟存储器(svm)106和cpu108。在操作环境100中,iommu104可以支持svm器件102-1、102-2、102-n与svm106之间的存储器操作。例如,iommu104可以限制源自于svm器件(例如,svm器件102-1、102-2或102-n)对cpu的代码页面(例如,cpu108)的写入访问,使得该svm器件不能用于攻击并操纵cpu的行为。实施例在此上下文中不受限制。

在各种实施例中,iommu104可以方便并控制svm器件102-1、102-2、102-n与svm106之间的存储器操作。在各种此类实施例中,iommu104可以是将支持直接存储器访问(dma)的输入/输出(i/o)总线连接到主存储器的存储器管理单元。在一个或多个实施例中,svm器件102可以向iommu104发出存储器事务请求。在一个或多个此类实施例中,存储器事务请求可以包括存储器访问请求和存储器转换请求中的一个或多个。在各种实施例中,存储器访问请求可以包括读取和/或写入操作。在许多实施例中,存储器转换请求可以包括存储器地址在各种映射(例如,虚拟的、线性的、物理的等)之间的转换。在许多此类实施例中,存储器转换请求可以利用地址转换服务(ats)协议。在一些实施例中,主存储器可以是cpu108可直接地访问的任何存储器。例如,主存储器可以包括随机访问存储器(ram)。在各种实施例中,主存储器可以经由存储器总线与cpu108通信地耦合。在各种此类实施例中,iommu104可以在存储器事务请求通过存储器总线之前接收存储器事务请求。在其他此类实施例中,iommu104可以在存储器事务请求通过存储器总线之后接收存储器事务请求。以相同或类似的方式,iommu104可以从svm器件接收存储器事务请求。

在一个或多个实施例中,操作环境100可以包括一组一个或多个iommu。例如,svm器件102-1可以具有专用iommu,然而svm器件102-2、102-n共享第二iommu。本文中描述的各种实施例可以包括在内部执行安全检查的一个或多个iommu。在各种此类实施例中,可以在专用硬件和/或电路中实现安全检查。在一个或多个实施例中,cpu108可以具有或者利用mmu。在一些实施例中,可以在不用修改任何现有的控制流(例如,cpu108的)的情况下执行安全检查。在各种实施例中,可以在没有附加页面遍历的情况下执行安全检查。在一个或多个实施例中,这些能力可以用最小硬件改变对于安全漏洞使得能实现全局且高影响修复。

在一些实施例中,iommu104可以使得cpu108的进程能够直接地与一个或多个svm器件(例如,svm器件102-1、102-2、102-n)共享svm106的资源。从软件应用的角度来看,这可以允许无缝基于指针的数据结构共享,而从系统的角度来看,它可以允许进程存储器页面表共享和器件页面故障。然而,通过使用svm106,svm器件可以能够隐式访问整个64位进程存储器,并且在不用iommu104执行安全检查以限制源自于svm器件对cpu的代码页面的写入访问的情况下,svm器件可以被用作攻击并操纵cpu的行为的部件。

因此,在本文中描述的一个或多个实施例中,iommu104可以执行安全检查以基于请求的一个或多个属性(诸如来源或类型)和关联的权限集来确定是否或者如何执行存储器事务请求(例如,存储器转换请求和/或存储器访问请求)。例如,是否执行存储器事务请求的确定可以基于以下各项中的一个或多个:存储器事务请求的来源是否是svm器件、存储器事务请求是否是存储器转换请求、存储器事务请求包括还是与写入请求相关联、关联的权限集是否允许或者限制存储器事务请求、与存储器事务请求相关联的存储器页面是否存在于主存储器中以及与存储器事务请求相关联的存储器页面是否是可执行的。在一些实施例中,可以将所关联的权限集包括在存储在高速缓存中的转换条目中。

在一些实施例中,当iommu104接收到对svm106的存储器事务请求时,它可以确定存储器事务请求的来源是否是svm器件(例如,svm器件102-1、102-2或102-n)。在一些此类实施例中,当iommu104确定从svm器件接收到存储器事务请求时,它可以确定存储器事务请求是否是写入请求。然而,如果存储器事务请求不是来自svm器件和/或不是写入请求,则iommu104可以通过从svm106向存储器事务请求的来源/从存储器事务请求的来源向svm106传送数据来为存储器事务请求服务。例如,当从svm器件102-2接收到包括读取请求的存储器事务请求时,iommu104可以通过从svm106向svm器件102-2传送数据来为读取请求服务。

在各种实施例中,当iommu104从svm器件接收到包括写入请求的存储器事务请求时,iommu104可以标识在svm106中与写入请求相关联的存储器页面并且确定所关联的存储器页面是否存在且可执行。在各种此类实施例中,当与写入请求相关联的存储器页面存在且可执行时,iommu104可以生成访问违反故障,并且可以终止请求。然而,如果与写入请求相关联的存储器页面不存在和/或不可执行,则iommu104可以为写入请求服务。例如,当写入请求与在svm106中不可执行的存储器页面相关联时,iommu104可以通过从请求svm器件(例如,svm器件102-1、102-2或102-n)向svm106传送数据以用于存储来为写入请求服务。

在一些实施例中,iommu104可以根据分页架构将器件可见虚拟地址映射到物理地址。在一些此类实施例中,iommu104可以利用由分页架构支持的存储器事务请求、高速缓存条目、页面表、页面目录或页面目录指针表中的一个或多个来将器件可见虚拟地址转换到物理地址,标识与存储器事务请求相关联的存储器页面,确定与存储器事务请求相关联的存储器页面是否存在于主存储器中,和/或确定与存储器事务请求相关联的存储器页面是否是可执行的。例如,svm器件102-1可以向iommu104发送包括器件可见虚拟地址的存储器事务请求。iommu104然后可以基于虚拟地址标识或者确定与存储器事务请求相关联的高速缓存条目、页面目录指针、页面目录条目、页面表条目、存储器页面和物理地址中的一个或多个。

在各种实施例中,分页架构可以在高速缓存条目、页面目录条目、页面表条目、存储器页面、物理地址或其他地方中的一个或多个中支持一个或多个信息位。在各种此类实施例中,这些信息位可以由iommu104使用来确定存储器事务请求的一个或多个特性或属性,诸如与存储器事务请求相关联的存储器页面是否是存在、可读、可写或可执行中的一种或多种。例如,与存储器事务请求相关联的页面表条目可以包括由iommu104使用来确定与存储器事务请求相关联的存储器页面是否存在并且与存储器事务请求相关联的存储器页面是否可执行的信息位。在一个或多个实施例中,分页架构可以支持物理地址扩展(pae)。

在一些实施例中,可以使用支持用于指示存储器页面是否存在于主存储器中的信息位的分页架构。在一些此类实施例中,此信息位可以被称为存在位(presentbit)。在各种实施例中,iommu104可以基于存在位确定与存储器事务请求相关联的存储器页面是否存在于主存储器中。例如,与存储器事务请求相关联的存储器页面可以在存在位为1的情况下存在于主存储器中,而在存在位为0的情况下不存在于主存储器中。在各种实施例中,存在位可以是pae位。在一些实施例中,存在位可以是每个页面表条目的一部分。在一些此类实施例中,存在位可以是每个页面表条目的最低有效位。

在各种实施例中,可以使用支持用于指示存储器页面是否可执行的信息位的分页架构。在各种此类实施例中,此信息位可以被称为执行位。在一些实施例中,执行位可以使存储器的用作为处理器指令(例如,可执行代码)的存储或者用于数据的存储的区域分离。换句话说,执行位可以定义所关联的存储器页面是否可由cpu(例如,cpu108)使用来从中执行代码。在各种实施例中,执行位可以由iommu104使用来确定与存储器事务请求相关联的存储器页面是否是可执行的(即,存储器页面是否被用于处理器指令的存储)。例如,与存储器事务请求相关联的存储器页面在执行位为0的情况下可以是可执行的,而在执行位为1的情况下不是可执行的。在一些实施例中,执行位可以是pae位。在各种实施例中,执行位可以是每个页面表条目的一部分。在各种此类实施例中,执行位可以是每个页面表条目的最高有效位。在一些实施例中,执行位可以包括intel®64和intel®architecture(ia)32分页架构的no-execute(nx)位。在一些此类实施例中,iommu104可以基于nx位确定与存储器事务请求相关联的存储器页面是否是可执行的。

在一些实施例中,可以利用iommu104来访问物理存储器或svm106。iommu104可以经由x86页面表将与存储器事务请求相关联的地址从客户虚拟地址转换为客户物理地址,并且经由扩展页面表(ept)从客户物理地址转换为主机物理地址。在各种实施例中,所有mmu的页面表结构可以是相同的,使得可以在cpu108与svm器件102-1、102-2、102-n之间无缝地共享物理存储器。

在一个或多个实施例中,安全检查可以利用页面表结构。例如,页面表结构可以包括关于特定页面是否可执行的信息(例如,一组或多组位)。在一些此类实施例中,此信息可以被包括在nx位、执行禁用(xd)位、ept的slee位、ept的x位等中的一个或多个中。在各种实施例中,iommu104可以执行安全检查。在各种此类实施例中,安全检查可以确保每当写入请求从svm器件到达时,如果所请求的页面存在(存在位是1)并且页面是可执行的(累加x位是1),则地址转换故障(atf)被生成并且请求被终止。在本文中描述的一个或多个实施例中,可以响应于存储器事务请求而生成反映有关存储器事务请求的数据的高速缓存条目。例如,高速缓存条目可以反映与存储器事务请求相关联的页面不是可写的(写入访问位是0)。在一些此类示例中,这可以通过包括在高速缓存条目中的权限集来反映。这些高速缓存条目的使用可以通过防止整个页面遍历来使性能开销最小化。

如所图示的实施例中所示,iommu104可以与svm器件102-1、102-2、102-n和svm106通信地耦合。应了解的是,可以在各种实施例中包括任何数量的svm器件,如通过102-n表示法所指示的。因此,本文中描述的实施例可以包括一个或多个svm器件。在一些实施例中,svm器件可以包括利用共享虚拟存储器来使得cpu进程能够直接地与该器件或组件共享资源的任何器件或组件。例如,cpu和svm器件可以经由统一虚拟地址空间共享资源。在各种实施例中,svm器件可以包括硬件加速器、图形处理单元(gpu)、现场可编程门阵列(fpga)、片上系统(soc)、语音处理单元(spu)、输入/输出(i/o)器件、数字信号处理器(dsp)、专用集成电路(asic)等中的一个或多个。

图2a图示了可以表示各种实施例的操作环境200的示例。除了svm器件102、iommu104和svm106之外,操作环境200还可以包括异常处理程序210。在操作环境200中,iommu104可以执行安全检查以确定是否为从svm器件102接收到的存储器事务请求服务。在各种实施例中,安全检查可以确定以下各项中的一个或多个:存储器事务请求的来源是否是svm器件、存储器事务请求是否是写入请求以及与存储器事务请求相关联的存储器页面是否存在于主存储器中并且是可执行的。在各种此类实施例中,iommu104可以确定存储器事务请求通过安全检查并且为存储器事务请求服务,除非存储器事务请求的来源是svm器件,存储器事务请求是写入请求,并且与存储器事务请求相关联的存储器页面存在于主存储器中并且是可执行的。另一方面,如果iommu104确定存储器事务请求未通过安全检查并且不应该被服务,则可以生成访问请求故障并将它传递到异常处理程序210。在一个或多个实施例中,可以基于iommu高速缓存206中的一个或多个条目执行安全检查。实施例在此上下文中不受限制。

在所图示的实施例中,iommu104可以包括请求管理器202、页面管理器204、iommu高速缓存206和一个或多个iommu寄存器208。在一些实施方案中,iommu104的组件可以操作来确定如何处理从svm器件102接收到的存储器事务请求。例如,iommu104的组件可以操作来限制包括源自于svm器件102对cpu108的代码页面的写入请求的存储器事务请求,使得svm器件102不能用于攻击并操纵cpu108的行为。应了解的是,虽然图2中图示的iommu104实施例包括请求管理器202、页面管理器204、iommu高速缓存206和(一个或多个)iommu寄存器208组件,但是可以利用任何类型、数量或组合的组件来实现本文中描述的iommu104的功能性。

在各种实施例中,当iommu104接收到存储器事务请求(诸如存储器访问请求)时,请求管理器202可以确定存储器事务请求的来源。例如,请求管理器202可以确定svm器件102是存储器事务请求的来源。在一些实施例中,当存储器事务请求的来源不是svm器件(例如,svm器件102-1)时,请求管理器202可以确定存储器事务请求通过安全检查。

在一些实施例中,如果请求管理器202确定存储器事务请求的来源是svm器件并且存储器事务请求包括写入请求,则页面管理器204或iommu高速缓存206可以被请求管理器202利用来标识与存储器事务请求相关联的存储器页面。在各种实施例中,页面管理器204可以利用存储器事务请求、页面表、页面目录或页面目录指针表中的一个或多个来标识与存储器事务请求相关联的存储器页面。一旦与存储器事务请求相关联的存储器页面被标识,请求管理器202就可以利用页面管理器204和/或iommu高速缓存206来确定存储器页面是否存在于主存储器中并且存储器页面是否是可执行的。

在各种实施例中,可以基于一个或多个信息位(诸如在页面表条目或高速缓存条目中)确定与存储器事务请求相关联的存储器页面是否存在和/或可执行。例如,页面管理器204可以标识与存储器事务请求相关联的页面表条目。在此类实例中,页面管理器204可以基于页面表条目中的第一位来确定与存储器事务请求相关联的存储器页面是否存在并且基于页面表条目中的第二位来确定与存储器事务请求相关联的存储器页面是否是可执行的。在一些实施例中,页面管理器204可以将与存储器事务请求相关联的存储器页面是否存在于主存储器中和/或可执行的指示传递给请求管理器202。在一个或多个实施例中,请求管理器202可以基于iommu高速缓存206中的一个或多个条目来做出这些确定中的一个或多个。在一个或多个此类实施例中,这可以防止页面管理器204执行附加页面遍历。在一些实施例中,可以以与iommu高速缓存206或器件高速缓存220(参见图2b)的方式使用cpu高速缓存214。在各种实施例中,基于与存储器事务请求相关联的存储器页面是否存在于主存储器中并且可执行的确定,请求管理器202可以确定存储器事务请求是否通过安全检查。例如,如果与存储器事务请求相关联的存储器页面不存在于主存储器中或者不是可执行的,则请求管理器202可以确定存储器事务请求通过安全检查。然而,如果与存储器事务请求相关联的存储器页面存在于主存储器中并且是可执行的,则访问请求故障可以诸如由请求管理器202或页面管理器204生成。在各种实施例中,然后可以将访问请求故障传递给异常处理程序210。在各种此类实施例中,异常处理程序210可以响应于访问请求故障而终止存储器事务请求。在一个或多个实施例中,可以经由cpu108实现异常处理程序210。在一些实施例中,异常处理程序210可以是由cpu108执行的操作系统(os)或虚拟机监视器(vmm)的一部分。

在各种实施例中,cpu108可以包括处理电路212、cpu高速缓存214和(一个或多个)cpu寄存器216。在一个或多个实施例中,cpu108可以实现操作系统(os)或虚拟机监视器(vmm)中的一个或多个。在一些实施例中,可以经由一个或多个寄存器(例如,(一个或多个)iommu寄存器208、(一个或多个)cpu寄存器216和器件寄存器222(参见图2b))启用或者激活本文中描述的一个或多个安全检查。在各种实施例中,iommu寄存器208可以包括指示iommu的特定版本是否能够执行这些安全检查中的一个或多个的位。例如,可以在包括在iommu寄存器208中的扩展能力寄存器中分配一位以指示iommu104的能力。在另一实例中,可以在包括在cpu寄存器216中的全局命令寄存器中分配一位。在此类其他实例中,该位可以由软件使用来激活或者去激活一个或多个安全检查。在各种实施例中,本文中描述的寄存器中的一个或多个可以是存储器映射的。在各种此类实施例中,存储器映射的寄存器可以由硬件设置,并且软件可以仅具有读取访问。

图2b图示了可以表示各种实施例的操作环境250的示例。在本文中描述的一个或多个实施例中,可以设置操作环境250以利用ats协议。为此,操作环境250的svm器件102可以包括事务管理器218、器件高速缓存220和器件寄存器222。在各种实施例中,ats协议可以提供允许svm器件102参与存储器转换过程的机制,诸如通过为它自己的存储器事务提供它自己的高速缓存(例如,器件高速缓存220)。在操作环境250中,iommu104可以执行安全检查以确定是否为从svm器件102接收到的存储器事务请求服务。在各种实施例中,安全检查可以确定以下各项中的一个或多个:存储器事务请求的来源是否是svm器件、存储器事务请求是否是要求写入权限的转换请求以及与存储器事务请求相关联的目的地地址是否是可执行的。在一些实施例中,iommu104可以在目的地地址不是可执行的时生成具有读写访问的转换完成,而在目的地地址是可执行的时生成具有只读访问的转换完成。实施例在此上下文中不受限制。

在一个或多个实施例中,使高速缓存与svm器件102集成在一起可以通过分发地址转换缓存职责来防止对iommu高速缓存206的过度需求。在一个或多个此类实施例中,分发地址转换缓存职责可以允许利用集成高速缓存的svm器件对iommu高速缓存206大小具有更少的性能依赖。进一步地,集成高速缓存可以通过使得预先转换的存储器事务请求能够被发送到mmu来确保最佳访问等待时间。

在一些实施例中,ats协议可以将存储器事务请求分成两种类型:存储器访问请求和存储器转换请求。在各种实施例中,从svm器件使用存储器访问请求来向转换代理(诸如iommu104)发送存储器读取/写入请求。在各种此类实施例中,存储器访问请求可以包括指示存在的地址的类型(例如,转换的或未转换的)的地址类型(at)字段,诸如在请求报头中。在一些实施例中,转换请求由svm器件使用来在不同的地址映射之间转换,诸如从虚拟地址转换成物理地址。

在各种实施例中,操作环境250中的存储器事务请求可以进行如下。ats和svm访问控制机制可以诸如由os或vmm根据配置初始化。在一些实施例中,可以通过在一个或多个iommu中设置ats扩展能力结构、svm访问控制能力寄存器和页面表来初始化ats和svm访问控制机制。一旦被初始化,当通过iommu104接收到存储器事务时,就可以执行一个或多个检查以确定请求是否是转换请求类型的(例如,at位是01b),请求是否由svm器件发起,或者器件是否正在请求写入权限(例如,不写入(nw)位是0)。

在一个或多个实施例中,如果不满足那些要求中的任一个,则iommu104执行传统存储器访问并且应用现有的svm访问控制机制。然而,如果满足所有那些要求,则iommu104可以对于所请求的页面执行页面遍历并且检查是否设置了页面的累加执行权限(例如,经由考虑nxe、slee、ex和/或x位中的一个或多个)。如果所请求的页面是可执行的,则iommu104可以用授予只读权限的转换完成消息(例如,设置为10b的rw位)对svm器件做出响应,然而,如果所请求的页面不是可执行的,则用授予读写权限的转换完成消息(例如,设置为11b的rw位)对svm器件做出响应。接下来如果svm器件请求多个页面的转换,则下一个请求的页面被类似地处理直到所有存储器转换请求被服务为止。因此,在各种实施例中,如果目标页面被cpu108标记为可执行的则具有写入权限的源自于svm器件102的转换请求将被iommu104拒绝。在各种此类实施例中,可以忽视现有的写入权限。在一个或多个实施例中,可以不允许svm器件102修改代码页面(例如,cpu108代码页面)以确保代码完整性。

图3图示了可以表示各种实施例的操作环境300的示例。在本文中描述的一个或多个实施例中,操作环境300可以包括具有一个或多个转换条目304-1、304-2、304-n的高速缓存302。在本文中描述的各种实施例中,可以利用转换条目304来对存储器事务请求执行安全检查。在各种此类实施例中,利用高速缓存302的安全检查的执行可以通过减少页面遍历的数量来改进安全性检查的效率。在一个或多个实施例中,高速缓存302可以与iommu高速缓存206、cpu高速缓存214和/或器件高速缓存220相同或类似。在一些实施例中,高速缓存302可以是转换后备缓冲器(tlb)。实施例在此上下文中不受限制。

图4图示了可以表示各种实施例的操作环境400的示例。在本文中描述的一个或多个实施例中,操作环境400可以包括具有地址转换454和转换元数据458的转换条目452。在各种实施例中,转换条目452可以与转换条目404-1、404-2、404-n中的一个或多个相同或类似。在一些实施例中,地址转换454可以包括一个或多个对应的地址456-1、456-2、456-n。在一些此类实施例中,地址456中的每一个可以对应于不同的地址映射,从而使得能实现不同的地址映射之间的转换。例如,地址456-1可以对应于虚拟地址,地址456-2可以对应于线性地址,并且地址456-n可以对应于物理地址。实施例在此上下文中不受限制。

在一个或多个实施例中,可以诸如通过请求管理器202使用地址转换454来标识与存储器事务请求相关联的转换条目。例如,存储器事务请求可以包括地址456-1。在一些实施例中,转换条目452也可以包括转换元数据458。在本文中描述的各种实施例中,可以利用转换元数据458来对存储器事务请求执行安全检查。例如,安全检查可以包括权限集460是否允许或者许可请求存储器事务的确定。在一些实施例中,权限集460可以指代可以如何操纵关联的存储器位置的内容。在所图示的实施例中,权限集460可以包括以下权限:读取464、写入466、执行468。在一个或多个实施例中,每个权限可以包括一位,并且如果该位被设置则所关联的权限是允许的,但是如果该位未被设置则所关联的权限是不允许的。例如,如果读取464和执行468权限被设置,但是写入466权限未被设置,则可以读取(例如,由iommu104)并执行(例如,由cpu108)所关联的存储器位置,然而,所关联的存储器位置不可能被写入。附加地,在一些实施例中,转换元数据458可以包括附加数据462。在一些此类实施例中,附加数据462可以提供有关与转换条目452相关联的存储器的块的更多信息,诸如块的长度。在一个或多个实施例中,转换条目452可以包括一组位。在一个或多个此类实施例中,转换元数据458可以包括该组位的一个或多个子集。

图5a图示了可以表示可以在各种实施例中与提供共享虚拟存储器(svm)访问保护相结合地执行的操作的逻辑流程500的一个实施例。逻辑流程500可以表示可以由图1-2b的操作环境100、200或250的一个或多个组件(诸如iommu104)执行的一些或所有操作。实施例在此上下文中不受限制。

在图5a中所示的所图示的实施例中,逻辑流程500可以在块502处开始。在块502“初始化”处可以初始化iommu。例如,初始化可以是基本输入/输出系统(bios)引导过程的一部分。在一些实施例中,初始化可以包括bios引导过程以及bios需要做以实现安全检查的附加功能性,诸如设置页面表、页面目录、页面目录指针、信息位等。在各种实施例中,初始化可以使iommu104准备监视svm器件102-1、102-2、102-n与svm106之间的存储器路径。在一些实施例中,初始化可以使多个mmu准备监视多个存储器路径中的每一个。在一个或多个实施例中,初始化可以包括设置或者评估一个或多个寄存器值,诸如(一个或多个)iommu寄存器208、(一个或多个)cpu寄存器216和/或(一个或多个)器件寄存器222中的一个或多个值。在一个或多个此类实施例中,寄存器可以包括扩展能力寄存器、全局命令寄存器或svm访问控制能力寄存器中的一个或多个。

进行到块504“等待访问请求”可以等待存储器事务请求的接收。在各种实施例中,监视svm器件与共享虚拟存储器之间的存储器路径可以包括等待存储器事务请求的接收。例如,iommu104可以通过监视svm器件102-1、102-2、102-n与svm106之间的存储器路径来等待存储器事务请求的接收。在一些实施例中,块504可以是器件通过iommu104向存储器发送访问请求的连续循环中的第一块。

在块506“接收访问请求”处可以接收访问请求。例如,iommu104可以从svm器件102-1、102-2或102-n接收存储器事务请求。在各种实施例中,访问请求可以以从svm106读取数据或者向svm106写入数据为目标。在一些实施例中,请求管理器202可以从svm器件102-1接收存储器事务请求。

继续到块508“来源是否是svm器件”,可以确定所接收到的存储器事务请求的来源是否是svm器件。例如,iommu104可以确定存储器事务请求的来源是svm器件102-1、102-2或102-n还是非svm器件。在一些实施例中,请求管理器202可以确定存储器事务请求的来源。在各种实施例中,可以基于存储器事务请求中的一个或多个位来确定存储器事务请求的来源。例如,存储器事务请求可以包括由iommu104使用来确定存储器事务请求的来源的唯一标识符。

返回参考块508,如果来源不是svm器件,则逻辑流程500可以进行到块510“为访问请求服务”。例如,iommu104可以响应于存储器事务请求的来源不是svm器件(例如,不是svm器件102-1、102-2或102-n)而从svm106读取内容或者向svm106写入内容。在一些实施例中,当存储器事务请求的来源不是svm器件时,iommu104可以确定存储器事务请求通过安全检查。在各种实施例中为访问请求服务可以像它将在传统系统中那样进行。在一些实施例中,一旦存储器事务请求已被服务,逻辑流程500就可以返回到块504“等待访问请求”作为连续循环的一部分。在一些此类实施例中,可以仅在功率状态改变或系统设定改变时退出连续循环。

在一些实施例中,为存储器事务请求服务可以包括利用iommu104(例如,请求管理器202、页面管理器204和/或iommu高速缓存206)根据分页架构将包括在存储器事务请求中的器件可见虚拟地址映射到对应的物理地址。在一些此类实施例中,iommu104可以利用存储器事务请求、页面表、页面目录或页面目录指针表中的一个或多个来将器件可见虚拟地址转换为物理地址和/或标识与存储器事务请求关联的存储器页面。例如,svm器件102-1可以向iommu104发送包括器件可见虚拟地址的存储器事务请求。iommu104然后可以基于虚拟地址标识或者确定与存储器事务请求相关联的高速缓存条目(例如,转换条目452)、页面目录指针、页面目录条目、页面表条目、存储器页面和物理地址中的一个或多个。在各种实施例中,iommu104可以在svm106中检索和/或存储数据作为为存储器事务请求服务的一部分。

再次参考块508,如果来源是svm器件,则逻辑流程500可以进行到块512“写入请求”。例如,iommu104可以确定来自svm102-1的存储器事务请求是否包括写入请求。在各种实施例中,请求管理器202可以确定存储器事务请求是否是写入请求。在一些实施例中,当存储器事务请求不是写入请求时,iommu104(例如,请求管理器202)可以确定存储器事务请求通过安全检查。在各种实施例中,当存储器事务请求不是写入请求时,逻辑流程500可以进行到块510“为访问请求服务”并且如上所述继续。然而,如果存储器事务请求是写入请求,则逻辑流程500可以进行到块514。

在块514“页面是否存在”处,可以确定与存储器事务请求相关联的存储器页面是否存在于主存储器中。例如,iommu104可以利用页面管理器204或高速缓存302来确定与存储器事务请求相关联的存储器页面是否存在于主存储器中。在一些此类示例中,高速缓存302可以包括iommu高速缓存206、spu高速缓存214或器件高速缓存220中的一个或多个。在各种实施例中,主存储器可以指代随机访问存储器(ram)。在一些实施例中,iommu104可以利用由分页和/或缓存架构支持的存储器事务请求、高速缓存条目(例如,转换条目452)、页面表、页面目录或页面目录指针表中的一个或多个来确定与存储器事务请求相关联的存储器页面是否存在于主存储器中。在各种实施例中,可以使用支持用于指示存储器页面是否存在于主存储器中的信息位(例如,存在位)的分页和/或缓存架构。例如,与存储器事务请求相关联的存储器页面可以在存在位为1的情况下存在于主存储器中,而在存在位为0的情况下不存在于主存储器中。在一些实施例中,存在位可以是每个页面表条目的一部分。在一些此类实施例中,存在位可以是每个页面表条目的最低有效位。在各种实施例中,存在位可以是pae位。在一个或多个实施例中,存在位可以被包括在高速缓存条目(诸如转换条目452)中。

返回参考块514,如果页面不存在,则逻辑流程500可以进行到块510“为访问请求服务”并且如上所述继续。在一些实施例中,当与存储器事务请求相关联的存储器页面不存在于主存储器中时,块510可以包括将与存储器事务请求相关联的存储器页面分页到主存储器中。在各种实施例中,当与存储器事务请求相关联的存储器页面不存在于主存储器中时,iommu104可以确定存储器事务请求通过安全检查。另一方面,如果与存储器事务请求相关联的存储器页面存在于主存储器中,则逻辑流程500可以进行到块516。

在块516“页面是否是可执行的”处可以确定与存储器事务请求相关联的存储器页面是否是可执行的。例如,iommu104可以利用页面管理器204或高速缓存302来确定与存储器事务请求相关联的存储器页面是否是可执行的。在一些此类示例中,高速缓存302可以包括iommu高速缓存206、spu高速缓存214或器件高速缓存220中的一个或多个。在各种实施例中,iommu104可以利用由分页和/或缓存架构支持的存储器事务请求、高速缓存条目(例如,转换条目452)、页面表、页面目录或页面目录指针表中的一个或多个来确定与存储器事务请求相关联的存储器页面是否是可执行的。在一些实施例中,可以使用支持用于指示存储器页面是否可执行的信息位(例如,执行位)的分页和/或缓存架构。在一些此类实施例中,信息位可以是高速缓存条目(诸如转换条目452)中的一个或多个位。在各种实施例中,执行位可以定义所关联的存储器页面是否可由cpu(例如,cpu108)使用来从中执行代码。在一个或多个实施例中,执行位可以包括nxe、slee、xd或x位中的一个或多个。

在一些实施例中,执行位可以由iommu104使用来确定与存储器事务请求相关联的存储器页面是否是可执行的(即,存储器页面是否被用于处理器指令的存储)。例如,与存储器事务请求相关联的存储器页面可以在执行位为0的情况下是可执行的,而在执行位为1的情况下不是可执行的。在各种实施例中,执行位可以是pae位。在一些实施例中,执行位可以是每个页面表条目的一部分。在各种此类实施例中,执行位可以是每个页面表条目的最高有效位。在一些实施例中,执行位可以包括intel®64和ia-32分页架构的no-execute(nx)位。

返回参考块516,如果页面不是可执行的,则逻辑流程500可以进行到块510“为访问请求服务”并且如上所述继续。在各种实施例中,当与存储器事务请求相关联的存储器页面不是可执行的时,iommu104可以确定存储器事务请求通过安全检查。另一方面,如果与存储器事务请求相关联的存储器页面是可执行的,则逻辑流程500可以进行到块518。

在块518“生成访问请求故障”处可以生成访问请求故障。例如,当在块508处来源被标识为svm器件(例如,svm器件102-1、102-2、102-n)、在块512处存储器事务请求被确定为包括写入请求、在块514处与存储器事务请求相关联的存储器页面存在于主存储器中并且在块516处与存储器事务请求相关联的存储器页面是可执行的时iommu104可以生成访问请求故障。在各种实施例中,访问请求故障的生成可以响应于iommu104确定存储器事务请求未通过安全检查。在一些实施例中,请求管理器202可以产生访问请求故障。在一个或多个实施例中,页面管理器204可以产生访问请求故障。

进行到块520“信号异常处理”可以使异常处理程序知道访问请求故障。例如,iommu104(例如,请求管理器202和/或页面管理器204)可以生成包括中断信号以使异常处理程序210知道访问请求故障的访问请求故障。在一些实施例中,异常处理程序210可以是os的一部分。在各种实施例中,异常处理程序210可以响应于访问请求故障而终止存储器事务请求。在一些实施例中,一旦已经向异常处理程序发信号通知了访问请求故障,逻辑流程500就可以返回到块504“等待访问请求”作为连续循环的一部分。

图5b图示了可以表示可以在各种实施例中与提供共享虚拟存储器(svm)访问保护相结合地执行的操作的逻辑流程550的一个实施例。逻辑流程550可以表示可以由图1-2b的操作环境100、200或250的一个或多个组件(诸如iommu104)执行的一些或所有操作。实施例在此上下文中不受限制。

在图5b中所示的所图示的实施例中,逻辑流程550可以在块552处开始。在块552“初始化”处可以初始化iommu。例如,初始化可以是基本输入/输出系统(bios)引导过程的一部分。在一些实施例中,初始化可以包括bios引导过程,以及bios需要做以实现安全检查的附加功能性,诸如设置页面表、页面目录、页面目录指针、信息位等。在各种实施例中,初始化可以使iommu104准备监视svm器件102-1、102-2、102-n与svm106之间的存储器路径。在一些实施例中,初始化可以使多个mmu准备监视多个存储器路径中的每一个。在一个或多个实施例中,初始化可以包括设置或者评估一个或多个寄存器值,诸如(一个或多个)iommu寄存器208、(一个或多个)cpu寄存器216和/或(一个或多个)器件寄存器222中的一个或多个值。在一个或多个此类实施例中,寄存器可以包括扩展能力寄存器、全局命令寄存器或svm访问控制能力寄存器中的一个或多个。

进行到块554“等待事务请求”可以等待存储器事务请求的接收。在各种实施例中,监视svm器件与共享虚拟存储器之间的存储器路径可以包括等待存储器事务请求的接收。例如,iommu104可以通过监视svm器件102-1、102-2、102-n与svm106之间的存储器路径来等待存储器事务请求的接收。在一些实施例中,块554可以是其中器件通过iommu104向存储器发送访问请求的连续循环中的第一块。

在块556“接收事务请求”处可以接收事务请求。例如,iommu104可以从svm器件102-1、102-2或102-n接收存储器事务请求。在各种实施例中,事务请求可以以从svm106读取数据或者向svm106写入数据或者在不同的地址映射之间转换为目标。在一个或多个实施例中,事务请求可以遵守ats协议。在一些实施例中,请求管理器202可以从svm器件102-1接收存储器事务请求。

继续到块558“来源是否是svm器件”,可以确定所接收到的存储器事务请求的来源是否是svm器件。例如,iommu104可以确定存储器事务请求的来源是svm器件102-1、102-2或102-n还是非svm器件。在一些实施例中,请求管理器202可以确定存储器事务请求的来源。在各种实施例中,可以基于存储器事务请求中的一个或多个位来确定存储器事务请求的来源。例如,存储器事务请求可以包括由iommu104使用来确定存储器事务请求的来源的唯一标识符。返回参考块558,如果来源不是svm器件,则逻辑流程550可以进行到块560“为事务请求服务”。例如,iommu104可以响应于存储器事务请求的来源不是svm器件(例如,不是svm器件102-1、102-2或102-n)而从svm106读取内容或者向svm106写入内容。在一些实施例中,当存储器事务请求的来源不是svm器件时,iommu104可以确定存储器事务请求通过安全检查。在各种实施例中为访问请求服务可以像它将在传统系统中那样进行。在一些实施例中,一旦存储器事务请求已被服务,逻辑流程550就可以返回到块554“等待事务请求”作为连续循环的一部分。在一些此类实施例中,可以仅在功率状态改变或系统设定改变时退出连续循环。

在一些实施例中,为存储器事务请求服务可以包括利用iommu104(例如,请求管理器202、页面管理器204和/或iommu高速缓存206)来根据分页和/或缓存架构将包括在存储器事务请求中的器件可见虚拟地址映射到对应的物理地址。在一些此类实施例中,iommu104可以利用存储器事务请求、页面表、页面目录或页面目录指针表中的一个或多个来将器件可见虚拟地址转换为物理地址和/或标识与存储器事务请求相关联的存储器页面。例如,svm器件102-1可以向iommu104发送包括器件可见虚拟地址的存储器事务请求。iommu104然后可以基于虚拟地址标识或者确定与存储器事务请求相关联的高速缓存条目(例如,转换条目452)、页面目录指针、页面目录条目、页面表条目、存储器页面和物理地址中的一个或多个。在各种实施例中,iommu104可以在svm106中检索和/或存储数据作为为存储器事务请求服务的一部分。

再次参考块558,如果来源是svm器件,则逻辑流程550可以进行到块562“转换请求”。例如,iommu104可以确定来自svm102-1的存储器事务请求是否是转换请求。在各种实施例中,请求管理器202可以确定存储器事务请求是否是转换请求。在一些实施例中,当存储器事务请求不是转换请求时,iommu104(例如,请求管理器202)可以确定存储器事务请求通过安全检查。在各种实施例中,当存储器事务请求不是转换请求时,逻辑流程550可以进行到块560“为事务请求服务”并且如上所述继续。然而,如果存储器事务请求是转换请求,则逻辑流程550可以进行到块564。

在块564“要求写入权限”处可以确定转换请求是与写入请求相关联还是要求写入权限。例如,iommu104可以确定来自svm102-1的存储器转换请求是要求写入权限还是与写入请求相关联。在各种实施例中,请求管理器202可以确定存储器转换请求是要求写入权限还是与写入请求相关联。在一些实施例中,当存储器转换请求不要求写入权限或者不与写入请求相关联时,iommu104(例如,请求管理器202)可以确定存储器事务请求通过安全检查。在各种实施例中,当存储器事务请求不要求写入权限或者不与写入请求相关联时,逻辑流程550可以进行到块560“为事务请求服务”并且如上所述继续。然而,如果存储器事务请求要求写入权限或者与写入请求相关联,则逻辑流程550可以进行到块566。

在块566“关联的页面是否是可执行的”处可以确定与存储器转换请求相关联的存储器页面是否是可执行的。例如,iommu104可以利用请求管理器202、页面管理器204或高速缓存302中的一个或多个来确定与存储器事务请求相关联的存储器页面是否是可执行的。在一些此类示例中,高速缓存302可以包括iommu高速缓存206、spu高速缓存214或器件高速缓存220中的一个或多个。在各种实施例中,iommu104可以利用由分页和/或缓存架构支持的存储器事务请求、高速缓存条目(例如,转换条目452)、页面表、页面目录或页面目录指针表中的一个或多个来确定与存储器事务请求相关联的存储器页面是否是可执行的。在一些实施例中,可以使用支持用于指示存储器页面是否可执行的信息位(例如,执行位)的分页和/或缓存架构。在一些此类实施例中,信息位可以是高速缓存条目(诸如转换条目452)中的一个或多个位。在各种实施例中,执行位可以定义所关联的存储器页面是否可由cpu(例如,cpu108)使用来从中执行代码。在一个或多个实施例中,执行位可以包括nxe、slee、xd或x位中的一个或多个。

在一些实施例中,执行位可以由iommu104使用来确定与存储器事务请求相关联的存储器页面是否是可执行的(即,存储器页面是否被用于处理器指令的存储)。例如,与存储器事务请求相关联的存储器页面可以在执行位为0的情况下是可执行的,而在执行位为1的情况下不是可执行的。在各种实施例中,执行位可以是pae位。在一些实施例中,执行位可以是每个页面表条目的一部分。在各种此类实施例中,执行位可以是每个页面表条目的最高有效位。在一些实施例中,执行位可以包括intel®64和ia-32分页架构的no-execute(nx)位。

返回参考块566,如果页面不是可执行的,则逻辑流程550可以进行到块568“发送具有读写访问的转换完成”。另一方面,如果页面是可执行的,则逻辑流程550可以进行到块570“发送具有只读访问的转换完成”。在各种实施例中,当与存储器事务请求相关联的存储器页面不是可执行的时,iommu104可确定存储器事务请求通过安全检查,从而导致读写权限被授予。在一些实施例中,当与存储器事务请求相关联的存储器页面是可执行的时,iommu104可以确定存储器事务请求未通过安全检查,从而导致只读权限被授予。在任何一种情况下,可以在转换完成中传送被授予的权限。在一个或多个实施例中,转换完成可以包括第一映射中的地址,所述地址对应被包括在存储器转换请求中的第二映射中的地址。例如,第一映射中的地址可以包括物理地址并且第二映射中的地址可以包括虚拟地址。

进行到块572“所有关联的页面是否被服务”,可以确定与转换请求相关联的所有页面是否已被服务。如果所有关联的页面尚未被服务,则逻辑流程550可以进行到块574“前进到下一个请求的页面”,返回到块566“关联的页面是否是可执行的”,并且如上所述继续进行。另一方面,如果所有关联的页面已被服务,则逻辑流程550可以进行到块554“等待事务请求”并且如上所述继续进行。

图6a图示了可以表示可以在各种实施例中与提供共享虚拟存储器(svm)访问保护相结合地执行的操作的逻辑流程600的一个实施例。逻辑流程600可以表示可以由图1-2b的操作环境100、200或250的一个或多个组件(诸如iommu104)执行的一些或所有操作。实施例在此上下文中不受限制。

在图6a中所示的所图示的实施例中,逻辑流程600可以在块602处开始。在块602“从共享虚拟存储器(svm)器件接收存储器访问请求,所述存储器访问请求包括多个类型的存储器访问请求的类型”处,可以从svm器件接收一个或多个类型的存储器访问请求。例如,iommu104可以接收读取或写入类型的存储器访问请求。在一些实施例中,可以从svm器件102-1、102-2、102-n中的一个接收存储器访问请求。

继续到块604“在高速缓存中标识与存储器访问请求相关联的转换条目,所述转换条目包括权限集”,可以在高速缓存中标识与存储器访问请求相关联的包括权限集的转换条目。例如,请求管理器202可以在iommu高速缓存206中标识具有权限集460的转换条目(例如,转换条目452)。在一些实施例中,可以由iommu104基于包括在存储器访问请求中的地址来标识所关联的转换条目。例如,存储器访问请求可以包括用于标识所关联的转换条目的虚拟地址。

进行到块606“在权限集允许存储器访问请求的类型时执行存储器访问请求”,可以在权限集允许存储器访问请求的类型时执行存储器访问请求。例如,如果存储器访问请求是读取请求并且权限集460包括被设置的读取464权限,则可以执行存储器访问请求。在块608“在权限集限制存储器访问请求的类型时生成故障”处,可以在权限集限制存储器访问请求的类型时生成故障。例如,如果存储器访问请求是写入请求并且权限集460包括被设置的执行468权限,则可以不执行存储器访问请求。换句话说,如本文中所描述的,存储器访问请求可以不使可执行的存储器位置被写入。

图6b图示了可以表示可以在各种实施例中与提供共享虚拟存储器(svm)访问保护相结合地执行的操作的逻辑流程650的一个实施例。逻辑流程650可以表示可以由图1-2b的操作环境100、200或250的一个或多个组件(诸如iommu104)执行的一些或所有操作。实施例在此上下文中不受限制。

在图6b中所示的所图示的实施例中,逻辑流程650可以在块652处开始。在块652“从共享虚拟存储器(svm)器件接收存储器事务请求,所述存储器访问请求包括与由svm器件利用的svm中的存储器页面相关联的地址”处,可以接收包括与由svm器件利用的svm中的存储器页面相关联的地址的存储器事务请求。例如,iommu可以从svm器件102-n接收存储器事务请求。进一步地,svm器件102-n可以利用svm106。在一些实施例中,存储器事务请求可以遵守ats协议。进行到块654“确定存储器事务请求包括转换请求并且与写入请求相关联”,可以将存储器事务请求确定为包括转换请求并且与写入请求相关联。在各种实施例中,存储器事务请求可包括存储器访问请求或存储器转换请求。在一个或多个实施例中,如果存储器事务请求包括转换请求并且与写入请求相关联,则逻辑流程650可以进行到块656。

在块656“标识与存储器事务请求相关联的存储器页面是否是可执行的”处,可以标识与存储器事务请求相关联的存储器页面是否是可执行的。存储器页面是否可执行的确定可以像诸如相对于图5a的块516或图5b的块566在上面所描述的那样继续进行。继续到块658“在与存储器事务请求相关联的存储器页面不是可执行的时生成具有读写访问的转换完成”,可以在与存储器事务请求相关联的存储器页面不是可执行的时生成具有读写访问的转换完成。例如,iommu104可以响应于从svm器件102-n接收到与不可执行的存储器页面相关联的存储器事务请求而生成针对svm器件102-n的具有读写访问的转换完成。在块660“在与存储器事务请求相关联的存储器页面是可执行的时生成具有只读访问的转换完成”处,可以在与存储器事务请求相关联的存储器页面是可执行的时生成具有只读访问的转换完成。例如,iommu104可以响应于从svm器件102-2接收到与可执行的存储器页面相关联的存储器事务请求而生成针对svm器件102-2的具有只读访问的转换完成。

图7图示了存储介质700的实施例。存储介质700可以包括任何非暂时性计算机可读存储介质或机器可读存储介质,诸如光学、磁或半导体存储介质。在各种实施例中,存储介质700可以包括制品。在一些实施例中,存储介质700可以存储计算机可执行指令,诸如用于实现诸如相对于图5a的逻辑流程500、图5b的逻辑流程550、图6a的逻辑流程600和图6b的逻辑流程650在本文中所描述的逻辑流程或操作中的一个或多个的计算机可执行指令。计算机可读存储介质或机器可读存储介质的示例可以包括能够存储电子数据的任何有形介质,包括易失性存储器或非易失性存储器、可移动或不可移动存储器、可擦除或不可擦除存储器、可写或可重写存储器等。计算机可执行指令的示例可以包括任何适合类型的代码,诸如源代码、编译代码、解释代码、可执行代码、静态代码、动态代码、面向对象代码、可视代码等。实施例在此上下文中不受限制。

图8图示了可以适合于实现如先前描述的各种实施例的示例性计算架构800的实施例。在各种实施例中,计算架构800可以包括或者被实现为电子器件的一部分。在一些实施例中,计算架构800可以例如表示实现或者利用图1的操作环境100、图2a的操作环境200和/或图2b的操作环境250的一个或多个组件的计算机系统。在一些实施例中,计算架构800可以例如表示实现或者利用本文中描述的一个或多个实施例的iommu104或cpu108的一个或多个部分。例如,iommu104可以是与计算架构800相结合地操作的gpu。实施例在此上下文中不受限制。

如本申请中所使用的,术语“系统”及“组件”和“模块”旨在指代计算机相关实体,硬件、硬件和软件的组合、软件或执行中的软件,其示例通过示例性计算架构800来提供。例如,组件可以是但不限于是在处理器上运行的进程、处理器、硬盘驱动器、多个存储驱动器(光学和/或磁存储介质的)、对象、可执行文件、执行的线程、程序和/或计算机。作为图示,在服务器上运行的应用和服务器两者都可以是组件。一个或多个组件可驻留在进程和/或执行的线程内,并且组件可位于一个计算机上和/或分布在两个或更多个计算机之间。进一步地,组件可以通过各种类型的通信介质彼此通信地耦合以协调操作。协调可以涉及信息的单向或双向交换。例如,组件可以以通过通信介质传送的信号的形式传送信息。可将信息实现为分配给各种信号线的信号。在此类分配中,每个消息都是信号。然而,另外的实施例可以替换地采用数据消息。可以跨越各种连接发送此类数据消息。示例性连接包括并行接口、串行接口和总线接口。

计算架构800包括各种公共计算元件,诸如一个或多个处理器、多核处理器、协处理器、存储器单元、芯片组、控制器、外围设备、接口、振荡器、定时器件、视频卡、声卡、多媒体输入/输出(i/o)组件、电源等。然而,实施例不限于通过计算架构800的实施方式。

如图8中所示,计算架构800包括处理单元804、系统存储器806和系统总线808。处理单元804可以是各种商业上可用的处理器中的任一个,包括而不限于amd®athlon®、duron®和opteron®处理器;arm®应用、嵌入式和安全处理器;ibm®及motorola®dragonball®和powerpc®处理器;ibm和sony®cell处理器;intel®celeron®、core(2)duo®、itanium®、pentium®、xeon®和xscale®处理器;以及类似的处理器。双微处理器、多核处理器和其他多处理器架构也可以被用作处理单元804。

系统总线808提供用于包括但不限于系统存储器806的系统组件到处理单元804的接口。系统总线808可以是可以使用各种商业上可用的总线架构中的任一种来进一步互连到存储器总线(具有或不具有存储器控制器)、外围总线和局部总线的若干类型的总线结构中的任一种。接口适配器可以经由插槽架构连接到系统总线808。示例插槽架构可以包括而不限于加速图形端口(agp)、卡总线、(扩展)工业标准架构((e)isa)、微通道架构(mca)、nubus、外围组件互连(扩展)(pci(x))、pciexpress、个人计算机存储卡国际协会(pcmcia)等。

系统存储器806可以包括形式为一个或多个更高速存储器单元的各种类型的计算机可读存储介质,诸如只读存储器(rom)、随机访问存储器(ram)、动态ram(dram)、双数据速率dram(ddram)、同步dram(sdram)、静态ram(sram)、可编程rom(prom)、可擦除可编程rom(eprom)、电可擦除可编程rom(eeprom)、闪速存储器(例如,一个或多个闪存阵列)、诸如铁电聚合物存储器之类的聚合物存储器、奥氏存储器、相变或铁电存储器、硅-氧化物-氮化物-氧化物-硅(sonos)存储器、磁或光学卡、诸如冗余独立磁盘阵列(raid)驱动器之类的器件的阵列、固态存储器器件(例如,usb存储器、固态驱动器(ssd))以及适合于存储信息的任何其他类型的存储介质。在图8中所示的所图示的实施例中,系统存储器806可包括非易失性存储器810和/或易失性存储器812。在一些实施例中,系统存储器806可以包括主存储器。基本输入/输出系统(bios)可被存储在非易失性存储器810中。

计算机802可以包括形式为一个或多个较低速存储器单元的各种类型的计算机可读存储介质,包括内部(或外部)硬盘驱动器(hdd)814、用于从可移动磁盘818读取或者向可移动磁盘818写入的磁软盘驱动器(fdd)816以及用于从可移动光盘822(例如,cd-rom或dvd)读取或者向可移动光盘822写入的光盘驱动器820。hdd814、fdd816和光盘驱动器820可分别通过hdd接口824、fdd接口826和光盘驱动器接口828连接到系统总线808。用于外部驱动器实施方式的hdd接口824可包括通用串行总线(usb)和电气与电子工程师协会(ieee)994接口技术中的至少一种或两种。在各种实施例中,可以不在主存储器或系统存储器中包括这些类型的存储器。

驱动器和关联的计算机可读介质提供数据、数据结构、计算机可执行指令等的易失性和/或非易失性存储。例如,许多程序模块可被存储在驱动器和存储器单元810、812中,所述程序模块包括操作系统830、一个或多个应用832、其他程序模块834和程序数据836。在一个实施例中,一个或多个应用832、其他程序模块834和程序数据836可包括例如iommu104的各种应用和/或组件,诸如请求管理器202和/或页面管理器204的一个或多个部分。

用户可通过一个或多个有线/无线输入设备(例如,键盘838和指点设备,诸如鼠标840)将命令和信息键入到计算机802中。其他输入设备可以包括麦克风、红外(ir)遥控器、射频(rf)遥控器、游戏板、触针笔、读卡器、加密狗、指纹读取器、手套、图形平板、操纵杆、键盘、视网膜读取器、触摸屏(例如,电容式、电阻式等)、轨迹球、触控板、传感器、触针等。这些及其他输入设备常常通过耦合到系统总线808的输入设备接口842连接到处理单元804,但是可通过诸如并行端口、ieee994串行端口、游戏端口、usb端口、ir接口等之类的其他接口来连接。

监视器844或其他类型的显示设备也经由接口(诸如视频适配器846)连接到系统总线808。监视器844可以在计算机802内部或外部。除了监视器844之外,计算机通常还包括其他外围输出设备,诸如扬声器、打印机等。

计算机802可以在联网环境中使用经由有线和/或无线通信到一个或多个远程计算机(诸如远程计算机848)的逻辑连接来操作。在各种实施例中,一次或多次迁移可以经由联网环境而发生。远程计算机848可以是工作站、服务器计算机、路由器、个人计算机、便携式计算机、基于微处理器的娱乐器具、对等设备或其他公共网络节点,并且通常包括相对于计算机802所描述的许多或所有元件,但是为了简洁,仅图示了存储器/存储设备850。所描绘的逻辑连接包括到局域网(lan)852和/或更大网络(例如,广域网(wan)854)的有线/无线连接。此类lan和wan联网环境在办公室和公司中是普遍的,并且方便企业范围计算机网络,诸如内联网,所有这些都可以连接到全球通信网络,例如因特网。

当用在lan联网环境中时,计算机802通过有线和/或无线通信网络接口或适配器856连接到lan852。适配器856可方便到lan852的有线和/或无线通信,所述lan852也可以包括设置在其上以用于与适配器856的无线功能性进行通信的无线接入点。

当用在wan联网环境中时,计算机802可包括调制解调器1358,或者连接到wan854上的通信服务器,或者具有用于通过wan854(诸如通过因特网)建立通信的其他部件。可以为内部或外部及有线和/或无线设备的调制解调器858经由输入设备接口842连接到系统总线808。在联网环境中,相对于计算机802所描述的程序模块或其部分可被存储在远程存储器/存储设备850中。应了解的是,所示出的网络连接是示例性的,并且可使用在计算机之间建立通信链路的其他部件。

计算机802可操作来使用ieee802标准族来与有线和无线设备或实体进行通信,所述设备诸如在操作上设置在无线通信(例如,ieee802.16空中调制技术)中的无线设备。这至少包括wi-fi(或无线保真)、wimax和bluetooth™(蓝牙tm)无线技术等。因此,通信可以是与常规网络一样的预定义结构或者简单地为至少两个设备之间的专设通信。wi-fi网络使用被称作ieee802.11x(a、b、g、n等)的无线电技术来提供安全、可靠、快速的无线连接。wi-fi网络可用于将计算机彼此连接,连接到因特网,以及连接到有线网络(其使用ieee802.3相关媒体和功能)。

图9图示了适合于实现如先前描述的各种实施例(诸如虚拟机迁移)的示例性通信架构900的框图。通信架构900包括各种公共通信元件,诸如发送器、接收器、收发器、无线电设备、网络接口、基带处理器、天线、放大器、滤波器、电源等。然而,实施例不限于通过通信架构900的实施方式。

如图9中所示,通信架构900包括一个或多个客户端902和服务器904。客户端902和服务器904在操作上连接到一个或多个相应的客户端数据存储器908和服务器数据存储器910,其可被采用来存储相应的客户端902和服务器904本地的信息,诸如cookies和/或关联的上下文信息。在各种实施例中,服务器904中的任何一个可以实现本文中描述的逻辑流程或操作中的一个或多个,并且与在任何服务器数据存储器910上存储从任何一个客户端902接收到的数据相结合地实现图7的存储介质700。在一个或多个实施例中,(一个或多个)客户端数据存储器908或(一个或多个)服务器数据存储器910中的一个或多个可以包括svm106。

客户端902和服务器904可以使用通信框架906来在彼此之间传送信息。通信框架906可以实现任何众所周知的通信技术和协议。可以将通信框架906实现为分组交换网络(例如,诸如因特网之类的公用网络、诸如企业内联网之类的专用网络等)、电路交换网络(例如,公用交换电话网络)或分组交换网络和电路交换网络的组合(具有适合的网关和转换器)。

通信框架906可以实现被布置成接受、传送并连接到通信网络的各种网络接口。网络接口可以被视为输入输出接口的专用形式。网络接口可以采用连接协议,包括而不限于直接连接、以太网(例如,粗、细、双绞线10/100/1900baset(快速以太网)等)、令牌环、无线网络接口、蜂窝网络接口、ieee802.11a-x网络接口、ieee802.16网络接口、ieee802.20网络接口等。进一步地,可以使用多个网络接口来与各种通信网络类型接合。例如,可以采用多个网络接口来允许通过广播、多播和单播网络进行通信。如果处理要求规定更大量的速度和容量,则可以类似地采用分布式网络控制器架构来汇集、负载平衡并以其他方式增加由客户端902和服务器904所要求的通信带宽。通信网络可以是有线和/或无线网络中的任何一个和组合,包括而不限于直接互连、安全定制连接、专用网络(例如,企业内联网)、公用网络(例如,因特网)、个人区域网(pan)、局域网(lan)、城域网(man)、作为因特网上节点的操作任务(omni)、广域网(wan)、无线网络、蜂窝网络和其他通信网络。

各种实施例可以使用硬件元件、软件元件或两者的组合来实现。硬件元件的示例可以包括处理器、微处理器、电路、电路元件(例如,晶体管、电阻器、电容器、电感器等)、集成电路、专用集成电路(asic)、可编程逻辑器件(pld)、数字信号处理器(dsp)、现场可编程门阵列(fpga)、逻辑门、寄存器、半导体器件、芯片、微芯片、芯片组等。软件的示例可以包括软件组件、程序、应用、计算机程序、应用程序、系统程序、机器程序、操作系统软件、中间件、固件、软件模块、例行程序、子例行程序、函数、方法、过程、软件接口、应用程序接口(api)、指令集、计算代码、计算机代码、代码段、计算机代码段、字、值、符号或其任何组合。确定实施例是否使用硬件元件和/或软件元件来实现可以依照任何数量的因素而变化,所述因素诸如期望计算速率、功率水平、热容差、处理周期预算、输入数据速率、输出数据速率、存储器资源、数据总线速度和其他设计或性能约束。

至少一个实施例的一个或多个方面可以通过存储在机器可读介质上的代表性指令来实现,所述代表性指令表示处理器内的各种逻辑,其在由机器读取时使该机器制造逻辑以执行本文中描述的技术。被称为“ip核”的此类表示可以被存储在有形机器可读介质上并且供应给各种客户或制造设施以加载到实际上制造逻辑或处理器的制造机器中。一些实施例可以例如使用机器可读介质或物品来实现,所述机器可读介质或物品可以存储指令或一组指令,该指令或一组指令如果由机器执行,则可以使该机器执行依照实施例的方法和/或操作。这种机器可以包括例如任何适合的处理平台、计算平台、计算设备、处理设备、计算系统、处理系统、计算机、处理器等,并且可以使用硬件和/或软件的任何适合的组合来实现。机器可读介质或物品可以包括例如任何适合类型的存储器单元、存储器器件、存储器物品、存储器介质、存储设备、存储物品、存储介质和/或存储单元,例如,存储器、可移动或不可移动介质、可擦除或不可擦除介质、可写或可重写介质、数字或模拟介质、硬盘、软盘、紧致盘只读存储器(cd-rom)、可记录紧致盘(cd-r)、可重写紧致盘(cd-rw)、光盘、磁介质、磁光介质、可移动存储卡或盘、各种类型的数字通用盘(dvd)、磁带、磁带盒等。指令可以包括使用任何适合的高级、低级、面向对象、可视、编译和/或解释编程语言实现的任何适合类型的代码,诸如源代码、编译代码、解释代码、可执行代码、静态代码、动态代码、加密代码等。

以下示例涉及另外的实施例,从其中许多排列和配置将是显而易见的。

示例1是一种用于控制流保护的装置,所述装置包括:存储器;用于输入/输出存储器管理单元(iommu)的逻辑,所述逻辑的至少一部分被实现在耦合到所述存储器的电路中,所述逻辑用于:从共享虚拟存储器(svm)器件接收存储器访问请求,所述存储器访问请求包括多个类型的存储器访问请求的类型;在高速缓存中标识与所述存储器访问请求相关联的转换条目,所述转换条目包括权限集;在所述权限集允许所述存储器访问请求的所述类型时执行所述存储器访问请求;以及在所述权限集限制所述存储器访问请求的所述类型时生成访问请求故障。

示例2包括示例1所述的主题,所述权限集中的每个权限用于允许或者限制所述多个类型的存储器访问请求的类型。

示例3包括示例1所述的主题,所述权限集包括读取权限、写入权限和执行权限中的一种或多种。

示例4包括示例1所述的主题,所述iommu包括所述高速缓存。

示例5包括示例1所述的主题,所述高速缓存包括转换后备缓冲器(tlb)。

示例6包括示例1所述的主题,所述转换条目包括一组位并且所述权限集中的每个权限包括该组位的子集。

示例7包括示例1所述的主题,包括一个或多个寄存器,所述一个或多个寄存器的内容用于激活所述逻辑。

示例8包括示例1所述的主题,所述svm器件包括硬件加速器、图形处理单元(gpu)、现场可编程门阵列(fpga),片上系统(soc)、语音处理单元(spu)、输入/输出(i/o)器件、数字信号处理器(dsp)或专用集成电路(asic)中的一个或多个。

示例9包括示例1所述的主题,所述存储器访问请求包括虚拟地址。

示例10包括示例9所述的主题,所述逻辑用于基于所述虚拟地址在所述高速缓存中标识与所述存储器访问请求相关联的所述转换条目。

示例11包括示例9所述的主题,所述逻辑用于基于所述转换条目确定对应于所述虚拟地址的线性地址。

示例12包括示例1所述的主题,所述逻辑用于在所述权限集限制所述存储器访问请求的所述类型时向异常处理程序发信号通知所述访问请求故障。

示例13包括示例12所述的主题,所述异常处理程序被包括在操作系统(os)中,所述异常处理程序用于终止所述存储器访问请求。

实施例14是一种用于控制流保护的装置,所述装置包括:存储器;用于输入/输出存储器管理单元(iommu)的逻辑,所述逻辑的至少一部分被实现在耦合到所述存储器的电路中,所述逻辑用于:从共享虚拟存储器(svm)器件接收存储器事务请求,所述存储器事务请求包括与由所述svm器件利用的svm中的存储器页面相关联的地址;确定所述存储器事务请求包括转换请求并且与写入请求相关联;标识与所述存储器事务请求相关联的所述存储器页面是否是可执行的;在与所述存储器事务请求相关联的所述存储器页面不是可执行的时生成具有读写访问的转换完成;以及在与所述存储器事务请求相关联的所述存储器页面是可执行的时生成具有只读访问的转换完成。

示例15包括示例14所述的主题,所述逻辑用于在与所述存储器事务请求相关联的所述存储器页面不是可执行的时向所述svm器件发送所述具有读写访问的转换完成。

示例16包括示例14所述的主题,所述逻辑用于在与所述存储器事务请求相关联的所述存储器页面是可执行的时向所述svm器件发送所述具有只读访问的转换完成。

示例17包括示例14所述的主题,所述iommu包括具有与所述iommu和所述svm器件之间的前一个存储器事务相关联的至少一个转换条目的iommu高速缓存。

示例18包括示例17所述的主题,所述逻辑用于基于所述iommu高速缓存来标识与所述存储器事务请求相关联的所述存储器页面是否是可执行的。

示例19包括示例14所述的主题,所述逻辑用于基于一个或多个页面表遍历来标识与所述存储器事务请求相关联的所述存储器页面是否是可执行的。

示例20包括示例14所述的主题,包括所述svm器件,所述svm器件包括具有与所述iommu和所述svm器件之间的前一个存储器事务相关联的至少一个转换条目的器件高速缓存。

示例21包括示例14所述的主题,所述存储器事务请求包括地址类型字段以指示与所述svm中的所述存储器页面相关联的所述地址被转换还是未转换。

示例22包括示例21所述的主题,所述存储器事务请求包括包含所述地址类型字段的报头。

示例23包括示例14所述的主题,包括一个或多个寄存器,所述一个或多个寄存器的内容用于激活所述逻辑。

示例24包括示例14所述的主题,包括中央处理单元(cpu),所述cpu和所述svm器件用于利用所述svm。

示例25包括示例14所述的主题,所述svm器件包括硬件加速器、图形处理单元(gpu)、现场可编程门阵列(fpga),片上系统(soc)、语音处理单元(spu)、输入/输出(i/o)器件、数字信号处理器(dsp)或专用集成电路(asic)中的一个或多个。

示例26是包括一组指令的至少一种非暂时性计算机可读介质,该组指令响应于被处理器电路执行,使所述处理器电路:在输入/输出存储器管理单元(iommu)处从共享虚拟存储器(svm)器件接收存储器访问请求,所述存储器访问请求包括多个类型的存储器访问请求的类型;在高速缓存中标识与所述存储器访问请求相关联的转换条目,所述转换条目包括权限集;在所述权限集允许所述存储器访问请求的所述类型时执行所述存储器访问请求;以及在所述权限集限制所述存储器访问请求的所述类型时生成访问请求故障。

示例27包括示例26所述的主题,所述权限集中的每个权限用于允许或者限制所述多个类型的存储器访问请求的类型。

示例28包括示例26所述的主题,所述权限集包括读取权限、写入权限和执行权限中的一种或多种。

示例29包括示例26所述的主题,所述iommu包括所述高速缓存。

示例30包括示例26所述的主题,所述高速缓存包括转换后备缓冲器(tlb)。

示例31包括示例26所述的主题,所述转换条目包括一组位并且所述权限集中的每个权限包括该组位的子集。

示例32包括示例26所述的主题,包括一个或多个寄存器,所述一个或多个寄存器的内容用于激活所述逻辑。

示例33包括示例26所述的主题,所述svm器件包括硬件加速器、图形处理单元(gpu)、现场可编程门阵列(fpga),片上系统(soc)、语音处理单元(spu)、输入/输出(i/o)器件、数字信号处理器(dsp)或专用集成电路(asic)中的一个或多个。

示例34包括示例26所述的主题,所述存储器访问请求包括虚拟地址。

示例35包括示例34所述的主题,包括响应于被所述处理器电路执行而使所述处理器电路基于所述虚拟地址在所述高速缓存中标识与所述存储器访问请求相关联的所述转换条目的指令。

示例36包括示例34所述的主题,包括响应于被所述处理器电路执行而使所述处理器电路基于所述转换条目确定对应于所述虚拟地址的线性地址的指令。

示例37包括示例26所述的主题,包括响应于被所述处理器电路执行而使所述处理器电路在所述权限集限制所述存储器访问请求的所述类型时向异常处理程序发信号通知所述访问请求故障的指令。

示例38包括示例37所述的主题,所述异常处理程序被包括在操作系统(os)中,所述异常处理程序用于终止所述存储器访问请求。

示例39是包括一组指令的至少一种非暂时性计算机可读介质,该组指令响应于被处理器电路执行,使所述处理器电路:在输入/输出存储器管理单元(iommu)处从共享虚拟存储器(svm)器件接收存储器事务请求,所述存储器事务请求包括与由所述svm器件利用的svm中的存储器页面相关联的地址;确定所述存储器事务请求包括转换请求并且与写入请求相关联;标识与所述存储器事务请求相关联的所述存储器页面是否是可执行的;在与所述存储器事务请求相关联的所述存储器页面不是可执行的时生成具有读写访问的转换完成;以及在与所述存储器事务请求相关联的所述存储器页面是可执行的时生成具有只读访问的转换完成。

示例40包括示例39所述的主题,包括响应于被所述处理器电路执行而使所述处理器电路在与所述存储器事务请求相关联的所述存储器页面不是可执行的时向所述svm器件发送所述具有读写访问的转换完成的指令。

示例41包括示例39所述的主题,包括响应于被所述处理器电路执行而使所述处理器电路在与所述存储器事务请求相关联的所述存储器页面是可执行的时向所述svm器件发送所述具有只读访问的转换完成的指令。

示例42包括示例39所述的主题,所述iommu包括具有与所述iommu和所述svm器件之间的前一个存储器事务相关联的至少一个转换条目的iommu高速缓存。

示例43包括示例42所述的主题,包括指令,所述指令响应于被所述处理器电路执行而使所述处理器电路基于所述iommu高速缓存来标识与所述存储器事务请求相关联的所述存储器页面是否是可执行的。

示例44包括示例39所述的主题,包括指令,所述指令响应于被所述处理器电路执行而使所述处理器电路基于一个或多个页面表遍历来标识与所述存储器事务请求相关联的所述存储器页面是否是可执行的。

示例45包括示例39所述的主题,包括所述svm器件,所述svm器件包括具有与所述iommu和所述svm器件之间的前一个存储器事务相关联的至少一个转换条目的器件高速缓存。

示例46包括示例39所述的主题,所述存储器事务请求包括地址类型字段以指示与所述svm中的所述存储器页面相关联的所述地址被转换还是未转换。

示例47包括示例46所述的主题,所述存储器事务请求包括包含所述地址类型字段的报头。

示例48包括示例39所述的主题,包括一个或多个寄存器,所述一个或多个寄存器的内容用于激活所述逻辑。

示例49包括示例39所述的主题,包括中央处理单元(cpu),所述cpu和所述svm器件用于利用所述svm。

示例50包括示例39所述的主题,所述svm器件包括硬件加速器、图形处理单元(gpu)、现场可编程门阵列(fpga),片上系统(soc)、语音处理单元(spu)、输入/输出(i/o)器件、数字信号处理器(dsp)或专用集成电路(asic)中的一个或多个。

示例51是一种计算机实现的方法,包括:在输入/输出存储器管理单元(iommu)处从共享虚拟存储器(svm)器件接收存储器访问请求,所述存储器访问请求包括多个类型的存储器访问请求的类型;在高速缓存中标识与所述存储器访问请求相关联的转换条目,所述转换条目包括权限集;在所述权限集允许所述存储器访问请求的所述类型时执行所述存储器访问请求;以及在所述权限集限制所述存储器访问请求的所述类型时生成访问请求故障。

示例52包括示例51所述的主题,所述权限集中的每个权限用于允许或者限制所述多个类型的存储器访问请求的类型。

示例53包括示例51所述的主题,所述权限集包括读取权限、写入权限和执行权限中的一种或多种。

示例54包括示例51所述的主题,所述iommu包括所述高速缓存。

示例55包括示例51所述的主题,所述高速缓存包括转换后备缓冲器(tlb)。

示例56包括示例51所述的主题,所述转换条目包括一组位并且所述权限集中的每个权限包括该组位的子集。

示例57包括示例51所述的主题,包括一个或多个寄存器,所述一个或多个寄存器的内容用于激活所述逻辑。

示例58包括示例51所述的主题,所述svm器件包括硬件加速器、图形处理单元(gpu)、现场可编程门阵列(fpga),片上系统(soc)、语音处理单元(spu)、输入/输出(i/o)器件、数字信号处理器(dsp)或专用集成电路(asic)中的一个或多个。

示例59包括示例51所述的主题,所述存储器访问请求包括虚拟地址。

示例60包括示例59所述的主题,包括基于所述虚拟地址在所述高速缓存中标识与所述存储器访问请求相关联的所述转换条目。

示例61包括示例59所述的主题,包括基于所述转换条目确定对应于所述虚拟地址的线性地址。

示例62包括示例51所述的主题,包括在所述权限集限制所述存储器访问请求的所述类型时向异常处理程序发信号通知所述访问请求故障。

示例63包括示例62所述的主题,所述异常处理程序被包括在操作系统(os)中,所述异常处理程序用于终止所述存储器访问请求。

示例64是一种计算机实现的方法,包括:在输入/输出存储器管理单元(iommu)处从共享虚拟存储器(svm)器件接收存储器事务请求,所述存储器事务请求包括与由所述svm器件利用的svm中的存储器页面相关联的地址;确定所述存储器事务请求包括转换请求并且与写入请求相关联;标识与所述存储器事务请求相关联的所述存储器页面是否是可执行的;在与所述存储器事务请求相关联的所述存储器页面不是可执行的时生成具有读写访问的转换完成;以及在与所述存储器事务请求相关联的所述存储器页面是可执行的时生成具有只读访问的转换完成。

示例65包括示例64所述的主题,包括在与所述存储器事务请求相关联的所述存储器页面不是可执行的时向所述svm器件发送所述具有读写访问的转换完成。

示例66包括示例64所述的主题,包括在与所述存储器事务请求相关联的所述存储器页面是可执行的时向所述svm器件发送所述具有只读访问的转换完成。

示例67包括示例64所述的主题,所述iommu包括具有与所述iommu和所述svm器件之间的前一个存储器事务相关联的至少一个转换条目的iommu高速缓存。

示例68包括示例67所述的主题,包括基于所述iommu高速缓存来标识与所述存储器事务请求相关联的所述存储器页面是否是可执行的。

示例69包括示例64所述的主题,包括基于一个或多个页面表遍历来标识与所述存储器事务请求相关联的所述存储器页面是否是可执行的。

示例70包括示例64所述的主题,包括所述svm器件,所述svm器件包括具有与所述iommu和所述svm器件之间的前一个存储器事务相关联的至少一个转换条目的器件高速缓存。

示例71包括示例64所述的主题,所述存储器事务请求包括地址类型字段以指示与所述svm中的所述存储器页面相关联的所述地址被转换还是未转换。

示例72包括示例71所述的主题,所述存储器事务请求包括包含所述地址类型字段的报头。

示例73包括示例64所述的主题,包括一个或多个寄存器,所述一个或多个寄存器的内容用于激活所述逻辑。

示例74包括示例64所述的主题,包括中央处理单元(cpu),所述cpu和所述svm器件用于利用所述svm。

示例75包括示例64所述的主题,所述svm器件包括硬件加速器、图形处理单元(gpu)、现场可编程门阵列(fpga),片上系统(soc)、语音处理单元(spu)、输入/输出(i/o)器件、数字信号处理器(dsp)或专用集成电路(asic)中的一个或多个。

示例76是一种用于控制流保护的装置,所述装置包括:用于在输入/输出存储器管理单元(iommu)处从共享虚拟存储器(svm)器件接收存储器访问请求的部件,所述存储器访问请求包括多个类型的存储器访问请求的类型;用于在高速缓存中标识与所述存储器访问请求相关联的转换条目的部件,所述转换条目包括权限集;用于在所述权限集允许所述存储器访问请求的所述类型时执行所述存储器访问请求的部件;以及用于在所述权限集限制所述存储器访问请求的所述类型时生成访问请求故障的部件。

示例77包括示例76所述的主题,所述权限集中的每个权限用于允许或者限制所述多个类型的存储器访问请求的类型。

示例78包括示例76所述的主题,所述权限集包括读取权限、写入权限和执行权限中的一种或多种。

示例79包括示例76所述的主题,所述iommu包括所述高速缓存。

示例80包括示例76所述的主题,所述高速缓存包括转换后备缓冲器(tlb)。

示例81包括示例76所述的主题,所述转换条目包括一组位并且所述权限集中的每个权限包括该组位的子集。

示例82包括示例76所述的主题,包括一个或多个寄存器,所述一个或多个寄存器的内容用于激活所述逻辑。

示例83包括示例76所述的主题,所述svm器件包括硬件加速器、图形处理单元(gpu)、现场可编程门阵列(fpga),片上系统(soc)、语音处理单元(spu)、输入/输出(i/o)器件、数字信号处理器(dsp)或专用集成电路(asic)中的一个或多个。

示例84包括示例76所述的主题,所述存储器访问请求包括虚拟地址。

示例85包括示例84所述的主题,包括用于基于所述虚拟地址在所述高速缓存中标识与所述存储器访问请求相关联的所述转换条目的部件。

示例86包括示例84所述的主题,包括用于基于所述转换条目确定对应于所述虚拟地址的线性地址的部件。

示例87包括示例76所述的主题,包括用于在所述权限集限制所述存储器访问请求的所述类型时向异常处理程序发信号通知所述访问请求故障的部件。

示例88包括示例87所述的主题,所述异常处理程序被包括在操作系统(os)中,所述异常处理程序用于终止所述存储器访问请求。

示例89是一种用于控制流保护的装置,所述装置包括:用于在输入/输出存储器管理单元(iommu)处从共享虚拟存储器(svm)器件接收存储器事务请求的部件,所述存储器事务请求包括与由所述svm器件利用的svm中的存储器页面相关联的地址;用于确定所述存储器事务请求包括转换请求并且与写入请求相关联的部件;用于标识与所述存储器事务请求相关联的所述存储器页面是否是可执行的部件;用于在与所述存储器事务请求相关联的所述存储器页面不是可执行的时生成具有读写访问的转换完成的部件;以及用于在与所述存储器事务请求相关联的所述存储器页面是可执行的时生成具有只读访问的转换完成的部件。

示例90包括示例89所述的主题,包括用于在与所述存储器事务请求相关联的所述存储器页面不是可执行的时向所述svm器件发送所述具有读写访问的转换完成的部件。

示例91包括示例89所述的主题,包括用于在与所述存储器事务请求相关联的所述存储器页面是可执行的时向所述svm器件发送所述具有只读访问的转换完成的部件。

示例92包括示例89所述的主题,所述iommu包括具有与所述iommu和所述svm器件之间的前一个存储器事务相关联的至少一个转换条目的iommu高速缓存。

示例93包括示例92所述的主题,包括用于基于所述iommu高速缓存来标识与所述存储器事务请求相关联的所述存储器页面是否是可执行的部件。

示例94包括示例89所述的主题,包括用于基于一个或多个页面表遍历来标识与所述存储器事务请求相关联的所述存储器页面是否是可执行的部件。

示例95包括示例89所述的主题,包括所述svm器件,所述svm器件包括具有与所述iommu和所述svm器件之间的前一个存储器事务相关联的至少一个转换条目的器件高速缓存。

示例96包括示例89所述的主题,所述存储器事务请求包括地址类型字段以指示与所述svm中的所述存储器页面相关联的所述地址被转换还是未转换。

示例97包括示例96所述的主题,所述存储器事务请求包括包含所述地址类型字段的报头。

示例98包括示例89所述的主题,包括一个或多个寄存器,所述一个或多个寄存器的内容用于激活所述逻辑。

示例99包括示例89所述的主题,包括中央处理单元(cpu),所述cpu和所述svm器件用于利用所述svm。

示例100包括示例89所述的主题,所述svm器件包括硬件加速器、图形处理单元(gpu)、现场可编程门阵列(fpga),片上系统(soc)、语音处理单元(spu)、输入/输出(i/o)器件、数字信号处理器(dsp)或专用集成电路(asic)中的一个或多个。

已经出于图示和描述的目的呈现了示例实施例的前面的描述。它不旨在为详尽的或者将本公开限于所公开的精确形式。许多修改和变化鉴于本公开是可能的。意图是本公开的范围不受此详细描述限制,而是相反受所附权利要求限制。要求本申请的优先权的将来提交的申请可以以不同的方式要求保护所公开的主题,并且可以一般地包括如在本文中不同地公开或者以其他方式演示的任一组一个或多个限制因素。

各种实施例一般地涉及用于共享虚拟存储器(svm)访问保护的技术,例如,诸如通过每当写入请求从svm器件到达时就执行安全检查。一些实施例特别涉及一种通过响应于存储器事务请求而生成访问请求故障和/或具有只读访问的转换完成来防止svm器件因所述存储器事务请求而修改代码页面的输入/输出存储器管理单元(iommu)。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1