指令的执行方法、装置及存储介质与流程

文档序号:21409350发布日期:2020-07-07 14:44阅读:215来源:国知局
指令的执行方法、装置及存储介质与流程

本申请涉及信息处理技术领域,特别涉及一种指令的执行方法、装置及存储介质。



背景技术:

目前,当计算机系统中的应用程序调用指令时,由计算机系统的处理器执行应用程序调用的指令。为了保证计算机系统的安全性,指令通常也被划分为两大类,第一类是需要在可信代码段执行的指令,第二类是无需在可信代码段执行的指令。因此,处理器如何执行第一类指令将直接影响计算机系统的安全性。

相关技术中,敏感指令是指用于进行系统管理或关键资源调用的指令,因此敏感指令属于上述第一类指令。另外,应用程序有两种运行状态:用户态和内核态。应用程序只有运行在内核态时,处理器才有权限执行敏感指令。因此,在应用程序运行的过程中,如果应用程序运行在用户态,且处理器发现当前需要执行某个敏感指令,处理器需要将该应用程序由用户态切换到内核态,以执行该敏感指令。当处理器执行完该敏感指令之后,再将该应用程序从内核态切换到用户态。

上述处理器在执行敏感指令的完整过程中,需要先将应用程序从用户态切换到内核态,再从内核态切换到用户态。如果应用程序在运行的过程中多次调用敏感指令,将导致该应用程序频繁地在内核态和用户态之间切换,从而导致计算机系统性能的下降。

申请内容

本申请提供了一种指令的执行方法、装置及存储介质。所述技术方案如下:

第一方面,提供了一种指令的执行方法,所述方法包括:当处理器确定当前需要执行的目标指令为参考指令集中的指令时,确定程序计数器的当前数值,程序计数器的当前数值用于指示目标指令所属代码段的地址,参考指令集中的指令为需要在可信代码段执行的指令;当处理器根据程序计数器的当前数值确定自身具有执行目标指令的权限时,执行目标指令。

在本申请中,由于程序计数器的当前数值用于指示当前需要执行的指令所属代码段的地址,因此处理器可以直接根据程序计数器的当前数值来确定自身当前是否具有执行目标指令的权限,以确保目标指令在可信代码段内执行。由于敏感指令为需要在可信代码段内执行的指令,因此,处理器通过本申请的方法执行敏感指令时,只需要根据程序计数器的当前数值即可确定自身当前是否具有执行敏感指令的权限,无需对应用程序的运行状态进行判断,进而也就无需将应用程序从用户态切换到内核态,从而提升了计算机系统的性能。

可选地,处理器根据程序计数器的当前数值确定自身具有执行目标指令的权限,包括:处理器从寄存器存储的可信代码段地址中,获取目标指令的可信代码段地址;如果程序计数器的当前数值指示的地址与目标指令的可信代码段地址在n个比特位上的比特值相同,则处理器确定自身当前具有执行目标指令的权限,n个比特位是指地址的比特位按照从高到低的顺序排序后,处于前n个位置的比特位,n为大于或等于1的正整数。

在一种可能的实现方式中,可以将当前待执行的目标指令的可信代码段地址预先存储在寄存器上,这样处理器在执行目标指令之前,只需通过上述方式判断目标指令当前所属代码段的地址是否与预先存储的可信代码段地址匹配即可,如果匹配,则确定自身当前具有执行目标指令的权限,提高了根据程序计数器的当前数值确定具有执行目标指令的权限的效率。

可选地,处理器根据程序计数器的当前数值确定自身具有执行目标指令的权限,包括:处理器获取目标权限表,目标权限表包括多个权限项,每个权限项用于记录一个代码段地址和代码段地址的权限信息,权限信息用于指示处理器是否具有在代码段地址指示的代码段内执行目标指令的权限;处理器从目标权限表中查找与程序计数器的当前数值指示的地址对应的目标权限项;如果目标权限项中记录的权限信息为有权限,则处理器确定自身当前具有执行目标指令的权限。

在另一种可能的实现方式中,可以预先针对目标指令设置权限表,权限表用于记录各个代码段针对目标指令的权限信息,这样处理器在执行目标指令之前,可以通过上述方式从权限表中获取程序计数器的当前数值指示的地址对应的代码段的权限信息,然后根据获取的权限信息确定自身当前是否具有执行目标指令的权限,提高了根据程序计数器的当前数值确定具有执行目标指令的权限的灵活性。

可选地,目标权限表中每个权限项对应一个项索引,该项索引用于指示对应的权限项记录的代码段地址;处理器从目标权限表中查找与程序计数器的当前数值指示的地址对应的目标权限项,包括:处理器根据程序计数器的当前数值生成项索引;处理器从与目标权限表包括的多个权限项中,查找与生成的项索引对应的权限项,得到目标权限项。

