CN114879962A - 一种实现批量系统调用的方法及装置 - Google Patents

一种实现批量系统调用的方法及装置 Download PDF

Info

Publication number
CN114879962A
CN114879962A CN202110163179.2A CN202110163179A CN114879962A CN 114879962 A CN114879962 A CN 114879962A CN 202110163179 A CN202110163179 A CN 202110163179A CN 114879962 A CN114879962 A CN 114879962A
Authority
CN
China
Prior art keywords
kernel
batch system
batch
calling
instruction
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202110163179.2A
Other languages
English (en)
Other versions
CN114879962B (zh
Inventor
高欣
文羽中
方彬
何海
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN202110163179.2A priority Critical patent/CN114879962B/zh
Priority claimed from CN202110163179.2A external-priority patent/CN114879962B/zh
Priority to PCT/CN2022/071747 priority patent/WO2022166553A1/zh
Priority to EP22748832.7A priority patent/EP4276603A1/en
Publication of CN114879962A publication Critical patent/CN114879962A/zh
Priority to US18/365,312 priority patent/US20230376289A1/en
Application granted granted Critical
Publication of CN114879962B publication Critical patent/CN114879962B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/47Retargetable compilers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/441Register allocation; Assignment of physical memory space to logical memory space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/457Communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/545Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本申请公开了一种实现批量系统调用的方法及相关装置,该方法包括:将可执行程序加载到用户态的虚拟地址空间,该可执行程序是由批量系统调用的源码编译得到,且包含批量系统调用的抽象语法树AST数据,然后通过调用第一指令调用内核,使得内核根据用户态的虚拟地址空间中的AST数据生成二进制代码,以供批量系统调用。由于AST这种数据结构难以被插入恶意的数据,所以供批量系统调用的二进制代码中难以被插入恶意的代码,从而避免恶意的代码造成内核在运行批量系统调用的二进制代码时出现错误或时延过长,提高了批量系统调用的安全性。

Description

一种实现批量系统调用的方法及装置
技术领域
本申请实施例涉及操作系统技术领域,尤其涉及一种实现批量系统调用的方法及装置。
背景技术
微内核是目前实时操作系统领域广泛使用的内核架构。其特点是复杂性较小,安全性较高,且具备实时性。
在微内核架构中,系统程序与应用程序类似,也运行在用户态。因此,运行在用户态的应用程序需要通过内部进程通信(Inter-Process Communication,IPC)来调用运行在用户态的系统程序。应用程序在运行过程中,往往会多次调用运行在用户态的系统程序,而对系统程序的多次调用会导致频繁的上下文切换,进而使得操作系统的性能下降。
目前,主要的解决方法主要是将多个系统调用(System Call)打包成批量系统调用(Batch System Call),通过批量系统调用一次性实现多次系统调用,从而减少IPC的次数,提高操作系统的性能。
为了实现批量系统调用,会先将实现批量系统调用的二进制代码注册到内核中;当需要进行批量系统调用时,则由内核执行该二进制代码。
由于二进制代码容易中容易被插入恶意的代码,所以安全性较差。
发明内容
本申请实施例提供了一种实现批量系统调用的方法及相关装置,该方法能够提高批量系统调用的安全性。
本申请实施例第一方面提供了一种实现批量系统调用的方法,包括:编译器将批量系统调用的源码编译成可执行程序,该源码可以是C源码或领域特定语言(DomainSpecific Language,DSL)源码,该可执行程序包含批量系统调用的抽象语法树AST数据,其中,AST是源代码语法结构的一种抽象表示;加载器将该可执行程序加载到用户态的虚拟地址空间,该可执行程序是由批量系统调用的源码编译得到,且包含批量系统调用的抽象语法树AST数据;加载器调用第一指令,第一指令用于调用内核从用户态的虚拟地址空间中读取所述AST数据,并基于所述AST数据生成存储在内核态的虚拟地址空间的,用于实现所述批量系统调用的二进制代码;这样,在批量系统调用时,便可以由内核执行二进制代码以实现批量系统调用。
由于AST这种数据结构难以被插入恶意的数据,所以基于批量系统调用的AST数据生成的批量系统调用的二进制代码中难以被插入恶意的代码,避免恶意的代码造成内核在运行批量系统调用的二进制代码出现错误或时延过长,从而提高了批量系统调用的安全性。
作为一种实现的方式,可执行程序还包含批量系统调用的调用桩代码,其中,调用桩代码可以理解为代替批量系统调用的二进制代码的代码;基于此,该方法还包括:调用所述调用桩代码中的第二指令,该第二指令用于调用内核执行用于实现批量系统调用的二进制代码。
在该实现方式中,通过调用桩代码实现对实现批量系统调用。
作为一种实现的方式,在调用第一指令之后,方法还包括:接收对于第一指令的调用结果,调用结果中包含批量系统调用的二进制代码的标识;通过该标识能够指示批量系统调用的二进制代码,所以可以将该标识作为第二指令的参数,即第二指令中携带标识,用于调用内核执行标识对应的用于实现批量系统调用的二进制代码。
在第二指令中添加用于实现批量系统调用的二进制代码的标识,使得内核可以根据该标识查找用于实现批量系统调用的二进制代码,以完成批量系统调用。
作为一种实现的方式,批量系统调用的源码包含批量系统调用的时延信息,AST数据包含批量系统调用的时延信息批量,其中,系统调用的时延信息通常隐含于AST数据中;第一指令还用于调用内核基于AST数据中的时延信息计算批量系统调用的最坏执行时间。
相比于二进制代码,AST数据可以很好地保留时延信息,通过第一指令可以调用内核基于AST数据中的时延信息计算批量系统调用的最坏执行时间,从而确保批量系统调用具备确定性时延。
作为一种实现的方式,第一指令还用于调用内核将最坏执行时间存入内核态的虚拟地址空间。
通过第一指令调用内核,使得内核将最坏执行时间存入内核态的虚拟地址空间,这样在批量系统调用时便可以读取到最坏执行时间,以达到获取确定性时延的目的。
本申请实施例第二方面提供了一种实现批量系统调用的方法,包括:响应于第一指令,内核从用户态的虚拟地址空间中读取批量系统调用的抽象语法树AST数据,其中,AST是源代码语法结构的一种抽象表示;内核基于AST数据生成用于实现批量系统调用的二进制代码;内核将生成的二进制代码存入内核态的虚拟地址空间,这样,在批量系统调用时,内核便可以执行二进制代码以实现批量系统调用。
由于AST这种数据结构难以被插入恶意的数据,所以基于批量系统调用的AST数据生成的批量系统调用的二进制代码中难以被插入恶意的代码,避免恶意的代码造成内核在运行批量系统调用的二进制代码出现错误或时延过长,从而提高了批量系统调用的安全性。
作为一种实现的方式,方法还包括:响应于第二指令,内核执行用于实现批量系统调用的二进制代码。
内核执行用于实现批量系统调用的二进制代码,从而实现批量系统调用。
作为一种实现的方式,第二指令中携带用于实现批量系统调用的二进制代码的标识,该标识使得内核可以从多个批量系统调用的二进制代码从查找当前批量系统调用的二进制代码;响应于第二指令,内核执行用于实现批量系统调用的二进制代码包括:响应于第二指令,内核执行标识对应的用于实现批量系统调用的二进制代码。
由于第二指令中携带批量系统调用的二进制代码的标识,所以内核可以根据该标识查找批量系统调用的二进制代码,以完成批量系统调用。
作为一种实现的方式,AST数据包含批量系统调用的时延信息,方法还包括:内核基于AST数据中的时延信息计算批量系统调用的最坏执行时间。
相比于二进制代码,AST数据可以很好地保留时延信息;基于AST数据包含的批量系统调用的时延信息,内核可以计算批量系统调用的最坏执行时间,从而确保批量系统调用具备确定性时延。
作为一种实现的方式,方法还包括:内核将最坏执行时间存入内核态的虚拟地址空间。
将最坏执行时间存入内核态的虚拟地址空间,使得在批量系统调用时可以读取到最坏执行时间,以达到获取确定性时延的目的。
本申请实施例第三方面提供了一种实现批量系统调用的装置,包括:编译单元,用于将批量系统调用的源码编译成可执行程序,可执行程序包含批量系统调用的抽象语法树AST数据;加载单元,用于将可执行程序加载到用户态的虚拟地址空间,执行程序是由批量系统调用的源码编译得到,且包含批量系统调用的抽象语法树AST数据;调用单元,用于调用第一指令,第一指令用于调用内核从用户态的虚拟地址空间中读取AST数据,并基于AST数据生成存储在内核态的虚拟地址空间的用于实现批量系统调用的二进制代码。
作为一种实现的方式,可执行程序还包含批量系统调用的调用桩代码,调用单元还用于在执行批量系统调用的调用桩代码时,调用第二指令,第二指令用于调用内核执行用于实现批量系统调用的二进制代码。
作为一种实现的方式,调用单元还用于接收对于第一指令的调用结果,调用结果中包含用于实现批量系统调用的二进制代码的标识;第二指令中携带标识,用于调用内核执行标识对应的用于实现批量系统调用的二进制代码。
作为一种实现的方式,批量系统调用的源码包含批量系统调用的时延信息,AST数据包含批量系统调用的时延信息;第一指令还用于调用内核基于AST数据中的时延信息计算批量系统调用的最坏执行时间。
作为一种实现的方式,第一指令还用于调用内核将最坏执行时间存入内核态的虚拟地址空间。
其中,以上各单元的具体实现、相关说明以及技术效果请参考本申请实施例第一方面的描述。
本申请实施例第四方面提供了一种实现批量系统调用的装置,包括:读取单元,用于响应于第一指令,从用户态的虚拟地址空间中读取批量系统调用的抽象语法树AST数据;注册单元,用于基于AST数据生成用于实现批量系统调用的二进制代码;注册单元,还用于将生成的二进制代码存入内核态的虚拟地址空间。
作为一种实现的方式,注册单元还用于响应于第二指令,执行用于实现批量系统调用的二进制代码。
作为一种实现的方式,第二指令中携带用于实现批量系统调用的二进制代码的标识;注册单元还用于响应于第二指令,执行标识对应的用于实现批量系统调用的二进制代码。
作为一种实现的方式,AST数据包含批量系统调用的时延信息,注册单元还用于基于AST数据中的时延信息计算批量系统调用的最坏执行时间。
作为一种实现的方式,注册单元还用于将最坏执行时间存入内核态的虚拟地址空间。
其中,以上各单元的具体实现、相关说明以及技术效果请参考本申请实施例第二方面的描述。
本申请实施例第五方面提供了一种计算机设备,包括:一个或多个处理器和存储器;其中,所述存储器中存储有计算机可读指令;所述一个或多个处理器读取所述计算机可读指令,以使所述计算机设备实现如第一方面任一实现方式所述的方法。该计算机设备可以是终端设备,例如智能手机、智能音箱、大屏设备、平板电脑、车载智能装置、人工智能设备、虚拟现实/增强现实/混合现实设备等。
本申请实施例第六方面提供了一种终端设备,包括:一个或多个处理器和存储器;其中,所述存储器中存储有计算机可读指令;所述一个或多个处理器读取所述计算机可读指令,以使所述计算机设备实现如第二方面任一实现方式所述的方法。
本申请实施例第七方面提供了一种计算机可读存储介质,包括计算机可读指令,当所述计算机可读指令在计算机上运行时,使得所述计算机执行如第一方面或第二方面任一实现方式所述的方法。
本申请实施例第八方面提供了一种芯片,包括一个或多个处理器。所述处理器中的部分或全部用于读取并执行存储器中存储的计算机程序,以执行上述第一方面或第二方面任意可能的实现方式中的方法。
可选地,该芯片该包括存储器,该存储器与该处理器通过电路或电线与存储器连接。进一步可选地,该芯片还包括通信接口,处理器与该通信接口连接。通信接口用于接收需要处理的数据和/或信息,处理器从该通信接口获取该数据和/或信息,并对该数据和/或信息进行处理,并通过该通信接口输出处理结果。该通信接口可以是输入输出接口。
在一些实现方式中,所述一个或多个处理器中还可以有部分处理器是通过专用硬件的方式来实现以上方法中的部分步骤,例如涉及神经网络模型的处理可以由专用神经网络处理器或图形处理器来实现。
本申请实施例提供的方法可以由一个芯片实现,也可以由多个芯片协同实现。
本申请实施例第九方面提供了一种计算机程序产品,该计算机程序产品包括计算机软件指令,该计算机软件指令可被一个或多个处理器执行从而实现上述第一方面或第二方面中任意一种实现方式所述的方法。
本申请实施例第十方面提供了一种编译方法,该方法可以在线下完成,比如计算机设备(例如智能手机)出厂前完成。该编译方法包括:将批量系统调用的源码编译成可执行程序,可执行程序包含批量系统调用的抽象语法树AST数据。所述AST数据在之后会被用来生成存储在内核态的虚拟地址空间的用于实现批量系统调用的二进制代码。
由于将批量系统调用的源码编译成可执行程序,且可执行程序包含批量系统调用的抽象语法树AST数据,而AST这种数据结构难以被插入恶意的数据,所以基于可执行程序生成的用于实现批量系统调用的二进制代码难以被插入恶意的代码,从而提高了批量系统调用的安全性。
相应的,本申请实施例第十一方面提供了一种编译装置,包括:
编译单元,用于将批量系统调用的源码编译成可执行程序,可执行程序包含批量系统调用的抽象语法树AST数据,且用于生成存储在内核态的虚拟地址空间的用于实现批量系统调用的二进制代码。
本申请实施例第十二方面和第十三方面分别提供一种运行时编译方法以及运行时编译器。其中该编译方法包括将可执行程序中的抽象语法树AST数据编译生成存储在内核态的虚拟地址空间的用于实现批量系统调用的二进制代码,所述可执行程序是通过编译所述批量系统调用的源码得到的。相应的,该运行时编译器包括编译单元,用于将可执行程序中的抽象语法树AST数据编译生成存储在内核态的虚拟地址空间的用于实现批量系统调用的二进制代码。
从以上技术方案可以看出,本申请实施例至少具有以下优点:
在用户态,将批量系统调用的源码编译成批量系统调用的AST数据,然后将该AST数据加载到用户态的虚拟地址空间;内核从用户态的虚拟地址空间中读取AST数据,并基于该AST数据生成批量系统调用的二进制代码,最终将批量系统调用的二进制代码存储到内核态的虚拟地址空间,从而完成对批量系统调用的注册。由于AST这种数据结构难以被插入恶意的数据,所以基于批量系统调用的AST数据生成的实现批量系统调用的二进制代码中难以被插入恶意的代码,避免恶意的代码造成内核在运行用于实现批量系统调用的二进制代码出现错误或时延过长,从而提高了批量系统调用的安全性。
附图说明
图1为本申请实施例中的微内核架构的示意图;
图2为本申请实施例中实现批量系统调用的方法的一个实施例示意图;
图3为本申请实施例中批量系统调用的AST数据的示意图;
图4为本申请实施例中计算最坏执行时间的示意图;
图5为本申请实施例中软件系统架构图的示意图;
图6为本申请实施例中实现批量系统调用的方法的阶段示意图;
图7为本申请实施例中编译过程的实施例示意图;
图8为本申请实施例中实现批量系统调用的装置的一个实施例示意图;
图9为本申请实施例中实现批量系统调用的装置的另一个实施例示意图;
图10为本申请实施例中终端设备的结构示意图。
具体实施方式
操作系统是指管理计算机硬件与软件资源的系统软件,同时也是计算机系统的基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。操作系统还可以提供让用户与系统交互的操作界面。
目前,存在至少两种操作系统架构:微内核架构和宏内核架构。本申请实施例可以应用于微内核架构中。微内核架构的特点是将尽可能少的功能运行在内核空间(kernelspace),并提供必要的机制来实现操作系统。这些机制包括虚拟地址空间管理、线程管理、进程间通信等。相比于宏内核架构,微内核将众多的组件,比如文件系统和网络协议栈等都放在用户态运行,而将自己真正的内核功能减少到非常少。
具体地,本申请实施例应用的微内核架构可以如图1所示,该微内核架构包括运行在内核态的内核、运行在用户态的应用程序以及运行在用户态的系统程序。
内核是指用来管理软件发出的数据输入与输出要求的程序,将这些要求转译为数据处理的指令并交由处理器和/或计算机中其他电子组件进行处理,是现代操作系统中最基本的部分。
系统程序是指控制和协调计算机设备及外部设备,支持应用软件开发和运行的系统,是无需用户干预的各种程序的集合。系统程序包括但不限于文件系统程序、内存管理程序、网络程序和驱动程序。应用程序是和系统程序相对应的,是用户可以使用的各种程序的集合。
内核态和用户态是处理器(下述以中央处理器CPU为例介绍)的两种工作状态。若CPU执行系统调用而执行内核代码,则称该CPU(或当前进程)处于内核态;若CPU执行用户代码,则称该CPU(或当前进程)处于用户态。其中内核态又可以称为特权态,用户态又可以称为非特权态,下文将统一采用内核态和用户态进行说明。
在用户态,由于应用程序和系统程序是相互隔离的,所以应用程序无法直接调用系统程序,而需要通过内部进程通信(Inter-Process Communication,IPC)调用系统程序。应用程序在运行过程中,通常需要多次调用系统程序。而对系统程序的多次调用会导致频繁的上下文切换,导致操作系统性能下降。因此,会将多个系统调用(System Call)打包成批量系统调用(Batch System Call),这样,通过批量系统调用便可以一次性实现多次系统调用,从而减少IPC的次数,提高操作系统的性能。
上下文是指操作系统内进程的执行信息。上下文切换(Context Switch)指的是内核在CPU上对进程进行切换。例如,在进程A到进程B的切换过程中,CPU会将进程A的执行信息从寄存器中读取并保存在进程A的进程控制块(Process Control Block)中,进程控制块位于内存中;之后,CPU把进程B的执行信息恢复到寄存器中,然后执行进程B。可见,上下文切换的过程中涉及到进程执行信息的保存和恢复,如果频繁发生进程切换,则会频繁进行执行信息的保存和恢复,从而影响操作系统的性能。
进程是程序的运行实体,程序是指令、数据及其组织形式的描述。一个进程中可以并发多个线程,每条线程并行执行不同的任务。线程可以是进程的实际运作单位。
为了实现批量系统调用,在应用程序运行前,会先将应用程序中用于实现批量系统调用的二进制代码注册到内核中,在进行批量系统调用时,内核执行该二进制代码即可实现批量系统调用。
将二进制代码注册到内核的过程包括:先将二进制代码存入用户态的虚拟地址空间,然后内核从存入用户态的虚拟地址空间中读取该二进制代码,并将读取到的二进制代码存入内核态的虚拟地址空间。
然而,由于二进制代码是一行行的代码,所以行与行之间容易被插入恶意的代码;如果将批量系统调用的二进制代码存入用户态的虚拟地址空间以供内核读取并完成注册,一旦用户态的虚拟地址空间中的批量系统调用的二进制代码中被插入恶意的代码,那么将导致恶意的代码被注册到内核。在进行批量系统调用时,恶意的代码会被内核执行而导致错误,所以安全性较差。
例如,用户态的虚拟地址空间中批量系统调用的二进制代码被插入无限循环的恶意代码,那么内核在执行批量系统调用的二进制代码时,将陷入无限循环的情况,导致批量系统调用的时延无限长。
为此,本申请实施例提供了一种实现批量系统调用的方法,与直接将批量系统调用的二进制代码存入用户态的虚拟地址空间不同,该方法是将用于实现批量系统调用的二进制代码转换成抽象语法树AST数据,然后将该AST数据存入用户态的虚拟地址空间;内核从用户态的虚拟地址空间读取该AST数据后,将该AST数据转换为二进制代码并完成注册。相比于二进制代码,AST数据这种数据结构难以被插入恶意的数据,所以注册到内核中的批量系统调用的二进制代码难以被插入恶意的代码,因此安全性较高。
具体地,请参阅图2,本申请实施提供了一种实现批量系统调用的方法的一个实施例,该实施例包括:
操作101,将批量系统调用的源码编译成可执行程序,该可执行程序包含批量系统调用的抽象语法树AST数据。
实现批量系统调用的源码可以是C源码,也可以是领域特定语言(DomainSpecific Language,DSL)源码。
其中,领域特定语言是为了解决某一类任务而专门设计的计算机语言,其与通用编程语言(General Purpose Language,简称GPL)相对。
可执行程序通常包含程序和数据两部分,程序部分又可以称为程序段,数据部分又可以称为数据段,数据段用于保存程序的全局变量和静态变量。
抽象语法树(Abstract Syntax Tree,AST),简称语法树(Syntax tree),是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构,该节点具体可以为表达式。
批量系统调用的AST数据属于批量系统调用的可执行程序中的数据段,所以在该实施例中,可执行程序主要是指包含AST数据的数据段;需要说明的是,在编译批量系统调用的源码的过程中,还可能生成其他的代码,这一部分代码则属于程序段部分,例如,在编译批量系统调用的源码的过程中可以生成批量系统调用的调用桩代码,而批量系统调用的调用桩代码则属于程序段部分,下文会对批量系统调用的调用桩代码进行具体介绍。
为了便于理解AST数据,下面提供了一具体示例。
如图3所示,图3示出了一种批量系统调用的AST数据。可以看出,AST数据的这种数据结构与二进制代码不同,AST数据这种数据结构难以被插入恶意的数据。
可执行程序可以包含于可执行连接格式(Executable and Linkable Format,ELF)文件中,可执行连接格式为x86架构上的类Unix操作系统的二进制文件格式标准。因其可扩展性与灵活性,也可应用在其它处理器、计算机系统架构的操作系统上。
需要说明的是,通常使用编译器将源码编译成可执行程序,但编译器通常将源码编译成二进制代码。因此,可以新增编译器插件,该编译器插件用于将批量系统调用的源码编译成包含AST数据的可执行程序。
操作102,将可执行程序加载到用户态的虚拟地址空间。
其中,可执行程序是由批量系统调用的源码编译得到,且包含批量系统调用的抽象语法树AST数据。
可以理解的是,可执行程序通常存储在磁盘等外部存储器中,要运行可执行程序,则需要先将可执行程序加载到用户态的虚拟地址空间。
操作系统的虚拟地址空间包括用户态的虚拟地址空间和内核态的虚拟地址空间。以32位的Linux操作系统为例,其虚拟地址空间(也称为寻址空间或线性虚拟地址空间)为4G。理论上,内核、应用程序的进程和系统程序的进程各自对应的最大虚拟地址空间为4G。然而为了保证内核的安全,在Linux操作系统中,最高的1G字节(从虚拟地址0xC0000000到虚拟地址0xFFFFFFFF)由内核使用,称为内核态的虚拟地址空间。而较低的3G字节(从虚拟地址0x00000000到虚拟地址0xBFFFFFFF)由其他进程使用,称为用户态的虚拟地址空间。
基于前述说明可知,可执行程序可以包含于ELF文件中,当可执行程序包含于ELF文件中时,可以使用ELF加载器loader加载该可执行程序。具体地,ELF加载器将ELF文件加载到用户态的虚拟地址空间,然后解压得到可执行程序。
操作103,调用第一指令,第一指令用于调用内核从用户态的虚拟地址空间中读取AST数据,并基于AST数据生成存储在内核态的虚拟地址空间的批量系统调用的二进制代码。
在本申请实施例中,通过调用第一指令调用系统调用,该系统调用可以理解为注册批量系统调用的系统调用;通过调用注册批量系统调用的系统调用,使得内核完成对批量系统调用的注册。
具体地,可以将用户态的虚拟地址空间的地址作为第一指令的参数,将该参数传递给内核,然后由内核根据该参数读取用户态的虚拟地址空间中的AST数据,进而根据AST数据完成对批量系统调用的注册。
需要说明的是,调用第一指令的操作可以由多种程序实现;例如,可以修改ELF加载器的代码,使得ELF加载器在加载可执行程序后调用第一指令;也可以新增一个组件,该组件用于在加载可执行程序后调用第一指令。
操作104,响应于第一指令,内核从用户态的虚拟地址空间中读取批量系统调用的抽象语法树AST数据。
由于内核可以不受任何的限制,自由地访问整个虚拟地址空间(例如可以包括虚拟地址0xC0000000到虚拟地址0xFFFFFFFF,以及从虚拟地址0x00000000到虚拟地址0xBFFFFFFF),所以内核可以访问用户态的虚拟地址空间。
这样,内核在获取到第一指令的参数后,便可以从用户态的虚拟地址空间中读取AST数据。
操作105,内核基于AST数据生成用于实现批量系统调用的二进制代码。
在获取AST数据后,内核便可以将AST数据转换成二进制代码;由于基于AST数据生成二进制代码的过程是较为成熟的技术,故在此不做详述。
操作106,内核将生成的二进制代码存入内核态的虚拟地址空间。
具体地,内核可以在虚拟地址空间中建立一个批量系统调用表,该批量系统调用表用于存储批量系统调用的二进制代码。
在本申请实施例中,在用户态,将批量系统调用的源码编译成批量系统调用的AST数据,然后将该AST数据加载到用户态的虚拟地址空间;内核从用户态的虚拟地址空间中读取AST数据,并基于AST数据生成批量系统调用的二进制代码,最终将批量系统调用的二进制代码存储到内核态的虚拟地址空间,从而完成对批量系统调用的注册。
由于AST这种数据结构难以被插入恶意的数据,所以基于批量系统调用的AST数据生成的批量系统调用的二进制代码中难以被插入恶意的代码,避免恶意的代码造成内核在运行批量系统调用的二进制代码出现错误或时延过长,从而提高了批量系统调用的安全性。
可以理解的是,在将批量系统调用的二进制代码存入内核态的虚拟地址空间后,当需要进行批量系统调用时,便可以由内核执行批量系统调用的二进制代码,以完成批量系统调用。
下面介绍批量系统调用的具体过程。
作为一种实现方式,在编译批量系统调用的源码的过程中,除了编译得到批量系统调用的AST数据,还可以得到批量系统调用的调用桩代码(Call Stub)。具体地,前述可执行程序还包含批量系统调用的调用桩代码。
其中,桩代码是用来代替某些代码的代码;在本申请实施例中,调用桩代码可以理解为代替批量系统调用的二进制代码的代码。
基于此,本申请实施例提供的方法还可以包括:
操作107,当执行批量系统调用的调用桩代码时,调用第二指令,第二指令用于调用内核执行用于实现批量系统调用的二进制代码。
可以理解的是,批量系统调用的调用桩代码属于可执行程序的程序段;在运行可执行程序的过程中,会执行批量系统调用的调用桩代码,第二指令属于调用桩代码中的一个指令。
其中,调用第二指令的过程发生在用户态;通过调用第二指令实现对批量系统调用的系统调用。
相应地,本申请实施例提供的方法还可以包括:
操作108,响应于第二指令,内核执行用于实现批量系统调用的二进制代码。
在本申请实施例中,在编译过程中,将批量系统调用的源码编译为调用桩代码和AST数据两部分,采用调用桩代码代替批量系统调用的代码;当执行调用桩代码时,便会调用内核执行批量系统调用的代码,从而完成批量系统调用。
可以理解的是,可执行程序中可以包含多个批量系统调用的AST数据,相应地,内核会将多个批量系统调用的二进制代码存入内核态的虚拟地址空间。
这种情况下,当需要调用多个批量系统调用中的一个批量系统调用时,内核需要先确定需要调用的是哪一个批量系统调用。作为一种实现方式,在操作103之后,本实施例提供的方法还包括:在用户态,接收对于第一指令的调用结果,调用结果中包含用于实现批量系统调用的二进制代码的标识。
这样,便可以将用于实现批量系统调用的二进制代码的标识作为第二指令的参数,也可以理解为第二指令中携带用于实现批量系统调用的二进制代码的标识,携带标识的第二指令用于调用内核执行标识对应的用于实现批量系统调用的二进制代码。
基于此,操作108具体包括:
响应于第二指令,内核执行标识对应的用于实现批量系统调用的二进制代码。
下面以一具体示例对上述过程进行说明。
例如,内核态的虚拟地址空间中的批量系统调用表存储了三个批量系统调用的二进制代码,这三个批量系统调用的二进制代码的标识分别为批量系统调用0、批量系统调用1和批量系统调用2;第二指令中携带的批量系统调用的二进制代码的标识为批量系统调用1,则内核可以从批量系统调用表中查找批量系统调用1的二进制代码并执行该二进制代码,从而完成批量系统调用1的系统调用。
应理解,相比于单个系统调用,批量系统调用往往会牵扯到返回值依赖和错误处理。例如,在批量系统调用中,可能会添加衔接代码,该衔接代码的作用是根据一个系统调用的返回值判断下一个系统调用以及系统调用的参数。显然,复杂的衔接代码会使得批量系统调用不具有确定性时延。
确定性时延:时延是指业务的执行时间,确定性时延是指业务的执行时间的波动需保证在有限范围内。比如对于无人驾驶或辅助驾驶系统,前面有障碍物需要识别,识别障碍物的时间要控制在波动范围,否则,感知业务就没办法做规划,感知之后的控制业务就没办法在确定的时间内给出机械反应,比如,刹车。整个系统的确定性时延,由系统各组件共同来决定。操作系统的确定性时延是整个系统确定性时延的根基,这要求内核要在确定的时间范围内给用户态进程响应。
下面提供一种保证批量系统调用具有确定性时延的方法。
作为一种实现方式,在批量系统调用的源码中添加描述时延信息的语义,即批量系统调用的源码包含批量系统调用的时延信息,相应地,AST数据包含批量系统调用的时延信息。
需要说明的是,批量系统调用的时延信息通常隐含于AST数据中。例如,以for-each循环为例,for-each循环是通过对数组内的元素进行遍历,以获取所需要的元素,因此,数组的长度便可以作为时延信息。例如,数组内存在100个元素,数量100便可以作为for-each循环的时延信息,即最多遍历100次,即可获取到所需要的元素。
而对于二进制代码来说,往往无法保留时延信息。例如,在二进制代码中,往往用go to、br以及beq等代码构造循环;以代码go to为例,其仅能表示跳转到某一行代码,而不能指示具体需要跳转多少次。
因此,在批量系统调用的源码中添加描述时延信息的语义后,若将批量系统调用的源码编译为批量系统调用的二进制代码,则会造成时延信息丢失,而本申请实施例将批量系统调用的源码编译为批量系统调用的AST数据,将很好地保留时延信息,以用于时延的计算。基于此,第一指令还用于调用内核基于AST数据中的时延信息计算批量系统调用的最坏执行时间。
相应地,本申请实施例提供的方法还包括:内核基于AST数据中的时延信息计算批量系统调用的最坏执行时间。
以上述示例为例,数组内存在100个元素,所以至少遍历100次便可以获取到所需要的元素;因此,便可以基于遍历次数100及每次遍历的时延计算最坏执行时间。
以图3所示的AST数据为例,批量系统调用包括系统调用1、系统调用2和系统调用3,计算最坏执行时间的示意图可以如图4所示。具体地,系统调用1仅需执行一次,时延为200个中央处理器CPU的执行周期cycles,系统调用3也仅需执行一次,时延为50个执行周期;系统调用2需执行的次数至多为n次,每次执行的时延为100个执行周期,那么最坏执行时间=100*n+250个执行周期,其中n为正整数。
在本申请实施例中,在批量系统调用的源码中添加描述时延信息的语义,然后将批量系统调用的源码编译为包含时延信息的AST数据;内核在读取AST数据后,便可以基于AST数据中的时延信息计算得到该批量系统调用的最坏执行时间,从而保证了批量系统调用具备确定性时延。
在前述实施例中,在注册批量系统调用的过程中,内核将批量系统调用的二进制代码存入内核态的虚拟地址空间;类似的,在计算得到最坏执行时间后,也可以将最坏执行时间存入内核态的虚拟地址空间。作为一种实现方式,第一指令还用于调用内核将最坏执行时间存入内核态的虚拟地址空间。相应地,本申请实施例提供的方法还包括:内核将最坏执行时间存入内核态的虚拟地址空间。与批量系统调用的二进制代码类似,内核也可以将最坏执行时间存入批量系统调用表中。
基于前述各个实施例的说明,本申请实施例提供的实现批量系统调用的方法的软件系统架构图可以如图5所示。
具体地,该软件系统框架可以包括新增的编译器插件、用户态代码、修改代码后的应用程序加载器以及内核。
新增的编译器插件用于执行操作101,即将应用程序的源码编译成用户态代码(也可称为可执行程序)。
如图5所示,该用户态代码包括代码段和数据段,代码段包含调用桩代码err_nobatch_syscall_stub(args)syscall new_id以及应用程序的用于调用批量系统调用的二进制代码int service_api(args),数据段包含常规数据段和AST数据batch_syscall_ast(args)。
应用程序加载器用于执行操作102和操作103。
内核中包含运行时编译器,该运行时编译器具体包括最坏执行时间核算组件(wcet核算组件)和代码生成组件,最坏执行时间核算组件用于基于AST数据中的时延信息计算最坏执行时间,代码生成组件用于执行操作104、操作105和操作106。
内核中还包含批量系统调用表Batch syscall table,图5所示的批量系统调用表具体包括批量系统调用1batch_syscall_1和批量系统调用2batch_syscall_2。
上面从软件系统架构的角度对本申请实施例提供的方法进行了说明,下面从不同的阶段对本申请实施例提供的方法进行进一步说明。
如图6所示,本申请实施例提供的方法包含编译阶段、程序启动阶段和程序执行阶段。
在编译阶段,首先定义了应用程序的脚本的源码,该源码包含时延信息;然后执行操作101将源码编译成AST数据,该AST数据包含时延信息。
下面以一具体示例对编译过程进行说明。
如图7所示,源代码包括调用者代码和批量系统调用Batch Syscall代码,利用通用的编译器可以将调用者代码编译成二进制代码int service_api(args),通过新增的编译器插件可以将Batch Syscall代码编译成调用桩代码err_no batch_syscall_stub(args)syscall new_id以及AST数据batch_syscall_ast(args);其中,二进制代码intservice_api(args)和调用桩代码err_no batch_syscall_stub(args)syscall new_id构成可执行连接格式ELF中的代码段,AST数据batch_syscall_ast(args)属于可执行连接格式ELF中的数据段。
在程序启动阶段,先利用用户态的程序加载器(例如ELF加载器)加载AST数据;然后利用内核计算最坏执行时间并将AST数据编译成二进制代码;最终将该二进制代码注册到批量系统调用表中,如图6所示,该系统调用表中包含批量系统调用0、批量系统调用1和批量系统调用2。
在程序执行阶段,执行用户态代码;在执行用户态代码的过程中,会执行调用桩代码,从而发起批量系统调用;内核态的系统调用分发器根据批量系统调用的二进制代码的标识从批量系统调用表中查找批量系统调用,然后由内核执行查找到批量系统调用;在批量系统调用后,继续执行用户态代码。
需要说明的是,以上实施例涉及到的代码仅为本申请提供的方案的一种具体表示的示例,不能作为对本申请的限定,使用其他编程语言或其它代码形式也可以实现本申请提供的方案。
如图8所示,本申请实施例还提供了一种实现批量系统调用的装置的一个实施例,包括:
编译单元201,用于将批量系统调用的源码编译成可执行程序,可执行程序包含批量系统调用的抽象语法树AST数据。
加载单元202,用于将可执行程序加载到用户态的虚拟地址空间,可执行程序是由批量系统调用的源码编译得到,且包含批量系统调用的抽象语法树AST数据。
调用单元203,用于调用第一指令,第一指令用于调用内核从用户态的虚拟地址空间中读取AST数据,并基于AST数据生成存储在内核态的虚拟地址空间的用于实现批量系统调用的二进制代码。
作为一种实现的方式,可执行程序还包含批量系统调用的调用桩代码,基于此,调用单元203还用于在执行批量系统调用的调用桩代码时,调用第二指令,第二指令用于调用内核执行生成的二进制代码。
作为一种实现的方式,调用单元203还用于接收对于第一指令的调用结果,调用结果中包含用于实现批量系统调用的二进制代码的标识;第二指令中携带标识,用于调用内核执行标识对应的用于实现批量系统调用的二进制代码。
作为一种实现的方式,批量系统调用的源码包含批量系统调用的时延信息,AST数据包含批量系统调用的时延信息;第一指令还用于调用内核基于AST数据中的时延信息计算批量系统调用的最坏执行时间。
作为一种实现的方式,第一指令还用于调用内核将最坏执行时间存入内核态的虚拟地址空间。
其中,以上各单元的具体实现、相关说明以及技术效果请参考本申请实施例第一方面的描述。
如图9所示,本申请实施例还提供了一种实现批量系统调用的装置的另一个实施例,包括:
读取单元301,用于响应于第一指令,从用户态的虚拟地址空间中读取批量系统调用的抽象语法树AST数据。
注册单元302,用于基于AST数据生成用于实现批量系统调用的二进制代码。
注册单元302,还用于将用于实现批量系统调用的二进制代码存入内核态的虚拟地址空间。
作为一种实现的方式,注册单元302还用于响应于第二指令,执行用于实现批量系统调用的二进制代码。
作为一种实现的方式,第二指令中携带用于实现批量系统调用的二进制代码的标识;注册单元302还用于响应于第二指令,执行标识对应的用于实现批量系统调用的二进制代码。
作为一种实现的方式,AST数据包含批量系统调用的时延信息,注册单元302还用于基于AST数据中的时延信息计算批量系统调用的最坏执行时间。
作为一种实现的方式,注册单元302还用于将最坏执行时间存入内核态的虚拟地址空间。
其中,以上各单元的具体实现、相关说明以及技术效果请参考本申请实施例第二方面的描述。
本申请实施例还提供了另一种终端设备,如图10所示,为了便于说明,仅示出了与本申请实施例相关的部分,具体技术细节未揭示的,请参照本申请实施例方法部分。该终端可以为包括手机、平板电脑、个人数字助理(英文全称:Personal Digital Assistant,英文缩写:PDA)、销售终端(英文全称:Point of Sales,英文缩写:POS)、车载电脑等任意终端设备,以终端为手机为例:
图10示出的是与本申请实施例提供的终端相关的手机的部分结构的框图。参考图10,手机包括:射频(英文全称:Radio Frequency,英文缩写:RF)电路1010、存储器1020、输入单元1030、显示单元1040、传感器1050、音频电路1060、无线保真(英文全称:wirelessfidelity,英文缩写:WiFi)模块1070、处理器1080以及电源等部件。本领域技术人员可以理解,图10中示出的手机结构并不构成对手机的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
下面结合图10对手机的各个构成部件进行具体的介绍:
RF电路1010可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,给处理器1080处理;另外,将设计上行的数据发送给基站。通常,RF电路1010包括但不限于天线、至少一个放大器、收发信机、耦合器、低噪声放大器(英文全称:LowNoise Amplifier,英文缩写:LNA)、双工器等。此外,RF电路1010还可以通过无线通信与网络和其他设备通信。上述无线通信可以使用任一通信标准或协议,包括但不限于全球移动通讯系统(英文全称:Global System of Mobile communication,英文缩写:GSM)、通用分组无线服务(英文全称:General Packet Radio Service,GPRS)、码分多址(英文全称:CodeDivision Multiple Access,英文缩写:CDMA)、宽带码分多址(英文全称:Wideband CodeDivision Multiple Access,英文缩写:WCDMA)、长期演进(英文全称:Long TermEvolution,英文缩写:LTE)、电子邮件、短消息服务(英文全称:Short Messaging Service,SMS)等。
存储器1020可用于存储软件程序以及模块,处理器1080通过运行存储在存储器1020的软件程序以及模块,从而执行手机的各种功能应用以及数据处理。存储器1020可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器1020可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
输入单元1030可用于接收输入的数字或字符信息,以及产生与手机的用户设置以及功能控制有关的键信号输入。具体地,输入单元1030可包括触控面板1031以及其他输入设备1032。触控面板1031,也称为触摸屏,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板1031上或在触控面板1031附近的操作),并根据预先设定的程式驱动相应的连接装置。可选的,触控面板1031可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成触点坐标,再送给处理器1080,并能接收处理器1080发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触控面板1031。除了触控面板1031,输入单元1030还可以包括其他输入设备1032。具体地,其他输入设备1032可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
显示单元1040可用于显示由用户输入的信息或提供给用户的信息以及手机的各种菜单。显示单元1040可包括显示面板1041,可选的,可以采用液晶显示器(英文全称:Liquid Crystal Display,英文缩写:LCD)、有机发光二极管(英文全称:Organic Light-Emitting Diode,英文缩写:OLED)等形式来配置显示面板1041。进一步的,触控面板1031可覆盖显示面板1041,当触控面板1031检测到在其上或附近的触摸操作后,传送给CPU1080以确定触摸事件的类型,随后处理器1080根据触摸事件的类型在显示面板1041上提供相应的视觉输出。虽然在图10中,触控面板1031与显示面板1041是作为两个独立的部件来实现手机的输入和输入功能,但是在某些实施例中,可以将触控面板1031与显示面板1041集成而实现手机的输入和输出功能。
手机还可包括至少一种传感器1050,比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板1041的亮度,接近传感器可在手机移动到耳边时,关闭显示面板1041和/或背光。作为运动传感器的一种,加速计传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至于手机还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。
音频电路1060、扬声器1061,传声器1062可提供用户与手机之间的音频接口。音频电路1060可将接收到的音频数据转换后的电信号,传输到扬声器1061,由扬声器1061转换为声音信号输出;另一方面,传声器1062将收集的声音信号转换为电信号,由音频电路1060接收后转换为音频数据,再将音频数据输出处理器1080处理后,经RF电路1010以发送给比如另一手机,或者将音频数据输出至存储器1020以便进一步处理。
WiFi属于短距离无线传输技术,手机通过WiFi模块1070可以帮助用户收发电子邮件、浏览网页和访问流式媒体等,它为用户提供了无线的宽带互联网访问。虽然图10示出了WiFi模块1070,但是可以理解的是,其并不属于手机的必须构成,完全可以根据需要在不改变发明的本质的范围内而省略。
处理器1080是手机的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器1020内的软件程序和/或模块,以及调用存储在存储器1020内的数据,执行手机的各种功能和处理数据,从而对手机进行整体监控。可选的,CPU1080可包括一个或多个处理单元;优选的,处理器1080可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到CPU1080中。
手机还包括给各个部件供电的电源(比如电池),优选的,电源可以通过电源管理系统与处理器1080逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。
尽管未示出,手机还可以包括摄像头、蓝牙模块等,在此不再赘述。
在本申请实施例中,该终端所包括的处理器1080中可以运行前述实施例中用户态进程和内核。
其中,用户态进程用于执行图2中用户态的操作,内核用于执行图2中内核所执行的操作。
本申请实施例还提供一种芯片,包括一个或多个处理器。所述处理器中的部分或全部用于读取并执行存储器中存储的计算机程序,以执行图2对应的实施例的方法。
可选地,该芯片该包括存储器,该存储器与该处理器通过电路或电线与存储器连接。进一步可选地,该芯片还包括通信接口,处理器与该通信接口连接。通信接口用于接收需要处理的数据和/或信息,处理器从该通信接口获取该数据和/或信息,并对该数据和/或信息进行处理,并通过该通信接口输出处理结果。该通信接口可以是输入输出接口。
在一些实现方式中,所述一个或多个处理器中还可以有部分处理器是通过专用硬件的方式来实现以上方法中的部分步骤,例如涉及神经网络模型的处理可以由专用神经网络处理器或图形处理器来实现。
本申请实施例提供的方法可以由一个芯片实现,也可以由多个芯片协同实现。
本申请实施例还提供了一种计算机存储介质,该计算机存储介质用于储存为上述计算机设备所用的计算机软件指令,其包括用于执行为计算机设备所设计的程序。
该计算机设备可以包括前述图8和图9所描述的实现批量系统调用的装置。
本申请实施例还提供了一种计算机程序产品,该计算机程序产品包括计算机软件指令,该计算机软件指令可通过处理器进行加载来实现前述图2所示的方法中的流程。
需要说明的是,为了方便应用和理解,本申请实施例为提到的一些系统、模块、器件、元素、数据结构以及指令等进行了命名,这些命名的大写或小写在无特殊说明的情况下均是相同的含义。同时,这些命名可以根据需求变更,不应作为对本申请所提供方案的限定。
需要说明的是,本实施例提供的方案可以应用于终端设备或服务器等。这里的终端设备包括但不限于智能手机、车载装置(例如自动驾驶设备)、个人计算机、人工智能设备、平板电脑、个人数字助理、智能穿戴式设备(例如智能手表或手环、智能眼镜)、智能语音设备(例如智能音箱等)、虚拟现实/混合现实/增强显示设备或网络接入设备(例如网关等)等。服务器可以包括存储服务器或计算服务器等。
需要说明的是,前述实施例中提出模块或单元的划分仅作为一种示例性的示出,所描述的各个模块的功能仅是举例说明,本申请并不以此为限。本领域普通技术人员可以根据需求合并其中两个或更多模块的功能,或者将一个模块的功能拆分从而获得更多更细粒度的模块,以及其他变形方式。
以上描述的各个实施例之间相同或相似的部分可相互参考。本申请中的“多个”若无特殊说明,指两个或两个以上,或“至少两个”。本申请中的“A/B”包括三种情况:“A”、“B”和“A和B”。本申请中一个对象的“标识(id)”指的是唯一标识该对象的信息,该“标识”可以直接标识该对象,例如对象的名称,也可以间接指示该对象,例如对象的存储地址。本申请中“第一”、“第二”、“第三”等仅为了区分表述,没有限定顺序的意思;另外,第一对象和第二对象在某些情况下有可能合并或指同一对象;再者,由于没有限定顺序,所以没有第一,也可以有第二或第三。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本申请提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述,仅为本申请的一些具体实施方式,但本申请的保护范围并不局限于此。

