在TEE侧实现多核并行的方法、装置及系统与流程

文档序号:18059151发布日期:2019-07-03 02:56阅读:561来源:国知局
本申请涉及操作系统技术,尤其涉及在多域操作系统中实现多核并行的方法、装置及系统。
背景技术
::为了保证终端设备的安全性,出现了以arm(advancedriscmachines)为代表的终端设备安全框架(其中risc的英文全称为reducedinstructionsetcomputer)。在框架下,系统级的安全是通过将片上系统(systemonchips,soc)的软硬件资源划分到两个世界中获得的。这两个世界即正常世界(normalworld)和安全世界(secureworld)(也可以叫安全域和非安全域),这两个世界分别对应富执行环境(richexecutionenvironment,ree)和可信执行环境(trustedexecutionenvironment,tee)。ree和tee运行于同一台物理设备上,分别运行一套操作系统。ree运行安全性要求低的客户端应用(clientapplication,ca);tee则运行需要保障其安全性的可信应用(trustedapplication,ta),为授权的可信应用ta提供安全的执行环境。ca和ta之间通过提供的通信机制进行通信,就如同客户端和服务器一般。目前终端上越来越多的应用场景应用了生物识别技术,例如指纹识别或人脸识别,二者均可以用于终端解锁或支付等场景。生物识别技术的使用给终端用户带来了很大的便利。但是另一方面,由于生物识别技术本身会存储一些人自身的生物特征,这些都是敏感的个人数据,所以应用这种技术的方案在使用时对终端安全性要求很高。现有技术可以利用架构保障生物识别方案的安全性。具体的,生物识别的主要业务逻辑(包括特征提取、特征比对、活体检测、以及特征存储)被实现为ta,并将该ta运行在tee,同时生物特征数据也保存在tee,这样,通过tee提供的安全环境保障整个方案的安全性。但是,早期是按照tee只能运行在一个核(通常称之为0号核)上设计的。在以前应用场景还较为简单的情况下,这样的设计能极大简化系统复杂度,比较符合当时的需求。但是,上述应用场景对性能要求较高,且生物识别技术的处理逻辑比较复杂,对tee提出了很高的计算能力的要求,所以原先单核tee的实现方案就很难满足这些应用场景的性能要求了。从用户体验的角度,这样的单核方案可能导致不可接受的人脸解锁速度或人脸支付速度。为解决这个问题,op-tee(openportabletrustedexecutionenvironment)现有技术提供了一种简单的多核实现方案。如图1所示,它允许多个ca并行地向多个ta发起安全访问。具体的,每个ca可通过调用ree侧的tee客户端库(teeclientlib)访问tee驱动,然后tee驱动会发送安全监视调用(securemonitorcall,smc)指令;每个核都可以进入监视器模式,而且每个核的状态都是独立的;之后每个核进入安全模式,即tee,然后tee从一个线程池中寻找与ca对应的线程完成tee内的任务。但是,一方面,tee中的核数直接受限于ree侧调用ta的线程的数目,在核不够用的场景下,tee无法主动创建线程;另一方面,这个方案中并行的多个ta仅通过一个简单的线程池实现,没有提供统一的调度和负载均衡机制,多个ta的并行运行会对整个系统的性能和功耗造成影响;。技术实现要素:本申请提供一种多核并行方法、装置及计算机系统等,该方法可以运行在基于的终端设备或其它类型的计算机系统上。利用该方案,具备高性能要求的业务中的多个业务逻辑能够在tee中并行运行,而且tee侧能够主动加核,提高了tee侧并行的灵活性。以下从多个方面介绍本申请,容易理解的是,该以下多个方面的实现方式可互相参考。第一方面,本申请提供一种计算机系统,所述计算机系统上部署有富执行环境ree和可信执行环境tee,所述ree侧部署有ca,所述tee侧部署有ta。所述ca用于向所述ta发送调用请求以调用所述ta的功能,所述ta的功能包括多个子功能。所述tee侧还部署有线程创建模块、通知模块、以及tee调度模块,其中,所述线程创建模块用于在所述ta的调用下创建子线程,所述子线程用以实现所述多个子功能中的一个子功能;所述通知模块用于触发所述ree生成影子线程,所述影子线程的运行促使运行所述影子线程的核进入所述tee;所述tee调度模块用于将所述子线程调度到所述核上运行。ta例如为实现人脸识别功能的ta(简称人脸识别ta)、实现指纹识别功能的ta(简称指纹识别ta)等。可见,tee侧的ta主动创建一个或多个子线程(通常为多个子线程),并且每创建一个子线程就通过发送通知的方式触发ree侧生成一个影子线程,该影子线程的目的就是将运行影子线程的核带入tee侧,然后tee调度模块再将ta创建的子线程调度到该核上运行。通过这样的方法,tee侧的ta可以根据需求创建子线程并主动“拉”核以运行该子线程,一个或多个子线程与ta主线程一起运行,从而实现了tee侧多核并行。并且该主动“拉”核的方式相对于现有技术而言更加灵活,更加有效。在一些实现方式下,所述ree侧还部署有通知处理模块,则:所述通知模块具体用于在所述子线程被创建后产生通知,并将所述通知发送到所述通知处理模块;以及所述通知处理模块用于根据所述通知创建影子线程,所述影子线程在被运行时使得运行所述影子线程的核进入所述tee侧。通知例如为软中断。影子线程创建并运行之后会使得运行所述影子线程的核进入所述tee侧,这次是该影子线程“首次”进入所述tee侧。一段时间之后,该影子线程可能会退回到ree侧,也可能再次进入tee侧。需要说明的是,一个影子线程进入ree或tee侧可以理解运行该影子线程的核进入ree或tee,或者可以理解为运行该影子线程的核运行在ree或tee环境中或该核运行在ree或tee模式下。在一些实现方式下,所述tee调度模块还用于:记录所述影子线程与所述子线程的对应关系。具体的,所述tee调度模块为所述子线程创建第一线程标识,所述第一线程标识用于指示访问所述子线程的线程;并且在将所述子线程调度到所述核上运行之后将所述第一线程标识的值设置为所述影子线程的标识。“影子线程”可以认为是ree侧的一个虚拟ca,该虚拟ca来访问tee侧的子线程,通过记录影子线程的标识建立该影子线程与子线程的client/server关系。通过以上方案记录影子线程与子线程的对应关系,从而无论影子线程有没有被ree侧调度器调度到另一个核上,都能够保证当影子线程再次进入tee侧,与其对应的子线程还能被调度到运行影子线程的核上执行。在一些实现方式下,该第一线程标识包含在该子线程对应的线程控制块(threadcontrolblock,tcb)中,是tcb中的一个字段。在一些实现方式下,所述tee调度模块具体用于:当确定所述影子线程为首次进入所述tee时,将新创建的所述子线程调度到运行所述影子线程的核上运行。这里假设影子线程就是该子线程触发创建的,所以当确定所述影子线程为首次进入所述tee时,就将该子线程调度到所述运行所述影子线程的核上运行。在一些实现方式下,所述tee调度模块还用于:当确定所述影子线程为再次进入所述tee时,根据记录的所述影子线程与所述子线程的对应关系,将所述子线程调度到运行所述影子线程的当前核上运行。这里运行所述影子线程的“当前核”可能是原先的核,也可能是另一个核。在一些实现方式下,影子线程通过调用安全监视指令smc指令使得运行该影子线程的核进入tee侧,可能是首次进入,也可能是再次进入。“再次进入”指的是非首次进入。所述smc指令中包含一个参数,所述参数用于指示所述核是首次进入所述tee或再次进入所述tee。相应的,所述tee调度模块用于根据所述参数确定所述影子线程为再次进入所述tee。在一些实现方式下,所述tee调度模块还用于记录运行所述影子线程的当前核与所述影子线程的对应关系。这里运行所述影子线程的“当前核”可能是原先的核,也可能是另一个核。在一些实现方式下,所述tee调度模块具体用于在运行所述影子线程的当前核进入所述tee后,在所述当前核在全局状态数组中对应的元素处记录所述影子线程的标识,其中,所述全局状态数组包含n个元素,每个元素对应所述计算机系统的一个核;在运行所述影子线程的当前核离开所述tee后,将所述当前核在所述全局状态数组中对应的元素清空。通过记录运行所述影子线程的当前核与所述影子线程的对应关系,能够为调度提供数据准备,即知道当前是哪个核与哪个影子线程,从而根据影子线程的标识找到对应的子线程,并将子线程调度到该核上运行。在一些实现方式下,所述tee调度模块具体用于在运行所述影子线程的当前核进入所述tee后,在所述当前核在所述全局状态数组中对应的元素处记录所述影子线程的标识,并查找目标子线程,将所述目标子线程调度到所述当前核上运行,其中,所述目标子线程对应的第一线程标识为所述当前核在所述全局状态数组中对应的元素处所记录的标识。在一些实现方式下,影子线程退回ree侧可能是由中断触发的。在一些实现方式下,tee调度模块确定所述影子线程是首次进入tee,则将还未运行过的子线程(也可以理解为是还未与任何一个影子线程建立对应关系的子线程)调度到运行该影子线程的核上运行。该子线程可以由线程的运行状态指示出来,例如,将新创建的子线程设置为某种特定运行状态,这样一个核首次被拉入tee侧时就可以识别到该子线程,并运行该子线程。在另一些实现方式下,tee调度模块可以通过第一线程标识为空来识别新创建的(还未运行过)子线程。在一些实现方式下,tee调度模块确定所述影子线程并非首次进入tee时,确定目标子线程,并将所述目标子线程调度到运行所述影子线程的当前核上运行,其中,所述目标子线程的第一线程标识为所述影子线程的标识。在一些实现方式下,所述tee还部署有神经网络处理单元npu驱动。所述npu驱动用于在所述ta的一个或多个子线程的调用下驱动npu运行。npu是一种专用的神经网络处理器,用于实现大规模的复杂的并行运算,尤其是神经网络相关的运算。当某些ta需要使用复杂算法时,可以通过软件实现该算法,也可以像本申请提出的方法一样,调用npu加速。通过将npu驱动部署在tee侧,实现了在tee侧调用npu。同时,由于本申请提出的方案中tee侧可以多核并行运行,这样为npu在tee侧的使用奠定了良好的基础,从而提高了系统的整体性能。在一些实现方式下,所述tee还部署有安全存储单元和硬件驱动单元,所述安全存储单元和所述硬件驱动单元仅能被tee访问;所述硬件驱动单元用于在所述ta的一个或多个子线程的调用下访问对应的硬件;所述安全存储单元用于存储所述硬件采集的数据。这里的安全存储单元理解为一块存储区域,由于仅能被tee访问,所以是安全的。在一些实现方式下,所述安全存储单元为缓存,固定大小的缓存或非固定大小的缓存都可以,非固定大小的缓存也可以简称为动态缓存。在一些实现方式下,所述硬件驱动单元为相机驱动,则其对应的硬件为相机。ta在tee侧直接访问硬件,并将硬件采集的数据存放到tee侧存储区域中,进一步保证了ta使用数据的过程以及使用数据本身的安全性。例如,若针对3d(3dimensions)人脸识别ta,可以通过本申请提供的方法,将相机驱动部署在tee侧,并将相机采集的人脸图像存放在tee侧,ta可以直接在tee侧驱动相机,访问人脸图像,这样就进一步保证了整个人脸识别过程的安全性。由于模块划分方式无法穷举,本申请提供的第一方面中的模块仅为举例,不应视为限制本申请的范围。所有在tee侧部署的模块执行的方法也可以看作是tee执行的方法,相应的,所有在ree侧部署的模块执行的方法也可以看作是ree执行的方法。本申请中tee和ree执行的方法,除了某些硬件执行的步骤,通常可以认为是tee和ree的操作系统或应用执行的方法。第二方面,本申请提供一种在可信执行环境tee侧实现多核并行的方法,该方法运行于多核的计算机设备上。该方法包括:tee创建子线程,所述子线程用于实现tee侧部署的ta的一个子功能;所述tee触发富执行环境ree生成影子线程,所述影子线程的运行促使运行所述影子线程的核进入tee;所述tee将创建的所述子线程调度到所述核上执行。在一些实现方式下,所述tee在所述子线程被创建后产生通知(例如软中断),并将所述通知发送到所述ree,以使得所述ree根据所述通知创建所述影子线程。在一些实现方式下,所述方法还包括:所述tee记录所述影子线程与所述子线程的对应关系。在一些实现方式下,所述tee记录所述影子线程与所述子线程的对应关系,包括:所述tee将所述影子线程的标识记录在所述子线程的线程控制块tcb中。在一些实现方式下,所述方法还包括:当所述影子线程的运行再次促使运行所述影子线程的当前核进入所述tee(也可以理解为所述影子线程再次进入所述tee)之后,所述tee根据记录的所述影子线程与所述子线程的对应关系,将所述子线程调度到运行影子线程的当前核上运行。这里的“当前核”可能是之前的核,也可能是另一个核,因为影子线程可能被调度到不同的核上运行。在一些实现方式下,所述方法还包括:所述tee记录运行所述影子线程的当前核与所述影子线程的对应关系。具体的,在运行所述影子线程的当前核进入所述tee后,在所述当前核在全局状态数组中对应的元素处记录所述影子线程的标识,其中,所述全局状态数组包含n个元素,每个元素对应所述计算机系统的一个核;在运行所述影子线程的当前核离开所述tee后,将所述当前核在所述全局状态数组中对应的元素处清空。在一些实现方式下,所述方法还包括:所述tee通过调用部署在tee的神经网络处理单元npu驱动实现对npu的调用。在一些实现方式下,所述方法还包括:所述tee通过部署在tee侧的硬件驱动单元访问对应的硬件,并将硬件采集的数据存储在部署在tee侧的安全存储单元中。在一些实现方式下,所述ta为实现人脸识别功能的ta或为实现指纹识别功能的ta,或为同时实现人脸识别和指纹识别功能的ta。人脸识别具体可以为3d人脸识别。第三方面,本申请提供一种计算机系统,所述计算机系统包括存储器和处理器,所述存储器用于存储计算机可读指令(或者称之为计算机程序),所述处理器用于读取所述计算机可读指令以实现前述任意实现方式提供的方法。第四方面,本申请提供一种计算机存储介质,该计算机存储介质可以是非易失性的。该计算机存储介质中存储有计算机可读指令,当该计算机可读指令被处理器执行时实现前述任意实现方式提供的方法。第五方面,本申请提供一种计算机程序产品,该计算机程序产品中包含计算机可读指令,当该计算机可读指令被处理器执行时实现前述任意实现方式提供的方法。可见,本申请提供的tee侧多核并行方法、装置及计算机系统,能够在tee侧实现多个任务的并行执行,例如一个ta的多个子任务的并行执行。这样,一些安全性要求较高的复杂业务,例如3d人脸识别等,就可以全部被放在tee侧,同时又能被并行执行,从而既能满足这类型业务的安全需求,又能满足性能需求。进一步的,通过tee侧触发ree侧生成影子线程的方式实现了主动“拉”核进入tee侧,提高了tee侧并行的灵活性。进一步的,在提供并行机制的基础上,通过记录ree侧ca和tee侧ta之间的访问对应关系(即ca-ta调度组),保证了ca(包括影子线程)和对应的ta(包括ta的子线程)总能够在同一个核上运行,从而保证ree侧ca负载的计算准确性,为实现系统整体的负载均衡提供了良好的基础。进一步的,通过在tee侧引入npu,使得在并行运行的基础上,再叠加npu的加速能力,进一步提高了业务执行效率。进一步的,通过将业务所需数据存储在tee侧安全的存储介质中,能够进一步保证该数据的安全性,从而保证业务的安全性。附图说明为了更清楚地说明本申请提供的技术方案,下面将对附图作简单地介绍。显而易见地,下面描述的附图仅仅是本申请的一些实施例。图1为现有技术提供的tee侧多核方案示意图;图2为本申请一实施例提供的终端设备的结构示意图;图3为本申请一实施例提供的tee侧多核并行方案的部署示意图;图4a和图4b为本申请一实施例提供的tee侧多核并行方案的方法示意图;图5为本申请形成的多个ca-ta调度组的示意图;图6为本申请一实施例提供的实现人脸/指纹双重认证的终端系统示意图图7为本申请一实施例提供的支付方案的示意图;图8为本申请一实施例提供的一种计算机系统的结构示意图;图9为本申请一实施例提供的一种神经网络处理单元的结构示意图。具体实施方式在介绍本实施例之前,首先介绍本实施例中可能出现的几个概念。应理解的是,以下的概念解释可能会因为本实施例的具体情况有所限制,但并不代表本申请仅能局限于该具体情况,以下概念的解释伴随不同实施例的具体情况可能也会存在差异。多核调度:具有多核处理器的计算机系统提供的支持任务在多个核上创建、调度、迁移、销毁等操作的调度机制。负载均衡:多核处理器上并行的多个任务需要通过平衡任务在不同核上的分布来做系统负载的均衡,达到系统整体的性能和功耗目标。任务:在本申请中是一个泛指的概念,计算机需要实现的事情都可以称之为任务,例如进程、线程、子线程、ca、ta、某种服务等。线程:有时也被称为轻量级进程(lightweightprocess,lwp),是程序执行流的最小单元。线程的实体包括程序、数据和tcb。线程是动态概念,它的动态特性由线程控制块(threadcontrolblock,tcb)描述。tcb可以包括以下信息:线程状态、当线程不运行时,被保存的现场资源、一组执行堆栈、存放每个线程的局部变量主存区、访问同一个进程中的主存和其它资源等。本实施例对tcb做出了改变。中断请求(interruptrequest,irq):中断请求一般指的是硬件或软件产生的一种事件,硬件将该事件发送到处理器,当处理器接收到该事件时,暂时停止当前程序的执行转而执行该事件对应的程序。中断请求包含软中断和硬中断,硬件(例如网卡、硬盘、键盘、鼠标等)产生的对处理器的中断通常称之为硬中断、硬件中断(有时也简称为中断),而软中断一般由处理器上当前运行的进程产生。软中断的处理过程模拟了硬中断的处理过程,当某一软中断发生后,首先需要设置对应的中断标记位,触发中断事务,然后唤醒守护线程去检测中断状态寄存器,如果通过查询发现有软中断发生,那么通过查询软中断向量表调用相应的软中断服务程序,这就是软中断的处理过程。软中断与硬中断不同的地方是从中断标记到中断服务程序的映射过程。在硬中断发生之后,处理器需要将硬中断请求通过向量表映射成具体的服务程序,这个过程是硬件自动完成的,但是软中断不是,其需要守护线程去实现这一过程,这也就是软件模拟的中断,故称之为软中断。cfs(completelyfairscheduler,cfs)调度器:操作系统的内核中的一个被实现为调度模块的完全公平调度程序。图2为本实施例提供的终端设备的结构示意图。该终端设备可以是台式机、笔记本、手机、平板电脑、智能手表、智能手环等。该终端设备上部署有系统,该系统包含ree和tee,ree和tee上分别运行有操作系统和一种tee操作系统(例如开源的操作系统)。操作系统和teeos又分为用户态和内核态。ree侧的用户态内部署了多个ca,例如人脸识别ca、指纹识别ca等。tee侧的用户态内部署了多个可信应用,例如指纹识别ta、人脸识别ta等。ree侧的内核态内部署了组件,tee侧的内核态则部署了可信核心组件。ree中的ca与tee中的ta构成了类似client/server的架构,ca作为客户端,ta作为服务端,由ca端发起访问操作,两者通过ree通信代理、硬件层的消息通道以及tee通信代理交互数据,三者为ca和ta建立了安全的通信通道,一定程度上确保了数据传输的安全性。具体的,ca调用tee客户端api(applicationprograminterface)来和对应的ta实现通信;ta调用tee内部api(internalapi)来使用tee提供的编程资源实现相关功能。图3为本实施例提供的tee侧多核并行方案的部署示意图。本实施例以人脸识别ca和人脸识别ta为例介绍该技术方案。人脸识别ca和人脸识别ta301分别部署在ree侧和tee侧,二者协同完成人脸验证等人脸识别服务,广泛应用于终端解锁、应用登陆、金融支付等场景。本实施例中人脸识别ta301又可以包括特征提取、特征比对、活体检测以及特征存储这4个子功能。在其它一些实施例中,人脸识别ta可以包括更多、更少或其它类型的子功能,本申请对此不做限定。进一步的,tee侧部署有tee调度模块305、线程创建模块(例如libthread)302、通知模块303、以及tee调度模块305;ree侧部署有通知处理模块304。监视器(monitor)为系统提供的现有模块,用于ree到tee的切换。线程创建模块302用于在人脸识别ta301的调用下创建子线程,并且调用通知模块303产生软中断;通知模块303用于产生软终端并将该软中断发送给ree侧的通知处理模块,通知处理模块304用于接收该软中断,并创建影子线程,创建后的影子线程被调度到一个核上运行。之后影子线程通过发送smc指令进入tee侧,相当于运行该影子线程的核进入tee侧(即安全模式)。本实施例中在硬件层还部署有安全硬件和非安全硬件,其中安全硬件指的是仅能被tee访问的硬件,非安全硬件指的是既能被ree访问又能被tee访问的硬件,或仅能被ree访问的硬件。图4a和图4b为本实施例提供的tee侧多核并行方案的方法示意图。下面基于图3和图4a-4b详细介绍方案的实现过程。s101、人脸识别ca通过提供的smc指令向tee侧的人脸识别ta301发送调用请求。该过程为现有技术,本申请对此不再详述,为了方便读者理解,可以这样理解该过程:通过提供的smc指令,运行人脸识别ca的核进入到tee侧(安全模式),并开始在安全模式下运行人脸识别ta以实现人脸识别ta的功能。s102、人脸识别ta301接收到该调用请求之后,创建1个子线程t1。具体的,人脸识别ta301通过线程创建模块302(例如libthread)中的pthread_create接口创建这个子线程t1。在本实施例中人脸识别ta最终会创建4个子线程t1-t4。该4个子线程分别处理特征提取、特征比对、活体检测以及特征存储这4个子功能。本实施例以1个子线程的创建和运行为例进行介绍,其余3个子线程的创建和运行过程可参考这个子线程进行创建和运行。s103、线程创建模块302在创建完子线程t1后调用通知模块303产生一个软中断,该软中断被发送到ree侧的通知处理模块304。s103a、tee调度模块305为这个子线程t1创建对应的任务控制数据结构,即线程控制块(threadcontrolblock,tcb)示例性的,该tcb的结构如下所示:其中,“任务”指的是子线程,每个子线程的tcb都包含运行状态、调度策略、tcb名称等。每个字段前面的英文标识符表示的是字段的值的类型。新创建的子线程,其运行状态会被设置到一个特定的运行状态,例如state=000,表示等待新的核进来执行它。本实施例提供的tcb中包含一个ca字段,该ca字段为本申请提出的“第一线程标识”的一种实现。该ca字段的值可以默认为0。s104、通知处理模块304收到该软中断之后会生成一个线程s1,该线程s1的进程标识(processidentification,pid)=s1,该线程s1通过发送smc指令进入tee侧。该线程在本实施例的下文中称之为影子线程,其本质和普通线程一样,只是实现的功能在本实施例中具有特殊性。对于人脸识别ta301而言,访问它的ca只有一个就是人脸识别ta,但在本实施例中人脸识别ta301不是由一个线程完成,而是由多个线程共同完成,所以影子线程可以理解为访问子线程的“虚拟ca”。容易理解的是,这里所谓“线程进入tee侧”,也就是“运行该线程的核进入tee侧”,亦或者说“运行该线程的核进入tee模式(或安全模式)”等。软件涉及一些抽象描述,trustzone技术也不例外,针对同样的情形可能有不同的描述。需要说明的是,本申请中的“核”指的是最小的物理处理单元。具体的,影子线程发送的smc指令中可以包含一个参数,该参数用于指示该影子线程是第一次进入tee侧。例如,该参数可以为firstin,当firstin=true时表明该影子线程是第一次进入tee侧,当firstin=false时表明该影子线程非第一次进入tee侧;或者影子线程仅在第一次发送smc指令时包含一个参数,其它时候不包含该参数,这样接收者也可以通过判断存在或不存在该参数来确定影子线程是否是第一次进入tee侧。s105、影子线程s1进入tee侧之后,也就是说运行影子线程s1的核进入tee侧之后,tee调度模块305在全局状态数组中该核的位置记录该影子线程s1的pid。示例性的,全局状态数组ctx_map_t[cpu_num]如下所示:其中,“cpu”指的就是前文所说的“核”。本实施例中运行影子线程s1的核为标号为1的核(下文简称为核1),那么tee调度模块305就在ctx_map_t[1]的ca字段处记录影子线程s1的pid,即ca=s1,表明此次进入tee的(虚拟)ca为影子线程s1。s106、tee调度模块305确定影子线程s1首次进入tee侧时,就会去找处于特定运行状态即state=000的子线程t1,将该子线程t1调度到影子线程的当前核即核1上运行。s107、进一步的,tee调度模块305将ctx_map_t[1]的ca字段的值(即s1)赋值到子线程t1对应的tcb的ca字段中。这样,影子线程s1和子线程t1分别作为ca和ta的一个ca-ta组就建立完成了。以上步骤s101-s107为影子线程首次创建和首次进入tee侧的过程。重复执行上述步骤s102-s103、s103a、以及s104-s107就可以创建另外3个子线程和对应的另外3个影子线程,并形成另外3个ca-ta组。这样,在tee侧就有多个核在同时运行,同时执行人脸识别ta301的4个子功能,极大的提高人脸识别ta的执行效率。进一步的,通过以上方法,实现了tee主动“拉”核进入tee侧,使得tee侧即使作为被动操作系统也实现了子线程的主动执行,从而提高了tee侧多核并行的灵活性。影子线程s1和普通ca一样,在运行的过程中可能被中断并退回到ree侧,在ree侧可能会被调度到其它核上,此时为了保证子线程t1仍然和影子线程s1在同一个核上运行,参考图4b,需要执行以下操作。s108、当影子线程(即核1)退回到ree侧后,tee调度模块305将ctx_map_t[1]的ca字段清除。s109、当影子线程s1重新进入tee侧时,tee调度模块305将全局状态数组中对应的位置的ca字段设置为s1。具体的,再次进入的影子线程s1若是还在核1上运行,那么tee调度模块305仍然将ctx_map_t[1]的ca字段设置为s1;若影子线程s1在ree侧被ree侧的调度模块(例如cfs调度器)调度到另一个核上运行,例如核2,那么tee调度模块305将ctx_map_t[2]的ca字段设置为s1,s110、tee调度模块305查找目标子线程,将该目标子线程调度到当前核上运行。该目标子线程需要满足如下条件:其tcb中的ca字段与全局状态数组中当前核对应的ca字段相同,在本实施例中即两者均为s1。可见,在本实施例中,该目标子线程就是子线程t1,因此子线程t1被调度到当前核上运行。“当前核”根据步骤s109的描述可能是核1,也可能是核2。容易理解的是,目标子线程在本实施例中处于可执行状态才可以被调度到核上执行,若是处于某种不可执行状态,则tee调度模块305可以根据调度策略让核1或核2等待或执行其它可执行的进程,本申请对此不做限定。图5示出了本申请提供的方法实现之后形成的多个ca-ta调度组。从图中可以看出,人脸识别ta主线程和人脸识别ca形成一个调度组,其它的4个子线程分别与影子线程s1-s4形成4个调度组,这5个调度组会和其它应用一起参与到cfs调度器的负载均衡调度过程中。可见,通过本实施例提供的方案,即使影子线程被调度到其它核上运行,也总能保证tee侧与之对应的子线程能够被调度到同一个核上运行,从而将影子线程和对应的子线程作为一个ca-ta调度组进行统一调度,保证ca负载计算的准确性。接下来,本申请介绍另一个场景,该场景需要人脸识别和指纹识别的双重认证。在该场景下,本申请提供的多核并行方案仍然能够提供ca和ta的统一调度。图6为本实施例提供的实现人脸/指纹双重认证的终端系统示意图。双重认证实现方案描述如下。ree侧的人脸识别ca608和指纹识别ca607分别向tee侧发起请求。发起请求的方式是通过trustzone驱动调用监视器进入监视模式,然后再从监视模式进入tee模式。之后,ta管理器609会根据请求中携带的信息确定分别由人脸识别ta601和指纹识别ta604来处理人脸识别ca的请求和指纹识别ca的请求。容易理解的是,人脸识别ca和指纹识别ca实质是两个线程,分别在两个核上运行,在前述步骤之后,这两个核都进入tee侧。tee调度模块610在全局状态数组中与前述两个核对应的位置分别记录人脸识别ca和指纹识别ca的pid,并且在人脸识别ta601的tcb的ca字段和指纹识别ta604的tcb的ca字段中分别记录人脸识别ca608和指纹识别ca607的pid。这样,就建立起两对ca-ta调度组,tee侧的ta发生的负载就可以与对应的ca捆绑为一个负载计算单元。另外,ta通常还会请求其它的服务进程和/或驱动进程来完成,这些被间接访问的进程,也需要建立ca-ta调度组。人脸识别ta601通过发送消息的方式调用权限管理服务602,权限管理服务602调用相机驱动603;类似的,指纹识别ta604调用权限管理服务605,权限管理服务605调用指纹驱动。在本实施例中,权限管理服务602和权限管理服务605指同一个服务,在其他实施例中,这两个服务也可以是两个独立的服务。以上“调用”本质上是进程间通信(interprogresscommunication,ipc)。tee内的ipc机制通过消息来完成,在本实施例中消息传递时将消息发起者的tcb中的ca字段的值传递给消息接收者,因此ta的调用链上的所有服务进程也相应的被拉入对应的ca-ta调度组,如图5所示本实施例形成两个调度组。当一个服务进程处理完一个ta的消息后收到另一个ta的消息时,服务进程又会随着新消息更新ca值,而被带到另一个ca-ta组。如图所示,权限管理服务602可以从人脸识别ca-ta调度组切换到指纹识别ca-ta调度组。具体的,人脸识别ta601发送消息给权限管理服务602,并将该人脸识别ta601的tcb中的ca字段的值,即人脸识别ca的pid,传递给权限管理服务602,权限管理服务602的tcb中的ca字段的值也被设置为人脸识别ca601的pid。之后权限管理服务602又被指纹识别ta604调用,权限管理服务602(相当于图中的权限管理服务605)的tcb中的ca字段的值重新被设置为指纹识别ca的pid。以一个ca-ta调度组为一个调度单元,被ree侧的cfs调度器来做统一的调度,该调度可以是由负载均衡需求触发的。例如,ca被cfs调度器调度到另一个核上,那么同一个调度组的ta以及ta所调用的其他进程也会被tee调度模块610调度到该核上。因此,通过本申请提供的方法,可以实现多ta并行时,ca和对应ta的统一调度,从而保证ca负载的计算准确性。举例来说,如果人脸识别ca608被调度到另一个核上,而人脸识别ta601没有被调度到该核上,该核上运行的其它线程的负载就会被计算到人脸识别ca608的负载中,而这是不正确的。进一步的,此场景中也会存在类似前述s108的情况。例如,当某个中断请求(interuptrequest,irq)发生时,执行人脸识别ta601的核会被中断并退到ree侧去响应该中断请求,退出时tee调度模块610会将全局状态数组中该核对应的ca字段清除。若人脸识别ca608被ree侧cfs调度器调度到新的核上运行,之后又进到tee侧时,tee调度模块610会将全局状态数组中该新的核对应的ca字段设置为人脸识别ca608的pid。tee调度模块610根据该人脸识别ca608的pid查找目标任务,该目标任务的tcb字段中的ca值也为人脸识别ca608的pid。根据之前实施例的描述可以得知该目标任务包括人脸识别ta601、相机驱动603(进程)、权限管理服务602(进程)中的一个或多个。权限管理服务可能不属于该目标任务,因为其ca字段可能因为指纹识别ta604的调用而被修改。之后,tee调度模块610将该目标任务调度到该新的核上运行,从而完成ta以及ta调用的服务在核间的迁移,实现ca-ta调度组的统一迁移,始终保证ca-ta调度组中包含的任务在同一个核上运行。请参阅图7,为本实施例提供的支付方案的示意图。该支付方案除了应用前述实施例提供的tee多核并行的方法之外,还进一步利用了神经网络处理单元以及其它方式来提高安全性和性能。该支付方案包含多个业务逻辑:支付应用701以及支付应用所触发的人脸识别ca702、人脸识别ta708、相机服务703等,其中人脸识别ta708又包含4个子业务逻辑:特征提取、活体检测、特征比对以及特征存储。该方案涉及的硬件包括相机706、神经网络处理单元(neuronalprocessingunit,npu)715、存储器714、中央处理器(未示出)等硬件,其中,tee侧部署有相机706、npu715和存储器714的驱动。ree侧的相机服务703、人脸识别ca702和npu服务ca704都是只负责业务的发起和一些非关键的业务逻辑处理。需要说明的是,在本实施中的tee侧部署有相机706的驱动,但在ree侧也可以部署相机706的驱动,以便于ree侧的应用或服务通过该驱动访问相机706。具体的,支付应用701发起人脸支付认证请求后,通过ree的人脸识别ca702调用tee侧的人脸识别ta708,从而发起人脸识别流程。人脸识别ta708通过tee侧的相机驱动705来访问相机706。具体的,人脸识别ta708可以通过图像信号处理器(imagesignalprocessor,isp)驱动isp来访问相机706。之后,相机706采集的图像被存放到图像安全缓存(buffer)707中,该图像安全buffer707的访问地址被返回给人脸识别ta708。该图像安全buffer707可以理解为一个位于tee侧的软件,也可以理解为一块仅能供tee访问的存储空间(例如内存)。人脸识别ta708会根据地址访问图像安全buffer707,根据预存的人脸模板等信息对采集的图像执行特征提取、活体检测、特征比对、特征存储等算法。现有技术通常仅在ree侧部署相机驱动,并将人脸识别ta的部分功能,例如特征提取放到ree侧,特征提取功能在ree侧调用相机驱动并实现图像采集,但是通过本实施例提供的上述方式,人脸识别ta708可以通过部署在tee侧的相机驱动705直接访问相机706,并将图像缓存在tee侧的图像安全缓存707中,从而保证相机的使用和数据的保存都在tee侧完成,进一步保证了数据的安全性。在执行算法的过程中,人脸识别ta708会通过tee侧的npu服务ta709来访问npu驱动712,进而通过npu驱动712调用npu715来提升处理速度。最终,支付应用701会通过它的支付应用ta710来获取人脸识别的最终结果,比如支付宝应用通过国际金融认证联盟(internetfinanceauthentiationalliance,ifaa)ta来获取人脸识别的最终结果。人脸模板是预先录入到终端设备中,支付时采集到的人脸图像需要与人脸模板匹配才能完成支付应用,所以人脸模板的安全性很重要。为确保人脸模板不被篡改,本实施例中将人脸模板通过tee侧的存储服务713存储到存储器714中,该存储器714可以是具备一定安全特性的存储器,例如回滚保护存储块(replayprotectedmemoryblock,rpmb),该存储器可以设置为仅可以被tee侧服务访问,进一步提高存储器的安全性,从而保证人脸模板的安全性,进而保证人脸识别过程的安全性。利用本申请提供的方法实现的人脸识别方案,既能满足安全性,又能满足高性能需求。不同于现有技术为了提高人脸识别的效率,将人脸识别过程中包含的部分关键业务逻辑放到ree侧实现(例如活体检测在ree侧实现),本申请提供的方案将人脸识别过程中包含的关键业务逻辑全部放到tee侧实现,通过多核并行的方式提高人脸识别过程的效率以满足性能要求。与此同时,人脸识别过程中产生或利用的数据(例如图像等)都会存储在tee侧,从而利用tee的安全保障机制进一步提高人脸识别的安全性。请参考图8,为本实施例提供的一种计算机系统的结构示意图。该计算机系统可以为终端设备。如图所示,该计算机系统包括通信模块810、传感器820、用户输入模块830、输出模块840、处理器850、音视频输入模块860、存储器870以及电源880。进一步的,本实施例提供的计算机系统还可以包括npu890。通信模块810可以包括至少一个能使该计算机系统与通信系统或其他计算机系统之间进行通信的模块。例如,通信模块810可以包括有线网络接口,广播接收模块、移动通信模块、无线因特网模块、局域通信模块和位置(或定位)信息模块等其中的一个或多个。这多种模块均在现有技术中有多种实现,本申请不一一描述。传感器820可以感测系统的当前状态,诸如打开/闭合状态、位置、与用户是否有接触、方向、和加速/减速,并且传感器820可以生成用于控制系统的操作的感测信号。用户输入模块830,用于接收输入的数字信息、字符信息或接触式触摸操作/非接触式手势,以及接收与系统的用户设置以及功能控制有关的信号输入等。用户输入模块830包括触控面板和/或其他输入设备。输出模块840包括显示面板,用于显示由用户输入的信息、提供给用户的信息或系统的各种菜单界面等。可选的,可以采用液晶显示器(liquidcrystaldisplay,lcd)或有机发光二极管(organiclight-emittingdiode,oled)等形式来配置显示面板。在其他一些实施例中,触控面板可覆盖显示面板上,形成触摸显示屏。另外,输出模块840还可以包括音频输出模块、告警器以及触觉模块等。音视频输入模块860,用于输入音频信号或视频信号。音视频输入模块860可以包括摄像头和麦克风。电源880可以在处理器850的控制下接收外部电力和内部电力,并且提供系统的各个组件的操作所需的电力。处理器850包括一个或多个处理器,例如,处理器850可以包括一个中央处理器和一个图形处理器。中央处理器在本申请中具有多个核,属于多核处理器。这多个核可以集成在同一块芯片上,也可以各自为独立的芯片。存储器870存储计算机程序,该计算机程序包括操作系统程序872和应用程序871等。典型的操作系统如微软公司的windows,苹果公司的macos等用于台式机或笔记本的系统,又如谷歌公司开发的基于的安卓系统等用于移动终端的系统。前述实施例提供的方法可以通过软件的方式实现,可以认为是操作系统程序872的具体实现。存储器870可以是以下类型中的一种或多种:闪速(flash)存储器、硬盘类型存储器、微型多媒体卡型存储器、卡式存储器(例如sd或xd存储器)、随机存取存储器(randomaccessmemory,ram)、静态随机存取存储器(staticram,sram)、只读存储器(readonlymemory,rom)、电可擦除可编程只读存储器(electricallyerasableprogrammableread-onlymemory,eeprom)、可编程只读存储器(programmablerom,prom)、回滚保护存储块(replayprotectedmemoryblock,rpmb)、磁存储器、磁盘或光盘。在其他一些实施例中,存储器870也可以是因特网上的网络存储设备,系统可以对在因特网上的存储器870执行更新或读取等操作。处理器850用于读取存储器870中的计算机程序,然后执行计算机程序定义的方法,例如处理器850读取操作系统程序872从而在该系统运行操作系统以及实现操作系统的各种功能,或读取一种或多种应用程序871,从而在该系统上运行应用。存储器870还存储有除计算机程序之外的其他数据873。npu890作为协处理器挂载到主处理器850上,用于执行主处理器850给它分配的任务。在本实施例中,npu890可以被人脸识别ta的一个或多个子线程调用从而实现人脸识别中涉及的部分复杂算法。具体的,人脸识别ta的子线程在主处理器850的多个核上运行,然后主处理器850调用npu890,npu890实现的结果再返回给主处理器850。以上各个模块的连接关系仅为一种示例,本申请任意实施例提供的方法也可以应用在其它连接方式的终端设备中,例如所有模块通过总线连接。图9是本实施例提供的一种npu900的结构示意图。npu900与主处理器和外部存储器相连。npu900的核心部分为运算电路903,通过控制器904控制运算电路903提取存储器中的数据并进行数学运算。在一些实现中,运算电路903内部包括多个处理引擎(processengine,pe)。在一些实现中,运算电路903是二维脉动阵列。运算电路903还可以是一维脉动阵列或者能够执行例如乘法和加法这样的数学运算的其它电子线路。在另一些实现中,运算电路903是通用的矩阵处理器。举例来说,假设有输入矩阵a,权重矩阵b,输出矩阵c。运算电路903从权重存储器902中取矩阵b相应的数据,并缓存在运算电路903的每一个pe上。运算电路903从输入存储器901中取矩阵a数据与矩阵b进行矩阵运算,得到的矩阵的部分结果或最终结果,保存在累加器(accumulator)908中。统一存储器906用于存放输入数据以及输出数据。权重数据直接通过存储单元访问控制器905(例如directmemoryaccesscontroller,dmac)被搬运到权重存储器902中。输入数据也通过存储单元访问控制器905被搬运到统一存储器906中。总线接口单元910(businterfaceunit,biu)用于axi(advancedextensibleinterface)总线与存储单元访问控制器905和取指存储器909(instructionfetchbuffer)的交互。总线接口单元910用于取指存储器909从外部存储器获取指令,还用于存储单元访问控制器905从外部存储器获取输入矩阵a或者权重矩阵b的原数据。存储单元访问控制器905主要用于将外部存储器中的输入数据搬运到统一存储器906或将权重数据搬运到权重存储器902中或将输入数据数据搬运到输入存储器901中。向量计算单元907通常包括多个运算处理单元,在需要的情况下,对运算电路903的输出做进一步处理,如向量乘、向量加、指数运算、对数运算、和/或大小比较等等。在一些实现中,向量计算单元907能将经处理的向量存储到统一存储器906中。例如,向量计算单元907可以将非线性函数应用到运算电路903的输出,例如累加值的向量,用以生成激活值。在一些实现中,向量计算单元907生成归一化的值、合并值,或二者均有。在一些实现中,经处理的向量能够用作运算电路903的激活输入。与控制器904连接的取指存储器909用于存储控制器904使用的指令。统一存储器906,输入存储器901,权重存储器902以及取指存储器909均为on-chip存储器。图中的外部存储器与该npu硬件架构独立。需要说明的是,本实施例提供的方法也可以应用于非终端的计算机设备,例如云端服务器。需要说明的是,以上实施例多以人脸识别方案为例介绍,但本申请提出的方法显然可以应用于除人脸识别之外的其它方案,本领域技术人员根据本申请提供的实现方式容易想到其它方案的类似实现方式。需要说明的是,前述实施例中提出模块或单元的划分仅作为一种示例性的示出,所描述的各个模块的功能仅是举例说明,本申请并不以此为限。本领域普通技术人员可以根据需求合并其中两个或更多模块的功能,或者将一个模块的功能拆分从而获得更多更细粒度的模块,以及其他变形方式。以上描述的各个实施例之间相同或相似的部分可相互参考。本申请中的“多个”若无特殊说明,指两个或两个以上,或“至少两个”。本申请中的“a/b”包括三种情况:“a”、“b”和“a和b”。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本申请提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。以上所述,仅为本申请的一些具体实施方式,但本申请的保护范围并不局限于此。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1