进一步地,处理器还可以对权限表中的每个权限项按照上述方式设置项索引,以提高后续从权限表中获取程序计数器的当前数值指示的地址对应的代码段的权限信息的效率。

可选地,处理器获取目标权限表,包括:处理器确定目标指令对应的指令类型;处理器根据该指令类型生成表索引,处理器从元权项表中查找与生成的表索引对应的权限表地址,该元权项表中包括多个权限表地址,每个权限表地址对应一个表索引;处理器根据查找到的权限表地址,从至少一个权限表中查找对应的权限表,得到目标权限表。

在本申请中,由于同一类指令在各个代码段的权限基本相同,因此处理器可以针对一类指令设置一个权限表,提高了本申请提供的指令的执行方法的灵活性。

可选地,方法还包括:处理器确定需要在可信代码段执行的至少一个指令;处理器确定至少一个指令中每个指令在多个代码段中每个代码段的权限信息;处理器根据至少一个指令中每个指令在多个代码段中每个代码段的权限信息和多个代码段中每个代码段的地址,生成至少一个权项表。

由于权限表用于记录各个代码段针对目标指令的权限信息,因此,在本申请中,处理器可以预先生成至少一个权限表,以便于后续通过该至少一个权限表确定是否具有执行目标指令的权限。

第二方面,提供了一种指令的执行装置,所述指令的执行装置具有实现上述第一方面中指令的执行方法行为的功能。所述指令的执行装置包括至少一个模块,该至少一个模块用于实现上述第一方面所提供的指令的执行方法。

第三方面,提供了一种指令的执行装置,所述指令的执行装置的结构中包括处理器和存储器,所述存储器用于存储程序。所述处理器被配置为用于执行所述存储器中存储的程序,以实现上述第一方面所述的任一指令的执行方法。

第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面所述的任一指令的执行方法。

第五方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面所述的任一指令的执行方法。

上述第二方面、第三方面、第四方面和第五方面所获得的技术效果与第一方面中对应的技术手段获得的技术效果近似,在这里不再赘述。

附图说明

图1是本申请实施例提供的一种计算机系统示意图;

图2是本申请实施例提供的一种应用程序的分层示意图;

图3是本申请实施例提供的一种指令的执行方法流程图;

图4是本申请实施例提供的一种执行指令的逻辑示意图;

图5是本申请实施例提供的一种权限表的示意图;

图6是本申请实施例提供的一种计算机系统的运行逻辑示意图;

图7是本申请实施例提供的另一种执行指令的逻辑示意图;

图8是本申请实施例提供一种权限表的存储方式示意图;

图9是本申请实施例提供的另一种执行指令的逻辑示意图;

图10是本申请实施例提供的一种指令的执行装置示意图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。

在对本申请实施例提供的指令的执行方法进行解释说明之前,先对本申请实施例涉及的计算机系统进行解释说明。图1是本申请实施例提供的一种计算机系统示意图。如图1所示,该计算机系统100包括至少一个处理器101,内存102、通信总线103、存储器104以及至少一个通信接口105。

处理器101可以是一个通用中央处理器(centralprocessingunit,cpu)、微处理器、特定应用集成电路(application-specificintegratedcircuit,asic)或一个或多个用于控制本申请方案程序执行的集成电路。其中,这里的处理器101可以指一个或多个设备、电路、和/或用于处理数据(例如计算机程序指令)的处理核。

处理器101中包括前端部件1011、执行部件1012、后端部件1013。

其中,前端部件1011包括解码单元、寄存器单元和调度单元。解码单元用于对当前需要执行的目标指令进行解码,以确定目标指令是否为需要在可信代码段内执行的指令。寄存器单元用于存放用于判断各个指令的权限的指示信息,比如可以存放预先为各个指令配置的可信代码段地址或预先为各个指令配置的权限表的存储地址。调度单元用于在解码单元解码出目标指令为需要在可信代码段指令的敏感指令时,根据寄存器单元中存储的相关指示信息调用与目标指令对应的凭据信息,比如调用预先为目标指令配置的可信代码段地址或预先为目标指令配置的权限表。执行部件1012用于根据调度单元调用出的凭据信息对当前是否具有执行目标指令的权限进行检查。后端部件1013用于根据执行部件的检查结果执行后续相关操作。

可选地,当本申请是通过权限表的方式判断当前是否具有执行目标指令的权限时,计算机系统100还包括凭据部件1014和高速缓冲(cache)单元1015,凭据部件1014用于管理和维护预先设置的各个权限表,此时,预先设置的各个权限表可以存储在内存102中,也可以存储在高速缓冲单元1015中,本申请实施例在此不做具体限定。

