CN116048827A - 一种进程间的函数调用方法及相关设备 - Google Patents

一种进程间的函数调用方法及相关设备 Download PDF

Info

Publication number
CN116048827A
CN116048827A CN202111266347.7A CN202111266347A CN116048827A CN 116048827 A CN116048827 A CN 116048827A CN 202111266347 A CN202111266347 A CN 202111266347A CN 116048827 A CN116048827 A CN 116048827A
Authority
CN
China
Prior art keywords
function
access right
kernel
call
system service
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.)
Pending
Application number
CN202111266347.7A
Other languages
English (en)
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 CN202111266347.7A priority Critical patent/CN116048827A/zh
Priority to PCT/CN2022/124739 priority patent/WO2023071786A1/zh
Publication of CN116048827A publication Critical patent/CN116048827A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1458Protection against unauthorised use of memory or access to memory by checking the subject access rights
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Storage Device Security (AREA)

Abstract

本申请实施例公开了一种进程间的函数调用方法,可以应用于小型嵌入式设备或物联网设备。该方法包括:第一进程通过用户态进程可读可执行的第一函数远程调用并执行第一系统服务进程的物理内存地址空间中的第二函数。通过用户态中所有进程可读可执行的第一函数,可以实现第一进程通过第一函数远程调用第一系统服务进程的物理内存地址空间中存储的第二函数,进而实现第一进程执行第二函数。相较于现有技术基于IPC调用函数的方式需要进程切换与数据拷贝,本申请实施例中第一进程调用第一系统服务进程的第二函数无需进行进程切换和数据拷贝,从机制逻辑层面提升第一系统服务进程中第二函数的调用性能。

Description

一种进程间的函数调用方法及相关设备
技术领域
本申请实施例涉及计算机安全隔离技术领域,尤其涉及一种进程间的函数调用方法及相关设备。
背景技术
基于微内核的操作系统架构(简称微内核架构)被广泛使用在云平台、嵌入式设备、移动设备、无人驾驶等场景中。微内核架构将自己真正的核心功能减少到非常少,将传统的操作系统内核(例如宏内核架构Linux)中的众多的组件,比如系统程序等都放在用户态的进程中运行。
目前,业界操作系统架构主要分微内核架构和宏内核架构,微内核架构(QNX,seL4,fuchsia等)的特点是内核本身很小,很多系统服务功能(比如文件系统、内存管理、网络、驱动等)作为单独的服务进程(下称系统服务)放在用户态运行,内核态只保留关键的功能{比如中断处理、定时器功能、进程间通信(inter-process communication,IPC)、内存映射等}。在微内核架构中,用户进程与系统服务进程之间主要通过IPC的方式进行通信,进而实现进程之间的安全隔离。对于用户进程需要调用系统服务进程中函数的场景中,用户进程会通过IPC的方式将函数的入参数据发送给系统服务进程。该过程中会进行入参数据拷贝,通常是两次入参数据拷贝,第一次将入参数据从用户进程拷贝至内核数据段,第二次将入参数据从内核数据段拷贝至系统服务进程数据段,进而系统服务进程根据该入参数据运行函数。
然而,上述基于IPC调用函数的方式会随着传入数据量的增加使得开销增加,从而影响设备性能。
发明内容
本申请实施例提供了一种进程间的函数调用方法及相关设备,可以提升第一进程执行系统服务进程中函数的效率。
本申请实施例第一方面提供了一种进程间的函数调用方法,该方法可以应用于低算力的嵌入式设备或物联网(internet of things,IOT)设备等,该方法包括:第一进程基于第一函数触发第一系统调用,第一函数为用户态中所有进程可读可执行的函数,第一函数用于触发第一系统调用与调用第一系统服务进程中的第二函数,第一系统调用用于指示内核配置第一进程对第一系统服务进程的物理内存地址空间的第一访问权限,物理内存地址空间存储有第二函数,第二函数为实现第一系统服务进程功能的函数;第一进程接收内核发送的用于响应第一系统调用的指示信息,指示信息用于指示是否已开启第一访问权限;当确定指示信息用于指示已开启第一访问权限,则第一进程基于第一函数执行物理内存地址空间中的第二函数。
本申请实施例中,通过用户态中所有进程可读可执行的第一函数,可以实现第一进程通过第一函数远程调用第一系统服务进程的物理内存地址空间中存储的第二函数,进而实现第一进程执行第二函数。相较于现有技术基于IPC调用函数的方式需要进程切换与数据拷贝,本申请实施例中第一进程调用第一系统服务进程的第二函数无需进行进程切换和数据拷贝,从机制逻辑层面提升第一系统服务进程中第二函数的调用性能。另外,限定了第一进程需通过第一函数执行第二函数,限定了第一进程执行第二函数的场景,或理解为是限定了第一进程必须在公共区(即存储所有进程都可读可执行的第一函数)中执行第二函数。减少用户无条件执行第二函数带来的安全隐患。
可选地,在第一方面的一种可能的实现方式中,上述步骤:第一函数还用于触发第二系统调用,第二系统调用用于内核取消第一访问权限;第一进程执行第二函数之后,方法还包括:第一进程基于第一函数触发第二系统调用,第二系统调用用于指示内核取消第一访问权限。
该种可能的实现方式中,线程(或者理解为任务)结束后可以取消第一访问权限,防止第一进程的其他线程随意访问物理内存地址空间,进而保证第二函数的调用安全。
可选地,在第一方面的一种可能的实现方式中,上述的第一访问权限包括:第一系统服务进程中代码段的读与执行权限与第一系统服务进程中数据段的读写权限;第一系统调用还用于触发内核配置第一进程中代码段的读与执行权限与第一进程中数据段的读写权限。换句话说,第一系统调用用于触发内核将第一系统服务进程的代码段设置为可读可执行以及将第一系统服务进程的数据段设置为可读可写(或者理解为第一系统服务进程的物理内存地址空间对于第一进程可读可执行)。另外,为了保证第二函数的调用安全性,可以将第一进程的代码段配置为不可读不可执行。
该种可能的实现方式中,第一进程通过第一系统调用获取该第一访问权限,以便于后续第一进程调用并执行第二函数。
可选地,在第一方面的一种可能的实现方式中,上述步骤:第一进程基于第一函数触发第一系统调用之前,方法还包括:第一进程获取第一任务,第一任务包括第一进程执行第二函数。该第一任务可以理解为是一个线程。该第一任务也可以理解为是基于用户操作确定的第一任务。
该种可能的实现方式中,通过用户操作确定的第一任务,并基于第一函数调用并执行第一系统服务进程的物理内存地址空间的第二函数,在执行第二函数过程中,避免数据拷贝与进程切换,进而提升执行第二函数的效率。
可选地,在第一方面的一种可能的实现方式中,上述的第一进程为用户进程或第二系统服务进程。即第一进程可以为运行用户态的应用程序对应的进程,或者第一进程为运行用户态的第二系统服务程序对应的进程,第一系统服务进程为运行用户态的第一系统服务程序对应的进程。其中,第一系统服务进程与第二系统服务进程可以是同类型的系统服务进程,或者是不同类型的系统服务进程,具体此处不做限定。
该种可能的实现方式中,该方法可以应用于用户态的进程调用系统服务进程中系统服务函数的场景。
可选地,在第一方面的一种可能的实现方式中,上述步骤:第一系统服务进程集成有用户态中的至少两个子系统服务进程,子系统服务进程为驱动进程、网络管理进程或文件系统管理进程;第二函数为至少两个子系统服务进程中一个子系统服务进程中的函数,第三函数为用户态中所有进程可读可执行的函数,第三函数用于调用为至少两个子系统服务进程中另一个子系统服务进程中的函数;第一进程基于第一函数执行物理内存地址空间中的第二函数,包括:第一进程通过第二函数调用并执行第三函数,在第一进程未返回第一函数之前,第一访问权限不变。
该种可能的实现方式中,对于嵌套场景,即第一函数与第三函数是同一属性,该场景下,执行第三函数之后,由于还要返回至第一函数,为了避免多次的系统调用(基第一访问权限的开启、关闭、再开启与再关闭),在一个线程任务中,执行域(即执行任务所用到的物理内存地址空间)不变的情况下,访问权限可以不用改变。
可选地,在第一方面的一种可能的实现方式中,上述的方法应用于微内核架构,第一系统服务进程为驱动进程、网络管理进程或文件系统管理进程。
该种可能的实现方式中,该方法可以应用于微内核架构,第一进程可以通过第一函数调用完成驱动任务、网络管理任务,和/或文件系统管理任务。
可选地,在第一方面的一种可能的实现方式中,上述的物理内存地址空间为内存管理单元(memory management unit,MMU)、内存保护单元(memory protection unit,MPU)或物理地址保护(physical memory protection,PMP)硬件管理的地址空间。
该种可能的实现方式中,该方法可以应用于基于MPU/PMP的小型嵌入式设备,由于在执行线程任务中,可以不用切换进程与数据拷贝,进而提升小型嵌入式设备的性能。
可选地,在第一方面的一种可能的实现方式中,上述计算机设备为物联网IOT设备。
该种可能的实现方式中,该方法可以应用于IOT设备,由于在执行线程任务中,可以不用切换进程与数据拷贝,进而提升IOT设备的性能。
本申请实施例第二方面提供了一种进程间的函数调用方法,该方法可以应用于低算力的嵌入式设备或物联网(internet of things,IOT)设备等,该方法包括:内核响应第一进程触发的第一系统调用,配置第一进程对第一系统服务进程的物理内存地址空间的第一访问权限,物理内存地址空间存储有第二函数,第二函数为实现第一系统服务进程功能的函数,第一系统调用用于指示内核配置第一访问权限;内核向第一进程发送指示信息,指示信息用于指示是否已开启第一访问权限,第一访问权限用于第一进程执行物理内存地址空间中的第二函数。
本申请实施例中,内核可以响应第一进程触发的系统调用配置第一访问权限,并通过发送指示信息的方式,指示第一访问权限已开启,进而第一进程可以通过第一访问权限调用并执行第一系统服务进程的物理内存地址空间存储的第二函数。相较于现有技术基于IPC调用函数的方式需要进程切换与数据拷贝,本申请实施例中第一进程调用第一系统服务进程的第二函数无需进行进程切换和数据拷贝,从机制逻辑层面提升第一系统服务进程中第二函数的调用性能。
可选地,在第二方面的一种可能的实现方式中,上述步骤:配置第一进程对第一系统服务进程的物理内存地址空间的第一访问权限,包括:当确定第一进程具有第二访问权限,且第一访问权限未开启,则内核配置第一访问权限,指示信息具体用于指示已开启第一访问权限,第二访问权限为调用第二函数的权限。
该种可能的实现方式中,内核在配置第一进程的第一访问权限之前,先判断第一进程是否有权调用第二函数(即第二访问权限),在第一进程具有第二访问权限的情况下,内核才配置第一访问权限,可以保证没有第二访问权限的进程不能调用第二函数,进而保证系统或第一系统服务进程的安全。
可选地,在第二方面的一种可能的实现方式中,上述步骤还包括:内核响应第一进程触发的第二系统调用,取消第一访问权限,第二系统调用用于指示内核取消第一访问权限。
该种可能的实现方式中,线程(或者理解为任务)结束后可以取消第一访问权限,防止第一进程的其他线程随意访问物理内存地址空间,进而保证第二函数的调用安全。
可选地,在第二方面的一种可能的实现方式中,上述的第一访问权限包括:第一系统服务进程中代码段的读与执行权限与第一系统服务进程中数据段的读写权限;第一系统调用还用于触发内核配置第一进程中代码段的读与执行权限与第一进程中数据段的读写权限。
该种可能的实现方式中,第一进程通过第一系统调用获取该第一访问权限,以便于后续第一进程调用并执行第二函数。
可选地,在第二方面的一种可能的实现方式中,上述的第一进程为用户进程或第二系统服务进程。
该种可能的实现方式中,该方法可以应用于用户态的进程调用系统服务进程中系统服务函数的场景。
可选地,在第二方面的一种可能的实现方式中,上述的第一系统服务进程集成有用户态中的至少两个子系统服务进程,子系统服务进程为驱动进程、网络管理进程或文件系统管理进程;当确定第一进程具有第二访问权限,且第一访问权限已开启,则指示信息用于指示已开启第一访问权限,且指示第一函数不启用第二系统调用,第一函数为用户态中所有进程可读可执行的函数,第一函数用于触发第一系统调用、调用第二函数以及触发第二系统调用,第二系统调用用于指示内核取消第一访问权限。
该种可能的实现方式中,对于嵌套场景,即第一函数与第三函数是同一属性,该场景下,内核向第一进程发送的指示信息还可以用于指示第一函数不启用第二系统调用,即在一个线程任务中,为了避免多次的系统调用(基第一访问权限的开启、关闭、再开启与再关闭),执行域(即执行任务所用到的物理内存地址空间)不变的情况下,访问权限可以不用改变。
可选地,在第二方面的一种可能的实现方式中,上述方法应用于微内核架构,第一系统服务进程为驱动进程、网络管理进程或文件系统管理进程。
该种可能的实现方式中,该方法可以应用于微内核架构,第一进程可以通过第一函数调用完成驱动任务、网络管理任务,和/或文件系统管理任务。
可选地,在第二方面的一种可能的实现方式中,上述的物理内存地址空间为内存管理单元MMU、内存保护单元MPU或物理地址保护PMP硬件管理的地址空间。
该种可能的实现方式中,该方法可以应用于基于MPU/PMP的小型嵌入式设备,由于在执行线程任务中,可以不用切换进程与数据拷贝,进而提升小型嵌入式设备的性能。
可选地,在第二方面的一种可能的实现方式中,上述的计算机设备为物联网IOT设备。
该种可能的实现方式中,该方法可以应用于IOT设备,由于在执行线程任务中,可以不用切换进程与数据拷贝,进而提升IOT设备的性能。
本申请第三方面提供一种计算机设备,该计算机设备包括:触发单元,用于基于第一函数触发第一系统调用,第一函数为用户态中所有进程可读可执行的函数,第一函数用于触发第一系统调用与调用第一系统服务进程中的第二函数,第一系统调用用于指示内核配置第一进程对第一系统服务进程的物理内存地址空间的第一访问权限,物理内存地址空间存储有第二函数,第二函数为实现第一系统服务进程功能的函数;接收单元,用于接收内核发送的用于响应第一系统调用的指示信息,指示信息用于指示是否已开启第一访问权限;执行单元,用于当确定指示信息用于指示已开启第一访问权限,则基于第一函数执行物理内存地址空间中的第二函数。
可选地,在第三方面的一种可能的实现方式中,上述的第一函数还用于触发第二系统调用,第二系统调用用于内核取消第一访问权限;触发单元,还用于基于第一函数触发第二系统调用,第二系统调用用于指示内核取消第一访问权限。
可选地,在第三方面的一种可能的实现方式中,上述的第一访问权限包括:第一系统服务进程中代码段的读与执行权限与第一系统服务进程中数据段的读写权限;第一系统调用还用于触发内核配置第一进程中代码段的读与执行权限与第一进程中数据段的读写权限。
可选地,在第三方面的一种可能的实现方式中,上述的计算机设备还包括:获取单元,用于获取第一任务,第一任务包括第一进程执行第二函数。
可选地,在第三方面的一种可能的实现方式中,上述的第一进程为用户进程或第二系统服务进程。
可选地,在第三方面的一种可能的实现方式中,上述的第一系统服务进程集成有用户态中的至少两个子系统服务进程,子系统服务进程为驱动进程、网络管理进程或文件系统管理进程;第二函数为至少两个子系统服务进程中一个子系统服务进程中的函数,第三函数为用户态中所有进程可读可执行的函数,第三函数用于调用为至少两个子系统服务进程中另一个子系统服务进程中的函数;执行单元,具体用于通过第二函数调用并执行第三函数,在第一进程未返回所述第一函数之前,第一访问权限不变。
可选地,在第三方面的一种可能的实现方式中,上述的计算机设备采用微内核架构,第一系统服务进程为驱动进程、网络管理进程或文件系统管理进程。
可选地,在第三方面的一种可能的实现方式中,上述的物理内存地址空间为内存管理单元MMU、内存保护单元MPU或物理地址保护PMP硬件管理的地址空间。
可选地,在第三方面的一种可能的实现方式中,上述的计算机设备为物联网IOT设备。
本申请第四方面提供一种计算机设备,该计算机设备包括:配置单元,用于响应第一进程触发的第一系统调用,配置第一进程对第一系统服务进程的物理内存地址空间的第一访问权限,物理内存地址空间存储有第二函数,第二函数为实现第一系统服务进程功能的函数,第一系统调用用于指示内核配置第一访问权限;发送单元,用于向第一进程发送指示信息,指示信息用于指示是否已开启第一访问权限,第一访问权限用于第一进程执行物理内存地址空间中的第二函数。
可选地,在第四方面的一种可能的实现方式中,上述的配置单元,具体用于当确定第一进程具有第二访问权限,且第一访问权限未开启,则配置第一访问权限,指示信息具体用于指示已开启第一访问权限,第二访问权限为调用第二函数的权限。
可选地,在第四方面的一种可能的实现方式中,上述的配置单元,还用于响应第一进程触发的第二系统调用,取消第一访问权限,第二系统调用用于指示内核取消第一访问权限。
可选地,在第四方面的一种可能的实现方式中,上述的一访问权限包括:第一系统服务进程中代码段的读与执行权限与第一系统服务进程中数据段的读写权限;第一系统调用还用于触发内核配置第一进程中代码段的读与执行权限与第一进程中数据段的读写权限。
可选地,在第四方面的一种可能的实现方式中,上述的一进程为用户进程或第二系统服务进程。
可选地,在第四方面的一种可能的实现方式中,上述的一系统服务进程集成有用户态中的至少两个子系统服务进程,子系统服务进程为驱动进程、网络管理进程或文件系统管理进程;当确定第一进程具有第二访问权限,且第一访问权限已开启,则指示信息用于指示已开启第一访问权限,且指示第一函数不启用第二系统调用,第一函数为用户态中所有进程可读可执行的函数,第一函数用于触发第一系统调用、调用第二函数以及触发第二系统调用,第二系统调用用于指示内核取消第一访问权限。
可选地,在第四方面的一种可能的实现方式中,上述的计算机设备采用微内核架构,第一系统服务进程为驱动进程、网络管理进程或文件系统管理进程。
可选地,在第四方面的一种可能的实现方式中,上述的物理内存地址空间为内存管理单元MMU、内存保护单元MPU或物理地址保护PMP硬件管理的地址空间。
可选地,在第四方面的一种可能的实现方式中,上述的计算机设备为物联网IOT设备。
本申请第五方面提供了一种计算机设备,该计算机设备执行前述第一方面或第一方面的任意可能的实现方式中的方法,或执行前述第二方面或第二方面的任意可能的实现方式中的方法。
本申请第六方面提供了一种计算机设备,包括:处理器,处理器与存储器耦合,存储器用于存储程序或指令,当程序或指令被处理器执行时,使得该计算机设备实现上述第一方面或第一方面的任意可能的实现方式中的方法,或者使得该计算机设备实现上述第二方面或第二方面的任意可能的实现方式中的方法。
本申请第七方面提供了一种通信系统架构,该通信系统架构包括如前述第一方面或第一方面的任意可能的实现方式中的第一进程,和/或如第二方面或第二方面的任意可能的实现方式中的内核。
本申请第八方面提供了一种计算机可读介质,其上存储有计算机程序或指令,当计算机程序或指令在计算机上运行时,使得计算机执行前述第一方面或第一方面的任意可能的实现方式中的方法,或者使得计算机执行前述第二方面或第二方面的任意可能的实现方式中的方法。
本申请第九方面提供了一种计算机程序产品,该计算机程序产品在计算机上执行时,使得计算机执行前述第一方面或第一方面的任意可能的实现方式、第二方面或第二方面的任意可能的实现方式中的方法。
其中,第三、第五、第六、第七、第八方面或者其中任一种可能实现方式所带来的技术效果可参见第一方面或第一方面不同可能实现方式所带来的技术效果,此处不再赘述。
其中,第四、第五、第六、第七、第八方面或者其中任一种可能实现方式所带来的技术效果可参见第二方面或第二方面不同可能实现方式所带来的技术效果,此处不再赘述。
从以上技术方案可以看出,本申请实施例具有以下优点:通过用户态中所有进程可读可执行的第一函数,可以实现第一进程通过第一函数远程调用第一系统服务进程的物理内存地址空间中存储的第二函数,进而实现第一进程执行第二函数。相较于现有技术基于IPC调用函数的方式需要上下文切换与数据拷贝,本申请实施例中第一进程调用第一系统服务进程的第二函数无需进行上下文切换和数据拷贝,从机制逻辑层面提升第一系统服务进程中第二函数的调用性能。另外,限定了第一进程需通过第一函数执行第二函数,限定了第一进程执行第二函数的场景,或理解为是限定了第一进程必须在公共区(即存储所有进程都可读可执行的第一函数)中执行第二函数。减少用户无条件执行第二函数带来的安全隐患。
附图说明
图1为本发明实施例提供的一种微内核架构的结构示意图;
图2为本申请实施例提供的系统架构的结构示意图;
图3为本申请实施例提供的进程间的函数调用方法的一个流程示意图;
图4为本申请实施例提供的指示信息的多种情况示意图;
图5为本申请实施例提供的设计阶段的一种流程示意图;
图6为本申请实施例提供的设计阶段的另一种流程示意图;
图7至图9为本申请实施例提供的计算机设备的几种结构示意图。
具体实施方式
本申请实施例提供了一种进程间的函数调用方法及相关设备,可以提升第一进程执行系统服务进程中函数的效率。
下面结合附图,对本申请的实施例进行描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。本领域普通技术人员可知,随着技术的发展和新场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。其中,在本申请实施例的描述中,除非另有说明,“/”表示或的意思,例如,A/B可以表示A或B;本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,在本申请实施例的描述中,“多个”是指两个或多于两个。
以下,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本实施例的描述中,除非另有说明,“多个”的含义是两个或两个以上。
为了便于理解本申请提供的技术方案,下面先介绍一些概念。
1、微内核与宏内核
微内核:一种操作系统内核架构,以QNX,seL4,fuchsia等为代表,通过把大部分系统服务以独立进程的方式在用户态运行,实现内核本身的“微小化”。
宏内核:一种操作系统内核架构,以Linux,Unix等为代表,通过把所有系统服务功能集中在内核,实现大而全的“宏大”内核。
2、程序与进程
程序是指令和数据的集合,可以作为目标文件保存在磁盘中,或者作为段存放在内存地址空间中。进程是指程序的运行实体。或者说,程序是指令、数据及其组织形式的描述,进程是程序的运行实体。一个进程中可以并发多个线程,每条线程并行执行不同的任务。线程可以是进程的实际运作单位,一个进程中的不同线程在切换状态上是有区分的。例如,进程A的线程X是“已切换”状态,相同进程下的线程Y可以是“非切换”状态或者“已切换状态”。或者理解为,本申请实施例是在进程的角度对第一任务进行描述。
系统程序是指控制和协调计算机设备及外部设备,支持应用软件开发和运行的系统,是无需用户干预的各种程序的集合。
应用程序是和系统软件相对应的,是用户可以使用的各种程序设计语言,以及用各种程序设计语言编制的程序的集合,分为应用软件包和用户程序。
3、内存保护单元(memory protection unit,MPU)与物理地址保护(physicalmemory protection,PMP)
MPU是ARM中配备的有效保护系统资源硬件的一种,提供了内存区域保护功能。MPU允许特权软件(如操作系统)定义内存中的区域,并为这些区域分配访问权限和属性。MPU监视中央处理器(central processing unit,CPU)和内存之间的事务,并在检测到访问违规时发出警报(触发故障异常)。MPU的主要目的是防止程序访问没有分配给它的内存。这可以防止普通程序或恶意软件程序中的无辜错误影响其他进程或操作系统本身。
PMP和MPU的功能是一样的,MPU的叫法是ARM架构,PMP叫法是risc-V架构。
4、内存管理单元(memory management unit,MMU)
MMU主要用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权、多任务多进程操作系统。
MMU是比MPU提供了功能更强大的内存保护机制,MPU只提供了内存区域保护,而MMU是在此基础上提供了虚拟地址映射技术,而且在操作上,MMU要比MPU复杂。
5、系统调用
由操作系统实现提供的所有系统调用所构成的集合即程序接口或应用编程接口(application programming interface,API)。是应用程序同系统之间的接口,也可以理解为是内核提供给用户进程的接口。
6、内核态和用户态
内核态和用户态是中央处理器(central processing unit,CPU)的两种工作状态。若一个进程执行系统调用而执行内核代码,则称该进程处于内核态;若一个进程执行用户代码,则称该进程处于用户态。其中内核态又可以称为特权态,用户态又可以称为非特权态,下文将统一采用内核态和用户态进行说明。
具体地,在ARM架构中,采用EL0表示用户态,采用EL1表示内核态;而在X86架构中,采用ring3表示用户态,采用ring0表示内核态。
如图1所示,在现有的微内核架构中,应用程序和系统程序分别以独立的进程运行在用户态,内核运行在内核态,应用程序需要通过内核访问系统程序。而由于应用程序和系统程序是相互隔离的,所以系统程序无法访问应用程序的物理内存地址空间,造成微内核架构的性能较低。
在微内核架构中,用户进程与系统服务进程之间主要通过IPC的方式进行通信,进而实现进程之间的安全隔离。对于用户进程需要调用系统服务进程中函数的场景中,用户进程会通过IPC的方式将函数的入参数据发送给系统服务进程。该过程中会进行入参数据拷贝,通常是两次入参数据拷贝,第一次将入参数据从用户进程拷贝至内核数据段,第二次将入参数据从内核数据段拷贝至系统服务进程数据段,进而系统服务进程根据该入参数据运行函数。
然而,上述基于IPC调用函数的方式会随着传入数据量的增加使得开销增加,从而影响设备性能。
为了解决上述问题,本申请提供了一种进程间的函数调用方法,通过用户态中所有进程可读可执行的第一函数,可以实现第一进程远程调用第一系统服务进程的物理内存地址空间中存储的第二函数,进而实现第一进程执行第二函数。相较于现有技术基于IPC调用函数所带来的上下文切换与数据拷贝,本申请实施例中调用第一系统服务进程的第二函数无需进行进程切换、上下文切换以及数据拷贝,从机制逻辑层面提升第一系统服务进程的函数的调用性能。
首先,对本申请实施例提供的系统架构进行说明,如图2所示,在本申请实施例提供的系统架构包括:第一进程、第一系统服务进程、用户态公共区、内核以及硬件。
其中,第一进程包括代码段与数据段,第一系统服务进程包括代码段与数据段。数据段可以理解为是与代码段相对应的概念,该数据段通常data段、数据只读段以及由符号启始的区块(block started by symbol,BSS)段,数据只读段用来存放程序(第一程序或第一系统服务程序)中已初始化的(非0)全局变量和静态局部变量。数据段的起始位置由链接定位文件确认,大小在编译链接时自动分配。BSS段通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域。代码段在内存中被映射为只读且可执行。它是由编译器在编译链接时自动计算的。通常是用来存放程序(第一程序或第一系统服务程序)执行的指令。
本申请实施例中的第一进程可以是用户进程,也可以是第二系统服务进程。第一系统服务进程与第二系统进程可以包括驱动进程、网络管理进程、文件系统管理进程或内存管理进程等,具体此处不做限定。进一步的,第一系统服务进程与第二系统服务进程的类型(例如:驱动、网络管理与文件系统管理)可以相同或不同。例如:第一系统服务进程与第二系统服务进程都可以是驱动进程。又例如:第一系统服务进程为网络管理进程,第二系统服务进程为驱动进程。
用户态公共区是指用户态中所有进程可读可执行的区域。该用户态公共区包括:第一系统服务进程调用入口函数模块、系统调用入口函数模块以及公共函数库模块。其中,第一系统服务进程调用入口函数模块用于存放第一系统服务进程对应的调用入口函数,该调用入口函数用于调用系统指示内核配置或取消第一进程对第一系统服务进程的物理内存地址空间的访问权限,还用于调用第一系统服务进程中该物理内存地址空间存储的系统服务函数。公共函数库模块用于向用户态进程提供公共的函数,例如公共函数库包括:libc库(例如glibc、musl libc库)或posix库等中的至少一种。
内核是指操作系统的核心,用于管理系统资源。内核中的用户态系统服务管理模块主要用于基于当前第一系统服务进程的状态配置第一系统服务进程的物理内存地址空间的访问权限。基于第一进程的权限对第一系统服务进程的物理内存地址空间的权限进行切换(即开启访问权限与关闭访问权限之间的切换)。
硬件包括CPU与内存保护单元(MPU/PMP)。其中,内存保护单元主要用于设置物理内存被读写的能力。或者理解为是设置物理内存地址空间的访问权限。其中,内存保护单元也可以是功能减少的MMU,具体此处不做限定。另外,若第一系统服务进程为驱动进程,则硬件还可以包括输入/输出(input/output,I/O)内存区,I/O内存区是指输入输出设备对应的内存区。
可选地,一种类型的系统服务位于一个系统服务进程中,以第一系统服务进程是驱动进程为例,该驱动进程中可以包括一个或多个驱动,也可以包括全部用户态驱动的代码。其中,对于驱动进程包括一个驱动的情况,可以理解为该系统架构为微内核系统架构。另外,驱动系统服务的一部分可以在用户态的驱动进程中,驱动系统服务的另一部分可以在内核中,该种情况下可以理解为是混合内核系统架构。例如:驱动系统服务包括USB驱动、串口驱动与网络驱动。则USB驱动与串口驱动可以在用户态中以进程的方式体现,网络驱动可以放入内核的系统管理中。可以理解的是,这里以驱动系统服务包括的三个驱动为例进行的示例性描述。当然,这种情况下,当第一进程为第二系统服务进程的情况下,由于一种类型的系统服务位于一个系统服务进程中,因此,第二系统服务进程与第一系统服务进程属于不同类型的系统服务进程。
因为内存保护单元对第一系统服务进程的保护与限制,第一进程不能直接调用第一系统服务进程中的函数以及访问第一系统服务进程中的数据。本申请实施例引入系统调用入口函数,待内核中的用户态系统服务管理模块执行权限切换后,第一进程可以远程调用第一系统服务进程中的系统服务函数并执行。
其中,本申请实施例提供的通信架构可以应用于英特尔Intel架构、ARM架构、AARCH64架构、Risc-V架构等多种架构的平台中。其中,对于架构中支持内存保护单元(MPU/PMP)且支持用户态与内核态的芯片中,下述优点更为明显。另外,该架构还适用于基于实地址运行的小型操作系统。
一方面,第一进程可以通过远程调用入口函数的方式执行第一系统服务进程中的系统服务函数,减少现有技术中由于进程切换或数据拷贝带来的额外开销。另一方面,由于远程调用入口函数位于用户态公共区中,可以被用户态的所有进程可读可执行,已保证在调用该入口函数时,避免系统调用导致用户进程中代码段不可读带来的处理异常。另一方面,内核中的系统管理模块可以对第一系统服务进程的物理内存地址空间的访问权限进行配置,从而可以保证第一进程与第一系统服务进程的安全隔离。
下面结合上述图2的系统架构以及附图对本申请实施例的进程间的函数调用方法进行详细的介绍。
请参阅图3,本申请实施例提供的进程间的函数调用方法一个实施例,该方法可以应用于计算机设备,也可以应用于计算机设备的部件(例如处理器、芯片、或芯片系统等),该实施例包括步骤301至步骤306。
本申请实施例中,该计算机设备可以是一种用于服务用户的终端设备,或者云端设备。终端设备可以是物联网(internet of things,IOT)设备,例如包括头戴显示设备(head mount display,HMD)、该头戴显示设备可以是虚拟现实(virtual reality,VR)盒子与终端的组合,VR一体机,个人计算机(personal computer,PC),增强现实(augmentedreality,AR)设备,混合现实(mixed reality,MR)设备等,该终端设备还可以包括智能电话(smart phone)、个人数字助理(personal digital assistant,PDA)、平板型电脑、膝上型电脑(laptop computer)、个人电脑(personal computer,PC)、车载终端、耳机、智能手表、仪器仪表、摄像头等,具体此处不做限定。
步骤301,第一进程基于第一函数触发第一系统调用。
本申请实施例中的第一进程可以是用户进程,也可以是第二系统服务进程,具体此处不做限定。第一系统服务进程与第二系统服务进程的关系可以参考前述图2所示架构中的描述,此处不再赘述。
本申请实施例中的第一函数可以存储在图2所示架构的用户态系统服务进程调用入口函数模块中,或者存储在用户态中所有进程的可读可执行区域中即可。或者理解为该第一函数为用户态中的所有进程可读可执行的函数。该第一函数用于触发第一系统调用与调用第一系统服务进程中的第二函数,第一系统调用用于指示内核配置第一进程访问第一系统服务进程的物理内存地址空间的第一访问权限,该物理内存地址空间存储有第二函数。该第二函数为实现第一系统服务进程功能的函数。
可选地,第一系统调用用于指示内核将第一系统进程中的代码段与数据段配置为可读可写可执行(即第一访问权限)。另外,为了保证后续第二函数的调用安全性,将第一进程中数据段配置为可读可写,将第一进程中代码段不可读不可执行。
可选地,该第一函数是由第一系统服务进程的开发人员编写的。进一步的,第一进程的开发人员对第一函数具有可读可执行权限,但不具有开发权限。换句话说,第一函数用于调用系统服务函数所在的第一系统服务进程的开发人员才对第一函数有开发权限。
由于第一进程无法直接通过修改内存保护单元的寄存器的方式对物理内存地址空间的第一访问权限进行修改,但是内核可以修改内存保护单元对物理内存地址空间的第一访问权限。因此第一进程可以通过第一函数的第一系统调用完成第一访问权限的配置。
可选地,若第一进程为用户进程,则第一函数也可以理解为是由第一进程中应用函数所调用的函数。第一进程基于第一函数触发第一系统调用,可以理解为是第一进程执行第一进程中的应用函数,该应用函数调用该第一函数触发第一系统调用。
可选地,第一进程获取用户输入的第一任务,该第一任务是第一进程执行第二函数。第一进程获取第一任务之后,触发第一进程中第一任务对应的应用函数调用第一函数,进入第一函数之后,首先调用第一系统调用。
步骤302,内核响应第一系统调用,配置第一进程对第一系统服务进程的物理内存地址空间的第一访问权限。
用户进程触发第一系统调用之后,由于第一系统调用用于指示内核配置第一进程访问第一系统服务进程的物理内存地址空间的第一访问权限,内核响应该第一系统调用,配置第一访问权限。该第一访问权限可以包括:第一系统进程中的代码段与数据段配置为可读可写可执行权限。
可选地,内核配置第一访问权限可以包括:内核可以将第一系统服务进程的代码段设置为可读可执行,对第一系统服务进程的数据段设置为可读可写。另外,为了保证第二函数的调用安全性,可以将第一进程的代码段配置为不可读不可执行。
可选地,若第一系统服务进程为驱动进程,则内核还可以将对应图2中的I/O内存区配置为可读写状态,从而方便外接设备的接入。
可选地,为了保证系统的安全,用户进程触发第一系统调用之后,内核可以对第一进程进行鉴权(即判断是否有第二访问权限)。若第一进程具有第二访问权限,且第一访问权限未开启,则内核配置第一访问权限。其中,该第二访问权限可以理解为是第一系统服务进程的开发人员在设计阶段设置的第二函数的调用权限。
可选地,上述的鉴权依据可以是第三开发人员设置的32比特信息,该信息的每一位用于指示不同进程是否具有第二访问权限,1表示具有第二访问权限,0表示不具有第二访问权限。
步骤303,内核向第一进程发送指示信息。相应的,第一进程接收内核发送的指示信息。
内核配置第一进程对第一系统服务进程的物理内存地址空间的第一访问权限之后,内核可以向第一进程发送指示信息,指示信息的情况有多种,下面分别描述:
第一种:指示信息用于指示已开启第一访问权限。
这种方式可以理解为是内核已配置该第一访问权限,配置的时机可以是在接收第一系统调用之后,也可以在接收第一系统调用之前,具体此处不做限定。若指示信息用于指示已开启第一访问权限,则执行步骤304。
可选地,该种方式也可以理解为该第一进程具有第二访问权限,且内核已开启第一访问权限,则指示信息用于指示已开启第一访问权限。
另外,若配置第一访问权限的时机在第一进程触发第一系统调用之前,则该指示信息除了用于指示已开启第一访问权限之外,还可以用于指示第一函数不启用第二系统调用。该种方式应用于第一系统服务进程集成有至少两个子系统服务进程(驱动进程、网络管理进程或文件系统管理进程等)的情况,即第二函数中嵌套有第三函数,第三函数与第一函数的属性相同(例如,第三函数也是用户态中所有进程可读可执行的函数,第三函数用于触发第一系统调用与第二系统调用),在第三函数执行结束后返回第一函数之前,由于第二函数的执行还需要该第一访问权限,并不用取消第一访问权限,通过指示信息还用于指示第一函数不启用第二系统调用的方式,避免重复开启关闭第一访问权限。也可以理解为是,在第一进程未返回第一函数之前,第一访问权限不变。
上述也可以理解为:在嵌套场景下,执行第三函数之后,由于还要返回至第一函数,为了避免多次的系统调用(基第一访问权限的开启、关闭、再开启与再关闭),在一个线程任务中,执行域(即执行任务所用到的物理内存地址空间)不变的情况下,第一访问权限可以不用改变。
或者理解为,在有嵌套函数(即一个函数中包括另一个函数)且嵌套函数在同一物理内存地址空间的场景中,避免每次执行一个函数的前后需要调用两次系统调用(一次开启访问权限,一次取消访问权限),一方面节省由于多次系统调用带来的能耗。另一方面,提升嵌套函数的执行效率。
第二种:指示信息用于指示未开启第一访问权限。
该种方式中,可以理解为是内核未配置第一访问权限。若指示信息用于指示未开启第一访问权限,则返回第一函数。
可选地,该种方式也可以理解为是该第一进程不具有第二访问权限(可参考前面的描述,此处不再赘述),则指示信息用于指示未开启第一访问权限,或者指示该第一进程没有第二访问权限。
可选地,本步骤中的指示信息多种情况可以参考图4,指示信息包括上述的一种情况与第二种情况,第二种情况又可以分为两种子情况:一种子情况是已开启第一访问权限,且需要第一函数调用第二系统调用(或者理解为是需要关闭权限)。另一种子情况是已开启权限,且不需要第一函数调用第二系统调用(或者理解为是前面所指的嵌套函数等情况,不需要关闭权限)。
步骤304,当确定指示信息用于指示已开启第一访问权限,则第一进程基于第一函数执行物理内存地址空间中的第二函数。
当确定指示信息用于指示已开启第一访问权限,即表示第一进程有访问第一系统服务进程的物理内存地址空间的权限,则第一进程可以基于第一函数执行第一系统服务进程的物理内存地址空间中存储的第二函数,该第二函数为实现第一系统服务进程功能的函数。
该步骤也可以理解为,第一系统调用结束后,返回至第一函数。且由于第一进程具有第一访问权限,则跳转至第二函数并执行。
可选地,第一进程执行第二函数可以理解为是第一进程执行第一任务,该第一任务包括第一进程执行第二函数,或者第一任务是需要通过执行第二函数所完成的。
可选地,若第一进程是用户进程,第一系统服务进程是网络管理进程,则第二函数的作用是接收/发送网络数据。若第一进程是用户进程,第一系统服务进程是文件系统管理进程,则第二函数的作用是对文件的读写。若第一进程是用户进程,第一系统服务进程是驱动进程,则第二函数的作用是支持I/O设备。
步骤305,第一进程基于第一函数触发第二系统调用。本步骤是可选地。
可选地,第一进程执行第二函数之后,可以基于第一函数触发第二系统调用。该第二系统调用用于指示内核取消第一访问权限。
该步骤也可以理解为是,第二函数执行结束之后返回至第一函数,随后触发第二系统调用。
步骤306,内核响应第二系统调用,取消第一访问权限。本步骤是可选地。
第一进程触发第二系统调用之后,内核响应该第二系统调用,取消第一访问权限。
可选地,若第一系统调用触发内核配置的第一访问权限具体包括:内核可以将第一系统服务进程的代码段与数据段设置为可读可写可执行,将第一进程的数据段设置为可读可写。将第一进程的代码段配置为可读不可执行。则第二系统调用用于取消第一访问权限。或者理解为是将第一系统进程中的代码段与数据段设置为不可读不可写不可执行。进一步的,还可以将第一进程中数据段可读可写,将第一进程中代码段可读可执行。
可选地,完成第二系统调用之后,返回第一函数。进一步的,若第一进程为用户进程,则返回至用于调用第一函数的应用函数。
在一种可能实现的方式中,本申请实施例提供的进程间的函数调用方法可以包括步骤301至步骤304。在另一种可能实现的方式中,本申请实施例提供的进程间的函数调用方法可以包括步骤301至步骤306。
可选地,在执行图3所示实施例前,可以先判断用户进程获取的第一任务是否满足第一条件,若满足第一条件,则执行图3所示实施例。该第一条件可以理解为是该第一任务是否处于第一进程,若是则执行图3所示实施例。若该第一任务是处于内核态或者是用户态的系统服务进程中,则内核向第一进程发送如上述步骤303中第一种情况下的指示信息,该指示信息除了用于指示已开启访问权限之外,还可以用于指示第一函数不启用第二系统调用。换句话说,该任务所在的进程本身对物理内存地址空间就具有访问权限,不必浪费再做系统调用所带来的开销。
本申请实施例中,通过用户态中所有进程可读可执行的第一函数,可以实现第一进程通过第一函数远程调用第一系统服务进程的物理内存地址空间中存储的第二函数,进而实现第一进程执行第二函数。相较于现有技术基于IPC调用函数的方式需要上下文切换与数据拷贝,本申请实施例中调用第一系统服务进程的第二函数无需进行上下文切换和数据拷贝,从机制逻辑层面提升第一系统服务进程的函数调用的性能。另外,在对于有嵌套函数(即一个函数中包括另一个函数)且嵌套函数在同一物理内存地址空间的场景中,避免每次执行一个函数的前后需要调用两次系统调用(一次开启访问权限,一次取消访问权限),一方面节省由于多次系统调用带来的能耗。另一方面,提升嵌套函数的执行效率。另外,限定了第一进程需通过第一函数执行第二函数,限定了第一进程执行第二函数的场景,或理解为是限定了第一进程必须在公共区(即存储所有进程都可读可执行的第一函数)中执行第二函数。减少用户无条件执行第二函数带来的安全隐患。
另外,在设计阶段,可以通过图5的以下步骤使得第一进程可以通过第一函数的方式远程调用系统服务进程的物理内存地址空间中存储的第二函数。
步骤501,编译操作系统、第一进程、公共函数库以及第一系统服务进程的代码。
本实施例中第一进程的描述可参考前述图3所示实施例中的描述,此处不再赘述,本实施例仅以第一进程是用户进程为例进行示例性说明。
其中,由第一开发人员编译操作系统的代码,由第二开发人员编译第一进程的代码,由第三开发人员编译第一系统服务进程的代码。由第四开发人员编译公共函数库的代码。另外,对于公共函数库中的远程调用入口函数库是由第一系统服务进程对应的第三开发人员设计,或者理解为是第三开发人员对第一进程提供的调用第二函数的入口。
可选地,第三开发人员开发的远程调用入口函数的代码,并将第一函数编译链接至系统的公共函数库。进一步的,为了确保安全隔离,各个进程由各个开发人员自己开发,但是有统一的代码模板,以方便统一各个进程中函数的调用过程。
本申请实施例中的编译是指将文件变为二进制文件。链接是指将各个代码段放到一起,将各个数据段放到一起,或者理解为是代码段或数据段的整合过程。编译链接可以将第一进程、第一系统服务进程以及内核之间分别进行隔离。若一类系统服务以一个进程的方式体现,例如:所有驱动以一个驱动进程的方式体现,则该驱动进程中的各个驱动之间不隔离。
步骤502,将操作系统的代码段和数据段链接至内存的第一地址空间。
第一开发人员将操作系统的代码段和数据段链接至内存的第一地址空间。
进一步的,本申请实施例中的地址空间(第一地址空间、第二地址空间、第三地址空间以及第四地址空间)包括代码区与数据区,其中代码区用于存放代码段,数据区用于存放数据段。或理解为,代码段和数据段在地址空间中是分开的。
步骤503,将第一进程的代码段和数据段链接至内存的第二地址空间。
第二开发人员将第一进程的代码段和数据段链接至内存的第二地址空间。
步骤504,将公共函数库代码链接至内存的第三地址空间。
第四开发人员将公共函数库代码链接至内存的第三地址空间。第三开发人员将第一系统服务进程对应的远程调用入口函数编译链接至公共函数库。
步骤505,将第一系统服务进程的代码段和数据段链接至内存的第四地址空间。
第三开发人员将第一系统服务进程的代码段和数据段链接至内存的第四地址空间。
可选地,第三开发人员在开发第一系统服务进程时可以指定哪些进程具有调用远程调用入口函数的权限(即图3所示实施例中的第二访问权限),并且在运行第一系统服务进程的过程中无法修改。进而保证对具有第二访问权限的进程可以在图3所示实施例中的鉴权成功。
可选地,第三开发人员通过32比特的信息指示各个进程是否具有第二访问权限,1表示可访问,0表示不可访问。
其中,本实施例中的各个开发人员可以相同或不同,例如,对于一个厂商生产的应用程序(APP)与驱动,则可以由一个开发人员开发设计。当然,为了保证各个进程与内核之间的隔离,以及各个进程之间的隔离,本申请中的第一开发人员、第二开发人员、第三开发人员以及第四开发人员可以是不同的开发人员。
示例性的,请参阅图6,是图5所示实施例的另一种示意图。其中,操作系统的代码段是内核态可读可执行(machine mode readable executadle,MRX),操作系统的数据段是内核态可读可写(machine mode readable writable,MRW)。第一进程的代码段是用户态可读可执行(user mode readable executadle,URX),第一进程的数据段是用户态可读可写(user mode readable writable,URW)。第一系统服务进程的代码段是URX与MRX。第一系统服务进程的数据段是URW与MRW。远程调用接口(即远程调用入口函数)代码段是URX。
本实施例中,通过第三开发人员对其他进程设计的用于调用第二函数的远程调用入口函数(可以理解为是图3实施例中的第一函数),可以实现第一进程通过远程调用入口函数调用第一系统服务进程的物理内存地址空间中存储的第二函数,进而实现第一进程执行第二函数。相较于现有技术基于IPC调用函数的方式需要上下文切换与数据拷贝,本申请实施例中调用第一系统服务进程的第二函数无需进行上下文切换和数据拷贝,从机制逻辑层面提升第一系统服务进程的函数调用的性能。另外,限定了第一进程需通过第一函数执行第二函数,限定了第一进程执行第二函数的场景,或理解为是限定了第一进程必须在公共区(即存储所有进程都可读可执行的第一函数)中执行第二函数。减少用户无条件执行第二函数带来的安全隐患。
上面对本申请实施例中的系统配置处理方法进行了描述,下面对本申请实施例中的计算机设备进行描述,请参阅图7,本申请实施例中计算机设备的一个实施例包括:
触发单元701,用于基于第一函数触发第一系统调用,所述第一函数为用户态中所有进程可读可执行的函数,所述第一函数用于触发所述第一系统调用与调用第一系统服务进程中的第二函数,所述第一系统调用用于指示所述内核配置所述第一进程对所述第一系统服务进程的物理内存地址空间的第一访问权限,所述物理内存地址空间存储有所述第二函数,所述第二函数为实现所述第一系统服务进程功能的函数;
接收单元702,用于接收所述内核发送的用于响应所述第一系统调用的指示信息,所述指示信息用于指示是否已开启所述第一访问权限;
执行单元703,用于当确定所述指示信息用于指示已开启所述第一访问权限,则基于所述第一函数执行所述物理内存地址空间中的所述第二函数。
可选地,该计算机设备还可以包括:获取单元704,用于获取第一任务,所述第一任务包括所述第一进程执行所述第二函数。
本实施例中,计算机设备中各单元所执行的操作与前述图2至图6所示实施例中描述的类似,此处不再赘述。
本实施例中,通过用户态中所有进程可读可执行的第一函数,执行单元703可以实现第一进程通过第一函数远程调用第一系统服务进程的物理内存地址空间中存储的第二函数,进而实现第一进程执行第二函数。相较于现有技术基于IPC调用函数的方式需要进程切换与数据拷贝,本申请实施例中第一进程调用第一系统服务进程的第二函数无需进行进程切换和数据拷贝,从机制逻辑层面提升第一系统服务进程中第二函数的调用性能。
请参阅图8,本申请实施例中计算机设备的另一个实施例包括:
配置单元801,用于响应第一进程触发的第一系统调用,配置所述第一进程对第一系统服务进程的物理内存地址空间的第一访问权限,所述物理内存地址空间存储有第二函数,所述第二函数为实现所述第一系统服务进程功能的函数,所述第一系统调用用于指示所述内核配置所述第一访问权限;
发送单元802,用于向所述第一进程发送指示信息,所述指示信息用于指示是否已开启第一所述访问权限,所述第一访问权限用于所述第一进程基于所述第一函数执行所述物理内存地址空间中的所述第二函数。
本实施例中,计算机设备中各单元所执行的操作与前述图2至图6所示实施例中描述的类似,此处不再赘述。
本实施例中,配置单元801可以响应第一进程触发的系统调用配置第一访问权限,发送单元802发送指示信息的方式,指示第一访问权限已开启,进而第一进程可以通过第一访问权限调用并执行第一系统服务进程的物理内存地址空间存储的第二函数。相较于现有技术基于IPC调用函数的方式需要进程切换与数据拷贝,本申请实施例中第一进程调用第一系统服务进程的第二函数无需进行进程切换和数据拷贝,从机制逻辑层面提升第一系统服务进程中第二函数的调用性能。
参阅图9,本申请提供的另一种计算机设备的结构示意图。该计算机设备可以包括处理器901、存储器902和通信接口903。该处理器901、存储器902和通信接口903通过线路互联。其中,存储器902中存储有程序指令和数据。
存储器902中存储了前述图2至图6所示对应的实施方式中,由计算机设备执行的步骤对应的程序指令以及数据。对于图2至图4所示实施例来说,该存储器902中包括有第一系统服务进程对应的物理内存地址空间。对于图5的实施例来说,该存储器902中包括第一地址空间、第二地址空间、第三地址空间以及第四地址空间,其中地址空间的描述可参考前述图5所示实施例的描述,此处不再赘述。
处理器901,用于执行前述图2至图6所示实施例中任一实施例所示的由计算机设备执行的步骤。
通信接口903可以用于进行数据的接收和发送,用于执行前述图2至图6所示实施例中任一实施例中与获取、发送、接收相关的步骤。
一种实现方式中,计算机设备可以包括相对于图9更多或更少的部件,本申请对此仅仅是示例性说明,并不作限定。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。
当使用软件实现所述集成的单元时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘(solid state disk,SSD))等。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的术语在适当情况下可以互换,这仅仅是描述本申请的实施例中对相同属性的对象在描述时所采用的区分方式。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,以便包含一系列单元的过程、方法、系统、产品或设备不必限于那些单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它单元。

Claims (40)

1.一种进程间的函数调用方法,其特征在于,所述方法应用于计算机设备,所述方法包括:
第一进程基于第一函数触发第一系统调用,所述第一函数为用户态中所有进程可读可执行的函数,所述第一函数用于触发所述第一系统调用与调用第一系统服务进程中的第二函数,所述第一系统调用用于指示所述内核配置所述第一进程对所述第一系统服务进程的物理内存地址空间的第一访问权限,所述物理内存地址空间存储有所述第二函数,所述第二函数为实现所述第一系统服务进程功能的函数;
所述第一进程接收所述内核发送的用于响应所述第一系统调用的指示信息,所述指示信息用于指示是否已开启所述第一访问权限;
当确定所述指示信息用于指示已开启所述第一访问权限,则所述第一进程基于所述第一函数执行所述第二函数。
2.根据权利要求1所述的方法,其特征在于,所述第一函数还用于触发第二系统调用,所述第二系统调用用于所述内核取消所述第一访问权限;
所述第一进程执行所述第二函数之后,所述方法还包括:
所述第一进程基于所述第一函数触发第二系统调用,所述第二系统调用用于指示所述内核取消所述第一访问权限。
3.根据权利要求1或2所述的方法,其特征在于,所述第一访问权限包括:所述第一系统服务进程中代码段的读与执行权限与所述第一系统服务进程中数据段的读写权限;所述第一系统调用还用于触发所述内核配置所述第一进程中代码段的读与执行权限与所述第一进程中数据段的读写权限。
4.根据权利要求1至3中任一所述的方法,其特征在于,所述第一进程基于第一函数触发第一系统调用之前,所述方法还包括:
所述第一进程获取第一任务,所述第一任务包括所述第一进程执行所述第二函数。
5.根据权利要求1至4中任一所述的方法,其特征在于,所述第一进程为用户进程或第二系统服务进程。
6.根据权利要求1至5中任一所述的方法,其特征在于,所述第一系统服务进程集成有所述用户态中的至少两个子系统服务进程,所述子系统服务进程为驱动进程、网络管理进程或文件系统管理进程;所述第二函数为所述至少两个子系统服务进程中一个子系统服务进程中的函数,所述第三函数为所述用户态中所有进程可读可执行的函数,所述第三函数用于调用为所述至少两个子系统服务进程中另一个子系统服务进程中的函数;
所述第一进程基于所述第一函数执行所述物理内存地址空间中的所述第二函数,包括:
所述第一进程通过所述第二函数调用并执行所述第三函数,在所述第一进程未返回所述第一函数之前,所述第一访问权限不变。
7.根据权利要求1至5中任一项所述的方法,其特征在于,所述方法应用于微内核架构,所述第一系统服务进程为驱动进程、网络管理进程或文件系统管理进程。
8.根据权利要求1至7中任一项所述的方法,其特征在于,所述物理内存地址空间为内存管理单元MMU、内存保护单元MPU或物理地址保护PMP硬件管理的地址空间。
9.根据权利要求1至8中任一项所述的方法,其特征在于,所述计算机设备为物联网IOT设备。
10.一种进程间的函数调用方法,其特征在于,所述方法应用于计算机设备,所述方法包括:
内核响应第一进程触发的第一系统调用,配置所述第一进程对第一系统服务进程的物理内存地址空间的第一访问权限,所述物理内存地址空间存储有第二函数,所述第二函数为实现所述第一系统服务进程功能的函数,所述第一系统调用用于指示所述内核配置所述第一访问权限;
所述内核向所述第一进程发送指示信息,所述指示信息用于指示是否已开启第一所述访问权限,所述第一访问权限用于所述第一进程执行所述第二函数。
11.根据权利要求10所述的方法,其特征在于,所述配置所述第一进程对第一系统服务进程的物理内存地址空间的第一访问权限,包括:
当确定所述第一进程具有第二访问权限,且所述第一访问权限未开启,则所述内核配置所述第一访问权限,所述指示信息具体用于指示已开启所述第一访问权限,所述第二访问权限为调用所述第二函数的权限。
12.根据权利要求10或11所述的方法,其特征在于,所述方法还包括:
所述内核响应所述第一进程触发的第二系统调用,取消所述第一访问权限,所述第二系统调用用于指示所述内核取消所述第一访问权限。
13.根据权利要求10至12中任一所述的方法,其特征在于,所述第一访问权限包括:所述第一系统服务进程中代码段的读与执行权限与所述第一系统服务进程中数据段的读写权限;所述第一系统调用还用于触发所述内核配置所述第一进程中代码段的读与执行权限与所述第一进程中数据段的读写权限。
14.根据权利要求10至13中任一所述的方法,其特征在于,所述第一进程为用户进程或第二系统服务进程。
15.根据权利要求10至14中任一项所述的方法,其特征在于,所述第一系统服务进程集成有所述用户态中的至少两个子系统服务进程,所述子系统服务进程为驱动进程、网络管理进程或文件系统管理进程;
当确定所述第一进程具有所述第二访问权限,且所述第一访问权限已开启,则所述指示信息用于指示已开启所述第一访问权限,且指示第一函数不启用第二系统调用,所述第一函数为用户态中所有进程可读可执行的函数,所述第一函数用于触发所述第一系统调用、调用所述第二函数以及触发所述第二系统调用,所述第二系统调用用于指示所述内核取消所述第一访问权限。
16.根据权利要求10至14中任一项所述的方法,其特征在于,所述方法应用于微内核架构,所述第一系统服务进程为驱动进程、网络管理进程或文件系统管理进程。
17.根据权利要求10至16中任一项所述的方法,其特征在于,所述物理内存地址空间为内存管理单元MMU、内存保护单元MPU或物理地址保护PMP硬件管理的地址空间。
18.根据权利要求10至17中任一项所述的方法,其特征在于,所述计算机设备为物联网IOT设备。
19.一种计算机设备,其特征在于,所述计算机设备包括:
触发单元,用于基于第一函数触发第一系统调用,所述第一函数为用户态中所有进程可读可执行的函数,所述第一函数用于触发所述第一系统调用与调用第一系统服务进程中的第二函数,所述第一系统调用用于指示所述内核配置所述第一进程对所述第一系统服务进程的物理内存地址空间的第一访问权限,所述物理内存地址空间存储有所述第二函数,所述第二函数为实现所述第一系统服务进程功能的函数;
接收单元,用于接收所述内核发送的用于响应所述第一系统调用的指示信息,所述指示信息用于指示是否已开启所述第一访问权限;
执行单元,用于当确定所述指示信息用于指示已开启所述第一访问权限,则基于所述第一函数执行所述第二函数。
20.根据权利要求19所述的设备,其特征在于,所述第一函数还用于触发第二系统调用,所述第二系统调用用于所述内核取消所述第一访问权限;
所述触发单元,还用于基于所述第一函数触发第二系统调用,所述第二系统调用用于指示所述内核取消所述第一访问权限。
21.根据权利要求19或20所述的设备,其特征在于,所述第一访问权限包括:所述第一系统服务进程中代码段的读与执行权限与所述第一系统服务进程中数据段的读写权限;所述第一系统调用还用于触发所述内核配置所述第一进程中代码段的读与执行权限与所述第一进程中数据段的读写权限。
22.根据权利要求19至21中任一所述的设备,其特征在于,所述计算机设备还包括:
获取单元,用于获取第一任务,所述第一任务包括所述第一进程执行所述第二函数。
23.根据权利要求19至22中任一所述的设备,其特征在于,所述第一进程为用户进程或第二系统服务进程。
24.根据权利要求19至23中任一所述的设备,其特征在于,所述第一系统服务进程集成有所述用户态中的至少两个子系统服务进程,所述子系统服务进程为驱动进程、网络管理进程或文件系统管理进程;所述第二函数为所述至少两个子系统服务进程中一个子系统服务进程中的函数,所述第三函数为所述用户态中所有进程可读可执行的函数,所述第三函数用于调用为所述至少两个子系统服务进程中另一个子系统服务进程中的函数;
所述执行单元,具体用于通过所述第二函数调用并执行所述第三函数,在所述第一进程未返回所述第一函数之前,所述第一访问权限不变。
25.根据权利要求19至23中任一项所述的设备,其特征在于,所述计算机设备采用微内核架构,所述第一系统服务进程为驱动进程、网络管理进程或文件系统管理进程。
26.根据权利要求19至25中任一项所述的设备,其特征在于,所述物理内存地址空间为内存管理单元MMU、内存保护单元MPU或物理地址保护PMP硬件管理的地址空间。
27.根据权利要求19至26中任一项所述的设备,其特征在于,所述计算机设备为物联网IOT设备。
28.一种计算机设备,其特征在于,所述计算机设备包括:
配置单元,用于响应第一进程触发的第一系统调用,配置所述第一进程对第一系统服务进程的物理内存地址空间的第一访问权限,所述物理内存地址空间存储有第二函数,所述第二函数为实现所述第一系统服务进程功能的函数,所述第一系统调用用于指示所述内核配置所述第一访问权限;
发送单元,用于向所述第一进程发送指示信息,所述指示信息用于指示是否已开启第一所述访问权限,所述第一访问权限用于所述第一进程执行所述第二函数。
29.根据权利要求28所述的设备,其特征在于,所述配置单元,具体用于当确定所述第一进程具有第二访问权限,且所述第一访问权限未开启,则配置所述第一访问权限,所述指示信息具体用于指示已开启所述第一访问权限,所述第二访问权限为调用所述第二函数的权限。
30.根据权利要求28或29所述的设备,其特征在于,所述配置单元,还用于响应所述第一进程触发的第二系统调用,取消所述第一访问权限,所述第二系统调用用于指示所述内核取消所述第一访问权限。
31.根据权利要求28至30中任一所述的设备,其特征在于,所述第一访问权限包括:所述第一系统服务进程中代码段的读与执行权限与所述第一系统服务进程中数据段的读写权限;所述第一系统调用还用于触发所述内核配置所述第一进程中代码段的读与执行权限与所述第一进程中数据段的读写权限。
32.根据权利要求28至31中任一所述的设备,其特征在于,所述第一进程为用户进程或第二系统服务进程。
33.根据权利要求28至32中任一项所述的设备,其特征在于,所述第一系统服务进程集成有所述用户态中的至少两个子系统服务进程,所述子系统服务进程为驱动进程、网络管理进程或文件系统管理进程;
当确定所述第一进程具有所述第二访问权限,且所述第一访问权限已开启,则所述指示信息用于指示已开启所述第一访问权限,且指示第一函数不启用第二系统调用,所述第一函数为用户态中所有进程可读可执行的函数,所述第一函数用于触发所述第一系统调用、调用所述第二函数以及触发所述第二系统调用,所述第二系统调用用于指示所述内核取消所述第一访问权限。
34.根据权利要求28至32中任一项所述的设备,其特征在于,所述计算机设备采用微内核架构,所述第一系统服务进程为驱动进程、网络管理进程或文件系统管理进程。
35.根据权利要求28至34中任一项所述的设备,其特征在于,所述物理内存地址空间为内存管理单元MMU、内存保护单元MPU或物理地址保护PMP硬件管理的地址空间。
36.根据权利要求28至35中任一项所述的设备,其特征在于,所述计算机设备为物联网IOT设备。
37.一种计算机设备,其特征在于,包括存储器和处理器;所述存储器存储有代码,所述处理器被配置为执行所述代码,当所述代码被执行时,所述计算机设备执行如权利要求1至9中任一所述的方法,和/或如权利要求10至18中任一所述的方法。
38.一种通信系统架构,其特征在于,所述通信系统架构包括如前述权利要求1至9中任一项的第一进程,和/或如前述权利要求10至18中任一项的内核。
39.一种计算机可读存储介质,其特征在于,包括计算机可读指令,当所述计算机可读指令在计算机上运行时,使得所述计算机执行如权利要求1至9中任一项所述的方法,和/或如权利要求10至18中任一项所述的方法。
40.一种计算机程序产品,其特征在于,包括计算机可读指令,当所述计算机可读指令在计算机上运行时,使得所述计算机执行如权利要求1至9中任一项所述的方法,和/或如权利要求10至18中任一项所述的方法。
CN202111266347.7A 2021-10-28 2021-10-28 一种进程间的函数调用方法及相关设备 Pending CN116048827A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202111266347.7A CN116048827A (zh) 2021-10-28 2021-10-28 一种进程间的函数调用方法及相关设备
PCT/CN2022/124739 WO2023071786A1 (zh) 2021-10-28 2022-10-12 一种进程间的函数调用方法及相关设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111266347.7A CN116048827A (zh) 2021-10-28 2021-10-28 一种进程间的函数调用方法及相关设备

Publications (1)

Publication Number Publication Date
CN116048827A true CN116048827A (zh) 2023-05-02

Family

ID=86127830

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111266347.7A Pending CN116048827A (zh) 2021-10-28 2021-10-28 一种进程间的函数调用方法及相关设备

Country Status (2)

Country Link
CN (1) CN116048827A (zh)
WO (1) WO2023071786A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118034894A (zh) * 2024-04-11 2024-05-14 浪潮云信息技术股份公司 操作系统内核态定时器管理方法、电子设备及存储介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109933441B (zh) * 2019-02-28 2020-11-17 上海交通大学 微内核进程间通讯方法和系统
US11029968B1 (en) * 2019-07-31 2021-06-08 Facebook Technologies, Llc Operating system with a single kernel stack per processor
CN111949596A (zh) * 2020-08-05 2020-11-17 上海交通大学 基于mpk技术的微内核模块间通讯方法、系统及介质
CN112668008A (zh) * 2021-01-06 2021-04-16 上海湖顶大数据科技有限公司 一种基于lsm来实现动态的系统调用劫持的方法
CN113220469B (zh) * 2021-03-23 2024-04-16 黑芝麻智能科技(上海)有限公司 进程间通信方法、装置和计算机设备和计算机可读介质

Also Published As

Publication number Publication date
WO2023071786A1 (zh) 2023-05-04

