具体实施方式
下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。
根据上述背景技术中对PCIe的介绍可知,现有PCIe协议中对于地址转换服务ATS仅定义了其用于获取并存储设备通过直接寄存器访问DMA得到的地址翻译结果,即虚拟地址以及对应的物理地址所构成的地址对。而没有对ATS中用于存储地址翻译结果的地址转换缓存模块ATC的管理机制进行定义,使得在ATC的缓存资源有限的情况下,无法确保在ATC中保存重要的地址翻译结果,导致设备的访问延迟增大,降低了整个系统的数据吞吐量。
为此,本发明实施例是在该问题的基础上提出的针对ATC的一种管理机制。在本发明中,定义ATC中所保存的一对地址翻译结果为一条地址翻译条目,而地址翻译条目的数量则取决于PCIe设备对ATC的设计容量。一般地,该ATC的容量远小于物理内存的容量,因此,本发明实施例所提出的管理机制主要是针对ATC中地址翻译条目的更新淘汰管理机制,其核心思想是对地址翻译条目中的数据内容格式进行重新设计,增加一个标记位,用于对本条地址翻译结果的重要性进行标记,如此,在需要更新与淘汰时,可以根据标记位中的标签信息有选择地淘汰已存储的地址翻译条目,确保重要的地址翻译条目不被新增的地址翻译条目挤出ATC。而基于该管理机制,系统中的应用软件也可以实现在ATC中设置重要的地址翻译条目,以提高PCIe设备针对具体应用或系统用户的高速响应。
基于上述对本发明实施例核心思想的介绍与说明,以下将通过实施例的具体步骤详细说明本发明实施例提供的一种转换地址的缓存处理方法的具体实现,本方法的具体步骤如图1所示,包括:
步骤101、在地址转换缓存模块的地址翻译条目中设置标记位。
其中,地址转换缓存模块为基于地址转换服务ATS而设置在PCIe设备侧的硬件缓存模块,即上述的ATC,用于存储PCIe设备通过向IOMMU发送地址翻译请求得到的地址翻译结果。该翻译结果包括虚拟地址以及对应的物理地址。本步骤中,地址转换缓存模块中可以缓存的地址翻译条目的数量是基于对不同厂商对ATC的设计而确定的,每条地址翻译条目可以用于存储一对具有映射关系的虚拟地址与物理地址。
在本实施例中,对地址翻译条目的格式进行调整,主要是在该地址翻译条目中增设了一个标记位,该标记位用于存储标识本条地址翻译条目重要程度的标签信息。在本实施例中,该标签信息至少包括第一标签与第二标签,其中,第一标签表示重要,第二标签表示不重要。当然,也可以采用分级的方式设置更多等级的标签信息,其作用以及后续的处理思想与采用二分类的标签信息是相同的,因此,本实施例仅以第一标签和第二标签作为标签信息为例进行示例性说明。具体的,所增加的标记位不限定是新增加一个比特(bit)位,或者是利用物理地址中的一个bit位来作为该标记位;而当标签信息用于标记多个不同等级时,也可以是新增加与多个等级数量相对应的多个bit位,或者是利用物理地址中的多个bit位来标记。
可见,本步骤是本发明实现的前提条件,即只有在具有标记位的地址翻译条目的基础上,才能够执行后续的管理机制。
步骤102、根据写入第一寄存器的虚拟地址,将该虚拟地址以及对应的物理地址存入一个地址翻译条目中,并在对应的标记位中标记第一标签。
本步骤中的第一寄存器是针对ATC而特别设置的一个寄存器,用于接收系统侧需要写入ATC的重要虚拟地址。即应用PCIe设备的应用程序或系统用户可以通过向该第一寄存器写入虚拟地址,由第一寄存器触发PCIe设备获取该虚拟地址对应的物理地址,并将该虚拟地址与物理地址成对地存入ATC中的一条地址翻译条目中,同时,将该地址翻译条目中的标记位标记为第一标签。当然,在标记位有多个等级时,写入第一寄存器的除了虚拟地址外,还需要有对应的标签信息。
可见,本步骤中的第一寄存器是用于向ATC写入标签信息的专用寄存器。也就是说,ATC中地址翻译条目的等级要通过第一寄存器进行设置。
步骤103、根据直接存储器访问的虚拟地址,在地址转换缓存模块中匹配对应的地址翻译条目。
其中,直接存储器访问(Direct Memory Access,DMA)即为PCIe设备不经过中央处理器CPU而直接访问内存的数据传输方式。在虚拟化情况下,PCIe设备通过DMA访问内存时,是访问的虚拟地址,此时,若不具有ATC,则需要利用地址转换请求从IOMMU查询该虚拟地址对应的地址翻译结果,从而得到内存的物理地址进行访问;而在具有ATC时,则可以通过该ATC中的地址翻译条目获取对应的物理地址,而无需通过地址转换请求进行查询,从而提高地址访问的响应速率。
本步骤中,通过DMA访问的虚拟地址,需要先在ATC中进行匹配,若匹配成功,则可直接从所匹配的地址翻译条目中获取对应的物理地址;而若未匹配成功,即当前ATC中未保存有对应的地址翻译条目,则需要通过地址转换请求查询该虚拟地址所对应的物理地址,并同时执行步骤104。
步骤104、在未匹配成功时,将利用地址转换服务获取的虚拟地址以及对应的物理地址存入地址翻译条目中,并在对应的标记位中标记第二标签。
本步骤是为了让PCIe设备以后再次对相同的虚拟地址进行DMA访问时,能够快速得到对应物理地址,而执行的对ATC中的地址翻译条目进行更新的操作。
具体的,PCIe设备利用地址转换服务ATS获取虚拟地址以及对应的物理地址,即通过地址转换请求从IOMMU查询该虚拟地址对应的地址翻译结果,应用其中的物理地址响应DMA访问,同时,将该地址翻译结果(虚拟地址以及对应的物理地址)存入ATC的一个地址翻译条目中,并在该地址翻译条目的标记位中标记第二标签。需要说明的是,由于ATC中地址翻译条目数量有限,将地址翻译结果存入ATC的条件是有空闲的地址翻译条目,或者是有标记位中标记有第二标签的地址翻译条目,而当ATC中所有的地址翻译条目的标记位中均标记有第一标签时,则本次的地址翻译结果将不能存入ATC中。
通过上述实施例的说明,本发明实施例所提供的一种转换地址的缓存处理方法,是针对ATC中有限数量的地址翻译条目进行管理的方案。该方案的前提是对地址翻译条目的格式进行调整,增加标记位,通过在该标记位上标识不同的标签信息来定义地址翻译条目的重要程度,进而实现利用第一寄存器向ATC中写入具有第一标签的地址翻译条目,即重要的地址翻译条目。而通过DMA的方式只能向ATC中写入具有第二标签的地址翻译条目,即不重要的地址翻译条目。如此,当ATC中的地址翻译条目均被占用后,若再向ATC中写入地址翻译条目时就可以根据标记位中的标签信息有选择地替换其中不重要的地址翻译条目,确保重要的地址翻译条目能够保留在ATC中,提高PCIe设备在地址访问时在ATC中命中率,从而提高设备对缓存资源的利用效率以及对IO操作的响应速率。
进一步的,针对图1所示的转换地址的缓存处理方法,在以下实施例中,将具体说明在地址翻译条目对应的标记位中标记具体标签信息的方式,上述缓存处理方法的具体流程如图2所示,包括:
步骤201、在地址转换缓存模块的地址翻译条目中设置标记位。
该步骤的具体内容与图1所示的步骤101内容相同。本实施例中,示例性地设置标记位中所标记的第一标签为1,第二标签为0。
步骤202、配置第一寄存器与第二寄存器。
本步骤是在PCIe设备中为ATC所配置的两个寄存器,其中,第一寄存器可以为只写寄存器SSAR(set static atc register),用于系统的应用程序或用户主动设置具有第一标签的地址翻译条目。第二寄存器可以为可读可写寄存器GSAR(get static atcregister),用于查询目标虚拟地址所对应的地址翻译条目的标签信息,也可以检测通过第一寄存器所配置的虚拟地址是否配置为具有第一标签的地址翻译条目。该PCIe设备的结构框架具体如图3所示,其中,地址写入设备为用户设置地址翻译条目的客户端设备,其不限定是终端设备的处理器、操作系统以及驱动程序等,也可以对应于用户登录的应用程序等,用户通过该地址写入设备向SSAR写入具有第一标签的地址翻译条目,向GSAR查询目标虚拟地址所对应的地址翻译条目的标签信息,或者是检测通过第一寄存器所配置的虚拟地址是否配置为具有第一标签的地址翻译条目。SSAR将地址翻译条目以及对应的第一标签写入ATC,而GSAR则是根据目标虚拟地址在ATC中查找对应的地址翻译条目的标签信息。
步骤203、根据写入第一寄存器的虚拟地址,将该虚拟地址以及对应的物理地址存入一个地址翻译条目中,并在对应的标记位中标记第一标签。
本步骤可以具体理解为应用第一寄存器配置ATC的具体操作。即设置哪些重要的虚拟地址需要被存入ATC中。
由于ATC中地址翻译条目的数量有限,因而,在向ATC中存入虚拟地址的翻译结果可能存在因无空闲地址翻译条目而需要淘汰或更新的情况,因此,在执行本步骤时,写入地址翻译条目的具体逻辑步骤如图4所示,包括:
2031、判断地址转换缓存模块中是否存在含有虚拟地址的地址翻译条目。
该步骤是PCIe设备根据写入第一寄存器的虚拟地址,先在地址转换缓存模块ATC中进行查询,判断ATC中已有的地址翻译条目是否记载有该虚拟地址,若存在对应的地址翻译条目则执行步骤2032,反之,若不存在对应的地址翻译条目,则执行步骤2033。
2032、在地址翻译条目的标记位中标记第一标签。
若虚拟地址在ATC中已存在对应的地址翻译条目,则无需再利用地址转换服务获取其对应的物理地址,此时,只需要将该地址翻译条目的标记位中标记第一标签即可,即将该地址翻译条目标记为重要条目。
2033、利用地址转换服务获取虚拟地址对应的物理地址。
若虚拟地址在ATC中不存在对应的地址翻译条目,则PCIe设备需要再利用地址转换服务获取其对应的物理地址。具体为,根据虚拟地址触发地址转换请求,通过IOMMU获取地址翻译结果,即该虚拟地址所对应的物理地址。
该步骤的执行结果存在两种情况,当获取到物理地址时,继续执行后续步骤,反之,当未获取到物理地址时,则终止对该虚拟地址的写入,并反馈相关信息或报错信息。
需要说明的是,在本步骤执行的过程中,需要锁住ATC的进一步操作,即在执行地址转换请求的过程中,不再向ATC执行其他操作,以防止在该过程写入新的地址翻译条目。而对ATC的锁定需要等到确定当前的虚拟地址以及对应的物理地址写入ATC时再解除,或者是当前的虚拟地址不存在对应的物理地址时解除锁定。
2034、判断地址转换缓存模块中是否存在空闲的地址翻译条目。
本步骤与步骤2033可以同步执行,两者之间的执行不存在逻辑上的先后顺序。
本步骤是虚拟地址在ATC中不存在对应的地址翻译条目时,进一步查找ATC中空闲的地址翻译条目,即判断ATC中是否还有足够的存储容量写入一条新的地址翻译条目,若存在,则执行步骤2035,反之,当无法存入新的地址翻译条目时,则执行步骤2036。
2035、将虚拟地址、物理地址以及第一标签存储至一个空闲的地址翻译条目中。
2036、根据地址翻译条目的标记位,将虚拟地址、物理地址以及第一标签替换存储至具有第二标签的地址翻译条目中。
该步骤是在ATC缓存空间不足时,启动的对已存的地址翻译条目更新淘汰操作。该操作需要根据地址翻译条目中的标记位来选择可替换的地址翻译条目,具体操作包括:检测ATC中是否存在标记位为第二标签的地址翻译条目,若存在,则可以将该虚拟地址、物理地址以及第一标签替换存储至一个具有第二标签的地址翻译条目中。若不存在,说明当前ATC中所存的地址翻译条目均是重要的,即都具有第一标签,此时,可以将ATC所存储的任一一条地址翻译条目淘汰,以替换当前需要存入的虚拟地址、物理地址以及第一标签,也可以根据地址翻译条目存入ATC的先后顺序,将该虚拟地址、物理地址以及第一标签替换存储至最先存入地址转换缓存模块的地址翻译条目中。
以上图3所示的个步骤为通过第一寄存器向ATC写入重要的地址翻译条目的操作逻辑流程。由此可以看出,本发明实施例中ATC所存储的地址翻译条目的第一标签信息是需要主动设置的,并且需要通过第一寄存器进行设置。
步骤204、利用第二寄存器查询目标虚拟地址的标记位。
该步骤与步骤203不存在逻辑上的先后关系。第二寄存器的作用主要用于查询ATC,判断ATC中是否存在与所要查询的目标虚拟地址相对应的地址翻译条目,若存在,返回该地址翻译条目的标记位的标签信息,即查询目标虚拟地址对应的地址翻译条目是否被设置为重要条目。
当然,该步骤也可以理解为是对步骤203所配置的重要地址翻译条目的校验操作。当写入第二寄存器一个目标虚拟地址后,PCIe设备将触发以下操作:根据写入第二寄存器的虚拟地址,判断ATC中是否存在含有该虚拟地址的地址翻译条目;若存在,则将该地址翻译条目的标记位对应的标签信息赋值给第二寄存器;若不存在,则将第二标签赋值给第二寄存器。
可见,只有在目标虚拟地址对应的地址翻译条目为重要条目(标记位中记录的是第一标签)时,第二寄存器才会返回第一标签(1),否则,都将该第二寄存器返回第二标签(0)。
需要说明的是,当第二寄存器中的值被读取时,还需要将该第二寄存器中的值清空。
步骤205、根据直接存储器访问的虚拟地址,在地址转换缓存模块中匹配对应的地址翻译条目。
本步骤以及后续步骤是PCIe设备在应用过程中发起DMA访问时对ATC所执行的相关操作。
当匹配成功时,直接从ATC中读取虚拟地址对应的物理地址,反之,当匹配不成功时,执行步骤206。
步骤206、将利用地址转换服务获取的虚拟地址以及对应的物理地址存入地址翻译条目中,并在对应的标记位中标记第二标签。
本步骤在具体执行是也可以分为如下步骤:
首先,利用地址转换服务获取虚拟地址以及对应的物理地址。即发起地址转换请求,通过IOMMU获取地址翻译结果,若能够获取地址翻译结果则继续执行后续步骤,反之未得到地址翻译结果则停止并反馈报错信息。
之后,判断ATC中是否存在空闲的地址翻译条目。
若存在,则将得到的虚拟地址以及对应的物理地址存入空闲的一个地址翻译条目中,并在对应的标记位中标记第二标签。
若不存在,则根据地址翻译条目对应的标记位的标签信息确定是否将该虚拟地址以及对应的物理地址存入ATC中。
具体的,当ATC中不存在空闲的地址翻译条目时,是否存入ATC还需要进一步判断ATC中是否存在具有第二标签的地址翻译条目,若存在,则将该虚拟地址以及对应的物理地址替换存入其中一个地址翻译条目中,并在对应的标记位中标记第二标签;若不存在,则禁止将所述虚拟地址以及对应的物理地址存入地址转换缓存模块中。
可见,在DMA访问过程中,若ATC的缓存空间允许则直接写入对应的地址翻译结果并标记第二标签,而当ATC的缓存空间不足时,就需要查询已存地址翻译条目的标记位,选择具有第二标签的地址翻译条目来存储新的地址翻译结果。
步骤207、清除地址转换缓存模块中的地址翻译条目。
本步骤是将ATC中的地址翻译条目进行无效处理的操作。本实施例中,该步骤的执行主要是基于系统侧发出的指令实现的,具体可以通过第一寄存器来清除,也可以通过基于地址交换服务ATS中的无效请求实现。
其中,通过第一寄存器执行清除操作的方式具体可以为:系统应用或用户向第一寄存器写入具有第二标签的虚拟地址,PCIe设备根据该虚拟地址确定ATC中具有对应的地址翻译条目时,将该地址翻译条目的标记位中标记第二标签,如此,再由新的地址翻译结果需要写入ATC时,就可以将该地址翻译条目清除,以替换新的地址翻译结果。此外,除了调整标记位的方式外,还可以是在写入第一寄存器的虚拟地址中具有第二标签时,直接清除ATC中含有该虚拟地址的地址翻译条目。
而通过基于地址交换服务中的无效请求执行清除操作的方式与现有的无效ATC中地址翻译条目的方式相同,即该无效请求并不考虑地址翻译条目中的标记位。其具体实现为:检测是否接收到地址翻译条目的无效请求,该无效请求是基于地址转换服务ATS发起的含有虚拟地址的请求;若接收到,则根据该虚拟地址清除对应地址翻译条目中的虚拟地址、物理地址以及标签信息。
进一步的,作为对上述图1、2所示转换地址的缓存处理方法的实现,本发明实施例提供了一种转换地址的缓存处理装置,该装置的主要目的在于对ATC中所存储的地址翻译条目进行管理,对不同重要性的地址翻译条目进行有选择地更新与淘汰。为便于阅读,本装置实施例不再对前述方法实施例中的细节内容进行逐一赘述,但应当明确,本实施例中的装置能够对应实现前述方法实施例中的全部内容。该装置如图5所示,具体包括:
设置单元31,用于在地址转换缓存模块的地址翻译条目中设置标记位,所述地址翻译条目用于存储具有映射关系的虚拟地址与物理地址,所述标记位用于存储标识地址翻译条目重要程度的标签信息;
配置单元32,用于根据写入第一寄存器的虚拟地址,将所述虚拟地址以及对应的物理地址存入一个地址翻译条目中,并在对应的标记位中标记第一标签;
匹配单元33,用于根据直接存储器访问的虚拟地址,在地址转换缓存模块中匹配对应的地址翻译条目;
处理单元34,用于在所述匹配单元33未匹配成功时,将利用地址转换服务获取的虚拟地址以及对应的物理地址存入地址翻译条目中,并在对应的标记位中标记第二标签。
进一步的,如图6所示,所述配置单元32包括:
第一判断模块321,用于根据写入第一寄存器的虚拟地址,判断所述地址转换缓存模块中是否存在含有所述虚拟地址的地址翻译条目;
标记模块322,用于若所述判断模块321确定存在,则在所述地址翻译条目的标记位中标记第一标签;
获取模块323,用于若所述判断模块321确定不存在,则利用地址转换服务获取所述虚拟地址对应的物理地址;
存储模块324,用于将所述获取模块323得到的所述虚拟地址、物理地址以及第一标签存储至一个地址翻译条目中。
进一步的,如图6所示,所述配置单元32还包括:
第二判断模块325,用于在存储模块324将所述虚拟地址、物理地址以及第一标签存储至一个地址翻译条目中之前,判断所述地址转换缓存模块中是否存在空闲的地址翻译条目;
所述存储模块324还用于,若所述第二判断模块325确定存在,则将所述虚拟地址、物理地址以及第一标签存储至一个空闲的地址翻译条目中;
更新模块326,用于若所述第二判断模块325确定不存在,则根据地址翻译条目的标记位,将所述虚拟地址、物理地址以及第一标签替换存储至具有第二标签的地址翻译条目中。
进一步的,所述更新模块326具体用于:
检测所述地址转换缓存模块中是否存在标记位为第二标签的地址翻译条目;
若存在,则将所述虚拟地址、物理地址以及第一标签替换存储至所述地址翻译条目中;
若不存在,则根据存入地址转换缓存模块的先后顺序,将所述虚拟地址、物理地址以及第一标签替换存储至最先存入地址转换缓存模块的地址翻译条目中。
进一步的,如图6所示,所述装置还包括:
查询单元35,用于利用第二寄存器查询目标虚拟地址的标记位,所述第二寄存器与第一寄存器为预先设置在具有地址转换缓存模块的设备中,用于配置地址翻译条目中的标记位。
进一步的,如图6所示,所述查询单元35包括:
判断模块351,用于根据写入所述第二寄存器的虚拟地址,判断所述地址转换缓存模块中是否存在含有所述虚拟地址的地址翻译条目;
赋值模块352,用于若所述判断模块351确定存在,则将所述地址翻译条目的标记位对应标签信息赋值给所述第二寄存器;若不存在,则将所述第二标签赋值给所述第二寄存器。
进一步的,如图6所示,所述处理单元34包括:
获取模块341,用于利用地址转换服务获取虚拟地址以及对应的物理地址;
判断模块342,用于判断所述地址转换缓存模块中是否存在空闲的地址翻译条目;
存储模块343,用于若所述判断模块342确定存在,则将所述获取模块341得到的虚拟地址以及对应的物理地址存入所述地址翻译条目中,并在对应的标记位中标记第二标签;
确定模块344,若所述判断模块342确定不存在,则根据所述地址翻译条目对应的标记位的标签信息确定将所述获取模块341得到的虚拟地址以及对应的物理地址存入地址转换缓存模块中。
进一步的,所述确定模块344具体用于:
判断所述地址转换缓存模块中是否存在具有第二标签的地址翻译条目;
若存在,则将所述虚拟地址以及对应的物理地址存入所述地址翻译条目,并在对应的标记位中标记第二标签;
若不存在,则禁止将所述虚拟地址以及对应的物理地址存入地址转换缓存模块中。
进一步的,所述配置单元32还用于:
在写入第一寄存器的虚拟地址中还具有第二标签时,将所述第二标签标记在地址转换缓存模块中含有所述虚拟地址的地址翻译条目中;
或者,在写入第一寄存器的虚拟地址中还具有第二标签时,清除地址转换缓存模块中含有所述虚拟地址的地址翻译条目。
进一步的,如图6所示,所述装置还包括:
检测单元36,用于检测是否接收到地址翻译条目的无效请求,所述无效请求是基于地址转换服务发起的含有虚拟地址的请求;
删除单元37,用于若所述检测单元36接收到无效请求,则根据所述虚拟地址删除对应地址翻译条目中的虚拟地址、物理地址以及标签信息。
进一步的,本发明实施例还提供一种电子设备,该硬件设备支持地址转换服务ATS功能,其中设置有ATC,并且,该硬件设备还包括有存储介质与处理器,所述存储介质与所述处理器耦合,所述处理器被配置为执行所述存储介质中存储的程序指令;所述程序指令运行时执行上述图1-3所示的转换地址的缓存处理方法。在实际应用中,该电子设备包括但不限于高性能网卡、存储设备,高性能负载加速卡等支持有PCIe协议的电子设备。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
可以理解的是,上述方法及装置中的相关特征可以相互参考。另外,上述实施例中的“第一”、“第二”等是用于区分各实施例,而并不代表各实施例的优劣。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的优选实施方式。
此外,存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据割接设备的处理器以产生一个机器,使得通过计算机或其他可编程数据割接设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据割接设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据割接设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。存储器是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。