另外,处理器101中还包括程序计数器1016,程序计数器的当前数值用于指示当前需要执行的指令所属代码段的地址,也即是,每当处理器执行完一条指令,程序计数器的当前数值将变化为用于指示下一条需要执行的指令的所属的代码段的地址。

通信总线103可包括一通路,在上述组件之间传送信息。

存储器104可以是只读存储器(read-onlymemory,rom)或可存储静态信息和指令的其它类型的静态存储设备,随机存取存储器(randomaccessmemory,ram)或者可存储信息和指令的其它类型的动态存储设备,也可以是电可擦可编程只读存储器(electricallyerasableprogrammableread-onlymemory,eeprom)、只读光盘(compactdiscread-onlymemory,cd-rom)或其它光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其它磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其它介质,但不限于此。存储器104可以是独立存在,通过通信总线103与处理器101相连接。存储器104也可以和处理器101集成在一起。另外,存储器104还用于存储执行本申请方案的程序代码,并由处理器101来控制执行。处理器101用于执行存储器104中存储的程序代码。程序代码中可以包括一个或多个软件模块。

通信接口105,使用任何收发器一类的装置,用于与其它设备或通信网络通信,如以太网,无线接入网(ran),无线局域网(wirelesslocalareanetworks,wlan)等。

上述的计算机系统可以是一个通用计算机设备或者是一个专用计算机设备。在具体实现中,计算机系统可以是台式机、便携式电脑、网络服务器、掌上电脑(personaldigitalassistant,pda)、移动手机、平板电脑、无线终端设备、通信设备或者嵌入式设备。本申请实施例不限定计算机设备的类型。

另外,如图2所示,运行在图1所示的处理器等硬件之上的应用程序可以是分层次的。通常情况是,底层应用程序为它的上一层应用程序提供初始化所需要的信息注册与资源管理功能。在这种层次关系下,不失一般性,如图2所示,本申请可以继续假设硬件之上的应用程序分为基础层(比如,基本输入输出系统(basicinputoutputsystem,bios)或者固件(firmware))、系统层(比如,内核或操作系统)、环境层(比如,容器与沙箱)、业务层(运行于环境层之上的数据段与代码段)。

其中,基础层为系统层的下层、系统层为环境层的下层、环境层为业务层的下层。上述这些关系,反之为上层。具有这种层次关系的下层应用程序,组织与管理该上层应用程序的指令的权限表,并在上层应用程序启动前将该权限表在内存中的内容装载到处理器中。如图2所示,处理器用于组织与管理基础层的权限表,基础层用于组织和管理系统层的权限表,系统层用于组织和管理环境层的权限表,环境层用于组织与管理业务层的权限表。

当然,在本申请实施例中,也可以假设硬件之上的应用程序分为业务层和系统层即可。也即是,本申请实施例并不限定硬件之上的应用程序的具体分层情况,对于任意其他的分层情况,处理器均可按照上述方式执行本申请实施例提供的指令的执行方法。

图3是本申请实施例提供的一种指令的执行方法流程图,应用于图1所示的计算机系统,如图3所示,该方法包括如下步骤:

步骤301:当处理器确定当前需要执行的目标指令为参考指令集中的指令时,确定程序计数器的当前数值,程序计数器的当前数值用于目标指令所属代码段的地址,参考指令集中的指令为需要在可信代码段执行的指令。

对于当前需要执行的目标指令,如图4所示,先由图1中的前端部件中的解码单元对该目标指令进行解码,以确定该目标指令是否为参考指令集中的指令。当目标指令是参考指令集中的指令时,表明目标指令是需要在可信代码段内执行的指令,此时为了提高计算机系统的安全性,图1所示的执行部件需要判断处理器当前是否具有执行目标指令的权限。如果处理器当前具有执行目标指令的权限,则后端部件按照有权限的方式执行目标指令。如果处理器当前没有执行目标指令的权限,则后端部件需要按照无权限的方式执行目标指令,比如按照异常操作进行处理,以避免计算机系统被恶意程序攻击。另外,当目标指令不是参考指令集中的指令时,表明目标指令并不需要在可信代码段内执行,此时后端部件可以直接按照有权限的方式执行目标指令。

其中,在本申请实施例中,参考指令集中的指令为需要在可信代码段执行的指令,这些指令不仅可以包括需要应用程序在内核态才能执行的敏感指令,还可以包括应用程序在用户态时需要在可信代码段内执行的一些指令。比如,参考指令集可以包括开启与关闭某段内存的内存保护指令(如x86操作系统所提供支持基于用户模式的保护键寄存器(protectionkeyregisteruser,pkru)的写基于用户模式的保护键寄存器数值(writeprotectionkeyregisteruser,wrpkru)指令)、还可以包括特定性质内存的访问指令(如转换检测缓冲区(translationlookasidebuffer,tlb)的刷新操作指令)、也可以包括对设备端口的访问指令、还可以包括访问处理器核的特定寄存器、甚至是其它特定的处理器指令。

在本申请实施例中,为了避免需要将应用程序由用户态切换到内核态才能执行敏感指令,处理器可以直接根据程序计数器的当前数值来确定自身当前是否具有执行目标指令的权限,以提高执行参考指令集中的指令的效率。

其中,处理器根据程序计数器的当前数值来确定自身当前是否具有执行目标指令的权限有以下两种可能的实现方式:

第一种可能的实现方式,图1所示的调度单元从处理器的寄存器存储的可信代码段地址中,获取目标指令的可信代码段地址。由于程序计数器的当前数值可以直接指示目标指令当前所属代码段的地址,因此,执行部件可以对程序计数器的当前数值指示的地址和目标指令的可信代码段地址进行对比,以确定处理器当前是否具有执行目标指令的权限。

具体地,如果程序计数器的当前数值指示的地址与目标指令的可信代码段地址在n个比特位上的比特值相同,执行部件则确定处理器当前具有执行目标指令的权限,n个比特位是指地址的比特位按照从高到低的顺序排序后,处于前n个位置的比特位,n为大于或等于1的正整数。其中,存储的目标指令的可信代码段地址是指:预先配置的允许执行目标指令的代码段的地址。

也即是,在本申请实施例中,对于参考指令集中任一指令,在寄存器中预先存储有该指令的可信代码段地址。此时,当需要判断确定处理器当前是否具有执行目标指令的权限时,执行部件只需要将目标指令当前所属代码段的地址与存储的可信代码段地址进行匹配即可,如果能够匹配上,则表明目标指令当前所属代码段为可信代码段,执行部件可以确定处理器当前具有执行目标指令的权限。如果不能匹配上,则目标指令当前所属代码段为不可信代码段,执行部件可以确定处理器当前没有执行目标指令的权限。

其中,为了提高确定当前是否具有执行目标指令的权限的灵活性,执行部件将目标指令当前所属代码段的地址与存储的可信代码段地址进行匹配的实现方式可以为:确定目标指令当前所属代码段的地址和存储的可信代码段地址在高位比特位上的比特值是否相同即可。比如,表征代码段的地址共有10个比特位,n为5,那么在将目标指令当前所属代码段的地址与存储的可信代码段地址进行匹配时,只需要目标指令当前所属代码段的地址和存储的可信代码段地址在高5位的比特位上的比特值相同,即可确定出处理器当前具有执行目标指令的权限。如果目标指令当前所属代码段的地址和存储的可信代码段地址在高5位的比特位中任一比特位上的比特值不同,则确定处理器当前没有执行目标指令的权限。

其中,n为预先设置的数值。当然,n也可以为全部比特位的个数,此时,只有目标指令当前所属代码段的地址与目标指令的可信代码段地址在所有比特位上的比特值相同,才能确定出处理器当前具有执行目标指令的权限。如果目标指令当前所属代码段的地址与目标指令的可信代码段地址在所有比特位中任一比特位上的比特值不同,则确定处理器当前没有执行目标指令的权限。上述目标指令当前所属代码段的地址均是指程序计数器的当前数值指示的地址。

另外,可信代码段地址存储在寄存器中,如此在执行指令时,可以减少处理器访问内存的次数,从而提高处理器的工作速度。

第二种可能的实现方式,图1所示的调度单元获取目标权限表,目标权限表包括多个权限项,每个权限项用于记录一个代码段地址和代码段地址的权限信息,权限信息用于指示处理器是否具有在代码段地址指示的代码段内执行目标指令的权限;执行部件从目标权限表中查找与程序计数器的当前数值指示的地址对应的目标权限项;如果目标权限项中记录的权限信息为有权限,则执行部件确定处理器当前具有执行目标指令的权限。

也即是,在本申请实施例中,对于参考指令集中任一指令,都预先配置有与该指令对应的权限表,权限表包括多个权限项,每个权限项用于记录一个代码段地址和代码段地址的权限信息,权限信息用于指示处理器是否具有在代码段地址指示的代码段内执行该指令的权限。此时,当处理器需要判断确定自身当前是否具有执行目标指令的权限时,只需要从与目标指令对应的目标权限表中查找与当前所属代码段的权限信息,然后根据查找的权限信息即可确定自身当前是否具有执行目标指令的权限。

图5是本申请实施例提供的一种权限表示意图,如图5所示,权限表中的每一行代表一个权限项。比如,权限项“0×800000007000000000”中的从高位比特到低位比特的第一个比特位可以用于指示是否有权限。第二位和第三位可以用于指示该权限项对应的代码段地址,该权限项中的第4位至第10可以用于指示权限项对应的指令。图5中的其他信息将在下述内容中一一展开说明,在此先不详细阐述。