Similar Documents

Publication Publication Date Title
CN109558211B (zh) 保护可信应用与普通应用的交互完整性和保密性的方法
US10949247B2 (en) Systems and methods for auditing a virtual machine
US7941813B1 (en) System and method for using virtual machine for driver installation sandbox
RU2659472C2 (ru) Внесение ошибки страницы в виртуальных машинах
US8181176B2 (en) Uniform storage device access using partial virtual machine executing within a secure enclave session
CN101297280B (zh) 隔离扩展和设备驱动程序的配置
EP3242214B1 (en) Method and device for protecting information of mcu chip
TW201941049A (zh) 用於轉換詮釋資料處理的指令的系統和方法
EP3436947B1 (en) Secure driver platform
KR20150104592A (ko) 하드웨어 디바이스에 대한 소프트웨어 인터페이스
WO2022017242A1 (zh) 在第一系统运行第二系统应用的方法、装置、设备及介质
WO2023123850A1 (zh) 一种固件可信根的实现方法、装置、设备和可读存储介质
CN107851032B (zh) 用于在容器中执行服务的计算装置、系统及方法
US8214830B2 (en) Performance in a virtualization architecture with a processor abstraction layer
CN116048827A (zh) 一种进程间的函数调用方法及相关设备
CN108345452B (zh) 一种线程管理方法及装置
CN102799480B (zh) 虚拟化系统中关闭中断的方法和装置
CN115495343A (zh) 一种安全维护方法、装置、存储介质及电子设备
KR102276696B1 (ko) 집적 회로 무선장치
US20120042100A1 (en) Systems and methods for managing memory using multi-state buffer representations
US11977889B2 (en) Method for control flow isolation with protection keys and indirect branch tracking
CN114090273A (zh) 一种进程间通信的方法、装置及计算机存储介质
JP2021530014A (ja) プログラム保護のためのJavaデバッガ遮断方法およびシステム

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