Claims (17)

1.一种实现批量系统调用的方法,其特征在于,包括:
将可执行程序加载到用户态的虚拟地址空间,所述可执行程序是由批量系统调用的源码编译得到,且所述可执行程序包含所述批量系统调用的抽象语法树AST数据;
调用第一指令,所述第一指令用于调用内核从所述用户态的虚拟地址空间中读取所述AST数据,并基于所述AST数据生成存储在内核态的虚拟地址空间的用于实现所述批量系统调用的二进制代码。
2.根据权利要求1所述的方法,其特征在于,所述可执行程序还包含所述批量系统调用的调用桩代码,所述方法还包括:
当执行所述批量系统调用的调用桩代码时,调用第二指令,所述第二指令用于调用所述内核执行用于实现所述批量系统调用的二进制代码。
3.根据权利要求2所述的方法,其特征在于,在所述调用第一指令之后,所述方法还包括:
接收对于所述第一指令的调用结果,所述调用结果中包含用于实现所述批量系统调用的二进制代码的标识;
所述第二指令中携带所述标识,用于调用所述内核执行所述标识对应的用于实现所述批量系统调用的二进制代码。
4.根据权利要求1至3中任意一项所述的方法,其特征在于,所述批量系统调用的源码包含所述批量系统调用的时延信息,所述AST数据包含所述批量系统调用的时延信息;
所述第一指令还用于调用所述内核基于所述AST数据中的所述时延信息计算所述批量系统调用的最坏执行时间。
5.根据权利要求4所述的方法,其特征在于,所述第一指令还用于调用所述内核将所述最坏执行时间存入所述内核态的虚拟地址空间。
6.一种实现批量系统调用的方法,其特征在于,包括:
响应于第一指令,内核从用户态的虚拟地址空间中读取批量系统调用的抽象语法树AST数据;
所述内核基于所述AST数据生成用于实现所述批量系统调用的二进制代码;
所述内核将生成的二进制代码存入内核态的虚拟地址空间。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
响应于第二指令,所述内核执行用于实现所述批量系统调用的二进制代码。
8.根据权利要求7所述的方法,其特征在于,所述第二指令中携带用于实现所述批量系统调用的二进制代码的标识;
所述响应于第二指令,所述内核执行用于实现所述批量系统调用的二进制代码包括:
响应于第二指令,所述内核执行所述标识对应的用于实现所述批量系统调用的二进制代码。
9.根据权利要求6至8中任意一项所述的方法,其特征在于,所述AST数据包含所述批量系统调用的时延信息,所述方法还包括:
所述内核基于所述AST数据中的所述时延信息计算所述批量系统调用的最坏执行时间。
10.根据权利要求9所述的方法,其特征在于,所述方法还包括:
所述内核将所述最坏执行时间存入所述内核态的虚拟地址空间。
11.一种编译方法,其特征在于,包括:
将批量系统调用的源码编译成可执行程序,所述可执行程序包含所述批量系统调用的抽象语法树AST数据,所述AST数据用于生成存储在内核态的虚拟地址空间的用于实现所述批量系统调用的二进制代码。
12.一种实现批量系统调用的装置,其特征在于,包括:
加载单元,用于将可执行程序加载到用户态的虚拟地址空间,所述可执行程序是由批量系统调用的源码编译得到,且包含所述批量系统调用的抽象语法树AST数据;
调用单元,用于调用第一指令,所述第一指令用于调用内核从所述用户态的虚拟地址空间中读取所述AST数据,并基于所述AST数据生成存储在内核态的虚拟地址空间的用于实现所述批量系统调用的二进制代码。
13.一种实现批量系统调用的装置,其特征在于,包括:
读取单元,用于响应于第一指令,从用户态的虚拟地址空间中读取批量系统调用的抽象语法树AST数据;
注册单元,用于基于所述AST数据生成用于实现所述批量系统调用的二进制代码;
所述注册单元,还用于将生成的二进制代码存入内核态的虚拟地址空间。
14.一种编译装置,其特征在于,包括:
编译单元,用于将批量系统调用的源码编译成可执行程序,所述可执行程序包含所述批量系统调用的抽象语法树AST数据,所述AST数据用于生成存储在内核态的虚拟地址空间的用于实现所述批量系统调用的二进制代码。
15.一种计算机设备,其特征在于,所述计算机设备包括存储器和处理器,所述存储器用于存储计算机可读指令,所述处理器用于读取所述计算机可读指令并实现权利要求1-11中任意一项所述的方法。
16.一种计算机存储介质,其特征在于,所述计算机存储介质用于存储计算机程序,当所述计算机程序被一个或多个处理器执行时实现如权利要求1-11任意一项所述的方法。
17.一种计算机程序产品,其特征在于,所述计算机程序产品计算机可读指令,当所述计算机可读指令被一个或多个处理器运行时实现权利要求1-11中任意一项所述的方法。
CN202110163179.2A 2021-02-05 2021-02-05 一种实现批量系统调用的方法及装置 Active CN114879962B (zh)