在第二种可能的实现方式中,由于目标权限表包括多个权限项,如果处理器中的执行部件直接从多个权限项中查找与程序计数器的当前数值指示的地址对应的目标权限项,查找效率较低。因此,在本申请实施例中,针对每个权限项中的配置一个项索引,其中,项索引用于指示对应的权限项记录的代码段地址,通过项索引查找对应的权限项,可以提高查找与程序计数器的当前数值指示的地址对应的目标权限项的效率。

此时,处理器中的执行部件从目标权限表中查找与程序计数器的当前数值指示的地址对应的目标权限项的实现方式可以为:处理器中的执行部件根据程序计数器的当前数值生成项索引;处理器中的执行部件从与目标权限表包括的多个权限项中,查找与生成的项索引对应的权限项,得到目标权限项。

比如,代码段地址共有57个比特位,从低比特位到高比特位依次标记为第0位、第1位、…、第56位,则可以根据每个代码段地址中第48位至第56位上的比特值来生成对应的项索引。如此,如图5所示,处理器中的执行部件根据程序计数器的当前数值生成项索引的实现方式可以为:确定程序计数器的当前数值指示的地址中第48位至第56位上的比特值,根据确定的比特值生成项索引。然后根据生成的项索引即可查找到对应的权限项。

在本申请实施例中,用于生成项索引的比特位可以为代码段地址中的高位比特位,也可以为代码段地址中的低位比特位,或者为代码段地址中的中间比特位,在此不做具体限定。其中,高位比特位是指将代码段地址的比特位按照从高到低的顺序排列之后,排名靠前的比特位,低位比特位是指排名靠后的比特位。

另外,在第二种可能的实现方式中,每个权限项记录的一个代码段地址可以是一个具体的地址,也可以是一个地址范围,本申请实施例在此不做具体限定。比如,代码段地址需要通过50个比特位来表征,如果某个权限项记录的是从低位到高位比如第0个比特位到第10个比特位上的比特值,则该权限项记录的是一个地址范围,该地址范围包括第0个比特位到第10个比特位上的比特值与权限项中记录的比特值相同的地址。此时,权限信息用于指示:如果应用程序的某个指令当前所属的代码段地址落入权限信息对应的地址范围内时,处理器具有执行该指令的权限。

另外,在本申请实施例中,可以对于参考指令集中任一指令,都配置一个权限表,如此可以提高查找权限信息的精准性。可选地,为了避免预先配置的权限表体系过于庞大,可以针对一类指令配置一个权限表。比如,可以针对与输入/输出(input/output,io)相关的指令配置一个权限表。

此时,处理器获取目标权限表的实现方式可以为:处理器确定目标指令对应的指令类型;处理器根据该指令类型生成表索引,处理器从元权项表中查找与生成的表索引对应的权限表地址,该元权项表中包括多个权限表地址,每个权限表地址对应一个表索引;处理器根据查找到的权限表地址,从至少一个权限表中查找对应的权限表,得到目标权限表。

其中,每个表索引用于指示一个权限表的地址,且每个表索引是根据指示的权限表对应的指令的类型确定的。因此,可以处理器直接根据目标指令的指令类型生成一个表索引,然后从元权项表中查找一个权限表地址,以根据查找到的权限表地址获取目标权限表。

如图5所示,元权项表中的每一行代表一个权限表地址。其中,步骤301中解码单元在对目标指令进行解码时,还可以获取到目标指令的指令类型,此时解码单元还可以根据该目标指令的指令类型生成表索引,以便于调度单元从元权项表中查找与生成的表索引对应的权限表地址。

另外,在上述第二种可能的实现方式中,处理器是根据权限表来判断自身当前是否具有执行目标指令的权限,也即是,在本申请实施例中,计算机系统需要预先生成并维护这些权限表,以便于处理器执行指令时可以根据这些权限表来确定自身当前是否具有执行权限。接下来对计算机系统生成并维护这些权限表进行进一步展开说明。

其中,计算机系统生成至少一个权限表的实现方式可以为:处理器确定需要在可信代码段执行的至少一个指令;处理器确定至少一个指令中每个指令在多个代码段中每个代码段的权限信息;处理器根据至少一个指令中每个指令在多个代码段中每个代码段的权限信息和多个代码段中每个代码段的地址,生成至少一个权项表。由于不同的应用程序执行的指令以及对指令所属的可信代码段均可能不同,因此,上述生成至少一个权项表是指生成对某个应用程序的至少一个权限表。

进一步地,当部署在处理器等硬件之前的应用程序是分层的时,上述生成对某个应用程序的至少一个权限表具体可以为:下层应用程序生成针对上一层应用程序的至少一个权限表,并在上一层应用程序启动时,将针对上一层应用程序的至少一个权限表加载到处理器中的高速缓冲单元中。其中,在生成下层应用程序针对上一层应用程序的至少一个权限表时,下层应用程序可以从上一层应用程序的运行环境(context)信息中获取需要在可信代码段执行的至少一个指令。

比如,当部署在处理器等硬件之上的应用程序被划分为系统层和应用层时,应用程序的系统层生成针对业务层的至少一个权限表,并在业务层启动时,将生成的至少一个权限表加载到处理器中,并且后期由系统层按照上述方式对生成的至少一个权限表进行管理和维护。

又比如,当部署在处理器等硬件之上的应用程序被划分为图2所示的层级结构时,图1所示的计算机系统的运行过程可以如图6所示。具体地,当计算机系统的硬件上电启动时,处理器读取权限模式值,权限模式值用于指示是否按照权限表方式执行指令,比如,当权限模式值为1时,表明当前需要按照权限表的方式执行指令。对于部署在处理器上的各个应用程序层在各自运行的过程加载上一层的权限表。如图6所示,基础层在初始化之后,可以先检测系统层的权限表的合法性,如果合法,则加载系统层的权限表。系统层在初始化之后,同样可以先检测环境层的权限表的合法性,如果合法,则加载环境层的权限表。环境层在初始化之后,同样可以先检测业务层的权限表的合法性,如果合法,则加载业务层的权限表。

如果在本申请实施例中,每个指令对应一个权限表,那么对于至少一个指令中任一指令,可以预先生成针对该指令的空白权限表,空白权限表中每一项对应一个代码段地址。那么处理器在确定出该指令在多个代码段中每个代码段的权限信息之后,对于空白权限表中任一权限项,从该指令在多个代码段中每个代码段的权限信息中获取在该权限项对应的代码段地址中的权限信息,然后将获取的权限信息添加在对应的空白权限项中即可。此时,每个权限项的项索引可以在生成空白权限表的时候生成,也可以在将所有权限信息添加到空白权限表之后生成,本申请实施例在此不做具体限定。

如果在本申请实施例中,每一类指令对应一个权限表,那么对于至少一个指令中任一指令,确定该指令的类型,可以预先生成针对该指令的类型的空白权限表,空白权限表中每一项对应一个代码段地址。后续同样可以按照上述方法将该指令的权限信息添加至空白权限表中。

另外,如果是预先生成一个空白权限表,空白权限表中每一项对应一个代码段地址。其中,任一权限项中可以记录对应的代码段地址,当然也可以不记录对应的代码段地址。比如,在生成空白权限表时配置空白权限表中每一行(对应一个权限项)对应的代码段地址,那么后续只需根据行标识即可确定该行中记录的权限信息对应的代码段地址。此时,如图5所示,权限项中可以只有权限信息,比如图5中的第三行对应的权限项中“0”表明当前不具有执行指令的权限。

在本申请实施例中,处理器在生成至少一个权限表之后,在一种可能的实现方式中,如图7所示,下层应用程序在生成针对上一层应用程序的至少一个权限表之后,可以将至少一个权项表存储在处理器的内存中。这样,当应用程序加载器启动应用程序时,可以将至少一个权项表在内存中的地址加载至处理器的权限表基地址寄存器中,以便于后续处理器根据权限表基地址寄存器中的地址将至少一个权限表加载到高速缓冲单元中,以根据至少一个权限表执行需要在可信代码段内执行的指令。

在另一种可能的实现方式中,如图8所示,对于至少一个权项表中任一权限表a,计算机系统可以从处理器中的高速缓冲单元中划分出多个空间,每个空间用于存储权限表a中的一个权限项;从处理器的寄存器中划分出多个比特位集合,每个比特位集合包括至少一个比特位,且每个比特位集合用于指示多个空间中的一个空间。此时,权限表是存储在处理器中的高速缓冲中,从而可以加速对权限表的查询,提高了执行指令的效率。其中,划分出多个比特位集合的寄存器可以称为用户可配置权限寄存器。

比如,对于权限表a中的任一个权限项b,可以将用户可配置权限寄存器中第100个比特位至第110个比特位与高速缓冲单元中的一个空间进行映射,并将该权限项存储在该空间中。后续可以通过用户可配置权限寄存器中第100个比特位至第110个比特位,查找到该权限项b。

另外,如图8所示,当权限表按照如图8所示的方式存储在高速缓冲单元中时,可以将每个比特位集合与指示的空间之间的映射关系存储在凭据部件中,以便于后续凭据部件可以根据该映射关系对高速缓冲单元中的权限表进行管理和维护。

进一步地,每个比特位集合对应一个组合比特值,组合比特值用于指示允许对对应的权限项执行的操作,允许对对应的权限项执行的操作包括表项锁定、支持刷新、支持查询和表项无效中的至少一个。在一种可能的实现方式中,当每个比特位集合包括8个比特位时,8个比特位按照从高位到低位的顺序划分为4组,每一组包括两个比特位,第一组可以用于指示对应的权限项是否被锁定,第二组可以用于指示是否支持对对应的权限项进行刷新,第三组可以用于指示是否支持对对应的权限项进行查询,第四组可以用于指示对应的权限项是否无效。

比如,寄存器中第100个比特位至第110个比特位和高速缓冲中存储的权限项b之间存在映射关系。此时,可以将第100个比特位至第101个比特位用于指示是否允许对该权限项b进行表项锁定,具体地,如图8所示,当这两个比特位的比特值为00时,表明该权限项b被锁定。可以将第102个比特位至第103个比特位用于指示是否支持对该权限项b进行查询,具体地,如图8所示,当这两个比特位的比特值为01时,表明当前支持对该权限项b的查询。可以将第104个比特位至第105个比特位用于指示是否支持对该权限项b进行刷新,具体地,如图8所示,当这两个比特位的比特值为10时,表明当前支持对该权限项b的刷新。可以将第104个比特位至第105个比特位用于指示该权限项b是否无效,具体地,如图8所示,当这两个比特位的比特值为11时,表明该权限项b已无效。后续可以通过寄存器中第100个比特位至第110个比特位上的具体的比特值,确定允许对该权限项b执行的操作。

基于上述存储权限表的两种可能的实现方式,本申请实施例提供了一种执行指令的逻辑关系图,如图9所示,处理器中的解码单元对目标指令进行解码,当目标指令为参考指令集中的指令时,由执行部件来确定处理器当前是否具有执行目标指令的权限。

其中,执行部件中的权限查询单元先通过图9所示的两种方式获取目标权限表,分别标记为可选方式1和可选方式2。其中,可选方式1应用于权限表存储在内存中的场景,可选方式1具体为:先从权限表基地址寄存器中获取目标权限表在内存中的存储地址,然后根据获取的地址将目标权限表从内存加载到高速缓冲单元中。可选方式2应用于权限表存储在高速缓冲单元中的场景,可选方式2具体为:从用户可配置权限寄存器中查找用于存储目标权限表的空间标识,然后根据空间标识从高速缓冲单元中直接获取目标权限表。

另外,关于图9中的其他部分的内容将在下述实施例中进一步说明,在此先不详细阐述。

步骤302:当处理器根据程序计数器的当前数值确定自身具有执行目标指令的权限时,执行目标指令。

对于步骤301的任一种可能的实现方式,当图1所示处理器中的执行部件根据程序计数器的当前数值确定处理器具有执行目标指令的权限时,处理器中的后端部件可以执行目标指令。在本申请实施例中,后端部件执行目标指令可以为后端部件直接执行目标指令。

可选地,对于步骤301中的第二种可能的实现方式,权限表中的每个权限项还可以记录其他信息,该其他信息可以包括后端部件当前执行对应的指令时允许访问的端口,和/或,后端部件当前执行对应的指令时特定参数的数值,此时通过该其他信息可以实现对权限的更细粒度的控制。比如,图5中的权限项“0×800000007000000000”中第11位至最后一位用于指示允许访问的端口,由于第11位至最后一位包括10个比特位,因此,这10个比特位可以指示1024个端口,因此,根据权限项中这几个比特位上的数值即可确定后端部件当前执行对应的指令时允许访问的端口。权限项中记录的其他信息均可按照上述方式实现,在此不再一一展开说明。

如图9所示,当权限表中的每个权限项还记录其他信息时,在权限查询单元根据程序计数器中的当前数值和权限表中记录的权限信息确定当前具有执行目标指令的权限之后,权限查询单元还可以从访问控制逻辑单元中获取上下文信息,然后通过上下文信息实现对权限的更细粒度的控制。

在一种可能的实现方式中,当其他信息还包括当前执行目标指令时允许访问的端口时,在执行部件根据权限信息确定出当前具有权限执行目标指令时,后端部件还需要根据上下文信息确定当前执行目标指令时访问的端口,如果确定出的端口与权限表中的端口一致,则后端部件可以继续执行目标指令,否则后端部件仍然不能执行目标指令。比如,在执行指令“out$0x80,%rax”时,权限项中记录的允许访问的端口为0x80,如果当前访问的端口为0x81,则后端部件当前仍然不能执行目标指令。

在另一种可能的实现方式中,当其他信息还包括当前执行对应的指令时特定参数的数值时,在执行部件根据权限信息确定出当前具有权限执行目标指令时,后端部件还需要根据上下文信息确定当前执行目标指令时特定参数的数值,如果确定出的数值与权限表中的数值一致,则后端部件可以执行目标指令,否则仍然不能执行目标指令。比如,在执行指令“wrpkru%rax”时,权限项中记录的当前写入的数据需为0x11,如果根据寄存器的数值确定当前实际要写入的数据为0x30,则确定当前仍没有具有执行目标指令的权限。

在上述确定出当前没有具有执行目标指令的权限时,可以执行空操作或触发异常,当然也可以对上下文信息进行修改,以使当前具有执行目标指令的权限。比如,如图9所示,权限查询单元可以通过参数修正逻辑单元对上下文信息进行修正,以使当前具有执行目标指令的权限,本申请实施例在此不再展开说明。

另外,本申请实施例提供的指令的执行方法在实际执行时,是基于这样的一个应用场景:非特权软件在执行敏感指令时无法控制代码段地址,且代码段内的敏感指令也不可被修改。如此本申请提供的执行的指令方法才有实际意义。

在本申请中,由于程序计数器的当前数值用于指示当前需要执行的指令所属代码段的地址,因此处理器可以直接根据程序计数器的当前数值来确定自身当前是否具有执行目标指令的权限,以确保目标指令在可信代码段内执行。由于敏感指令为需要在可信代码段内执行的指令,因此,在非特权软件在执行敏感指令时无法控制代码段地址,且代码段内的敏感指令也不可被修改时,通过本申请的方法执行敏感指令时,处理器只需要根据程序计数器的当前数值即可确定自身当前是否具有执行敏感指令的权限,无需对应用程序的运行状态进行判断,进而也就无需将应用程序从用户态切换到内核态,从而提升了计算机系统的性能。

图10是本申请实施例提供的一种指令的执行装置。如图10所示,该装置1000包括第一确定模块1001和执行模块1002:

第一确定模块1001,用于执行图3所示实施例中的步骤301;

执行模块1002,用于执行图3所示实施例中的步骤302。

可选地,第一确定模块1001包括:

第一获取单元,用于从寄存器存储的可信代码段地址中,获取目标指令的可信代码段地址;

第一确定单元,用于如果程序计数器的当前数值指示的地址与目标指令的可信代码段地址在n个比特位上的比特值相同,则确定处理器当前具有执行目标指令的权限,n个比特位是指地址的比特位按照从高到低的顺序排序后,处于前n个位置的比特位,n为大于或等于1的正整数。

可选地,第一确定模块1001包括:

第二获取单元,用于获取目标权限表,目标权限表包括多个权限项,每个权限项用于记录一个代码段地址和代码段地址的权限信息,权限信息用于指示处理器是否具有在代码段地址指示的代码段内执行目标指令的权限;

查找单元,用于从目标权限表中查找与程序计数器的当前数值指示的地址对应的目标权限项;

第二确定单元,用于如果目标权限项中记录的权限信息为有权限,则确定处理器当前具有执行目标指令的权限。

可选地,目标权限表中每个权限项对应一个项索引,项索引用于指示对应的权限项记录的代码段地址;

查找单元,具体用于:

根据程序计数器的当前数值生成项索引;

从与目标权限表包括的多个权限项中,查找与生成的项索引对应的权限项,得到目标权限项。

可选地,第二获取单元,具体用于:

确定目标指令对应的指令类型;

根据该指令类型是生成表索引;

从元权项表中查找与生成的表索引对应的权限表地址,该元权项表中包括多个权限表地址,每个权限表地址对应一个表索引

根据查找到的权项表地址,从至少一个权限表中查找对应的权限表,得到目标权限表。

可选地,装置1000还包括:

第二确定模块,用于确定需要在可信代码段执行的至少一个指令;

第三确定模块,用于确定至少一个指令中每个指令在多个代码段中每个代码段的权限信息;

生成模块,用于根据至少一个指令中每个指令在多个代码段中每个代码段的权限信息和多个代码段中每个代码段的地址,生成至少一个权项表。

在本申请中,由于程序计数器的当前数值用于指示当前需要执行的指令所属代码段的地址,因此可以直接根据程序计数器的当前数值来确定当前是否具有执行目标指令的权限,以确保目标指令在可信代码段内执行。由于敏感指令为需要在可信代码段内执行的指令,因此,通过本申请的方法执行敏感指令时,只需要根据程序计数器的当前数值即可确定当前是否具有执行敏感指令的权限,无需对应用程序的运行状态进行判断,进而也就无需将应用程序从用户态切换到内核态,从而提升了计算机系统的性能。

需要说明的是:上述实施例提供的指令的执行装置在执行指令时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将处理器的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的指令的执行装置与指令的执行方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意结合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如:同轴电缆、光纤、数据用户线(digitalsubscriberline,dsl))或无线(例如:红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如:软盘、硬盘、磁带)、光介质(例如:数字通用光盘(digitalversatiledisc,dvd))、或者半导体介质(例如:固态硬盘(solidstatedisk,ssd))等。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

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