Priority Applications (4)

Application Number Priority Date Filing Date Title
CN202110163179.2A CN114879962B (zh) 2021-02-05 一种实现批量系统调用的方法及装置
PCT/CN2022/071747 WO2022166553A1 (zh) 2021-02-05 2022-01-13 一种实现批量系统调用的方法及装置
EP22748832.7A EP4276603A1 (en) 2021-02-05 2022-01-13 Method and apparatus for implementing batch system calls
US18/365,312 US20230376289A1 (en) 2021-02-05 2023-08-04 Method and apparatus for implementing batch system call

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110163179.2A CN114879962B (zh) 2021-02-05 一种实现批量系统调用的方法及装置

Publications (2)

Publication Number Publication Date
CN114879962A true CN114879962A (zh) 2022-08-09
CN114879962B CN114879962B (zh) 2024-06-04

Family

ID=

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120167067A1 (en) * 2010-12-23 2012-06-28 International Business Machines Corporation Batch dispatch of java native interface calls
CN104182267A (zh) * 2013-05-21 2014-12-03 中兴通讯股份有限公司 编译方法、解释方法、装置及用户设备
CN107844294A (zh) * 2017-11-17 2018-03-27 杭州秘猿科技有限公司 一种高可用的合约执行方法及系统
CN108345773A (zh) * 2017-07-27 2018-07-31 江苏通付盾信息安全技术有限公司 基于虚拟机的代码保护方法及装置、电子设备、存储介质
CN110032394A (zh) * 2019-04-12 2019-07-19 深圳市腾讯信息技术有限公司 一种无源码文件的分析方法、装置和存储介质
US20200133663A1 (en) * 2018-10-31 2020-04-30 Oracle International Corporation Automatic generation of multi-source breadth-first search from high-level graph language for distributed graph processing systems
CN111475820A (zh) * 2020-04-28 2020-07-31 张皓天 基于可执行程序的二进制漏洞检测方法、系统及存储介质
CN112199217A (zh) * 2020-10-23 2021-01-08 无锡江南计算技术研究所 一种软硬协同的线程私有数据访问优化方法
CN112231068A (zh) * 2020-12-18 2021-01-15 浙江太美医疗科技股份有限公司 使用领域专用语言的自定义逻辑方法、系统和可读介质

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120167067A1 (en) * 2010-12-23 2012-06-28 International Business Machines Corporation Batch dispatch of java native interface calls
CN104182267A (zh) * 2013-05-21 2014-12-03 中兴通讯股份有限公司 编译方法、解释方法、装置及用户设备
CN108345773A (zh) * 2017-07-27 2018-07-31 江苏通付盾信息安全技术有限公司 基于虚拟机的代码保护方法及装置、电子设备、存储介质
CN107844294A (zh) * 2017-11-17 2018-03-27 杭州秘猿科技有限公司 一种高可用的合约执行方法及系统
US20200133663A1 (en) * 2018-10-31 2020-04-30 Oracle International Corporation Automatic generation of multi-source breadth-first search from high-level graph language for distributed graph processing systems
CN110032394A (zh) * 2019-04-12 2019-07-19 深圳市腾讯信息技术有限公司 一种无源码文件的分析方法、装置和存储介质
CN111475820A (zh) * 2020-04-28 2020-07-31 张皓天 基于可执行程序的二进制漏洞检测方法、系统及存储介质
CN112199217A (zh) * 2020-10-23 2021-01-08 无锡江南计算技术研究所 一种软硬协同的线程私有数据访问优化方法
CN112231068A (zh) * 2020-12-18 2021-01-15 浙江太美医疗科技股份有限公司 使用领域专用语言的自定义逻辑方法、系统和可读介质

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
CHYYUU: "系统调用实现", pages 1 - 4, Retrieved from the Internet <URL:《https://www.bookstack.cn/read/simple_os_book/zh-chapter...》> *
傅立国: "二进制翻译模型构建与优化关键技术研究_", 《中国博士学位论文全文数据库 信息科技辑》, no. 12, 15 December 2018 (2018-12-15), pages 138 - 135 *
興趣使然的小胃: "【技术分享】基于抽象语法树的PowerShell混淆技术", pages 1 - 17, Retrieved from the Internet <URL:《https://www.anquanke.com/post/id/87329》> *
贺小川: "单芯片系统(SoC)中的实时任务调度算法研究", 《中国博士学位论文全文数据库 信息科技辑》, no. 06, 15 June 2011 (2011-06-15), pages 135 - 10 *

Also Published As

Publication number Publication date
WO2022166553A1 (zh) 2022-08-11
US20230376289A1 (en) 2023-11-23
EP4276603A1 (en) 2023-11-15

Similar Documents

Publication Publication Date Title
CN112052008B (zh) 代码检查方法、装置、计算机设备及计算机可读存储介质
CA2768752C (en) Terminal device of non-android platform for executing android applications, and computer readable recording medium for storing program of executing android applications on non-android platform
CN109753276B (zh) 一种基于虚幻引擎的控制方法及相关装置
CN106502703B (zh) 一种函数调用方法和装置
CN108763060A (zh) Android系统中Native层崩溃溯源方法、装置、存储介质及终端
US9354919B2 (en) Method and device for loading android virtual machine application
CN109933381B (zh) 一种内核的加载方法及装置
CN111723002A (zh) 一种代码调试方法、装置、电子设备及存储介质
CN113867848A (zh) 图形接口的调用方法、装置、设备及可读存储介质
CN110046497B (zh) 一种函数挂钩实现方法、装置和存储介质
US20230185554A1 (en) Application installation method and electronic device for supporting same
CN109145598B (zh) 脚本文件的病毒检测方法、装置、终端及存储介质
CN106919458B (zh) Hook目标内核函数的方法及装置
US20190213016A1 (en) Extensible input stack for processing input device data
CN110245017B (zh) 资源标识的分配方法和设备
CN114879962B (zh) 一种实现批量系统调用的方法及装置
US9786026B2 (en) Asynchronous translation of computer program resources in graphics processing unit emulation
CN111562910A (zh) 一种封装方法及相关设备
CN114879962A (zh) 一种实现批量系统调用的方法及装置
CN111736839A (zh) 一种编译链接方法及装置
EP4198702A1 (en) Electronic device and memory management method using same
CN114995970A (zh) 任务处理方法、装置、存储介质及电子设备
CN110032394B (zh) 一种无源码文件的分析方法、装置和存储介质
KR20150117967A (ko) 애플리케이션 패키지를 생성하는 장치 및 방법
CN112035180A (zh) 一种自动化实例加载方法、装置、电子设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant