操作系统的内核函数调用方法及计算机设备技术方案

技术编号:31993859 阅读:57 留言:0更新日期:2022-01-22 18:05
本申请实施例公开了一种操作系统的内核函数调用方法及计算机设备,属于计算机技术领域。在该方法中,操作系统的API层中的每个API函数在内核层中均对应有一个内核函数,且具有对应关系的API函数和内核函数的参数相同,而目标API函数和目标内核函数正具有这种对应关系,所以,目标API函数和目标内核函数的参数相同。这样,在通过目标API函数调用目标内核函数时,不需要将目标API函数的参数传给目标内核函数,只需要在内核层将目标用户任务的运行权限从用户态修改为特权态之后,即可直接调用目标内核函数,操作比较简单,从而提高了内核函数的调用效率。数的调用效率。数的调用效率。

【技术实现步骤摘要】
操作系统的内核函数调用方法及计算机设备


[0001]本申请实施例涉及计算机
,特别涉及一种操作系统的内核函数调用方法及计算机设备。

技术介绍

[0002]汽车开放系统架构(automotive open system architecture,Autosar)操作系统(operating system,OS)包括应用程序接口(application interface,API)层和内核层,API层包括多个API函数,内核层包括多个内核函数。而且,Autosar操作系统的运行空间分为用户空间和内核空间,API函数是用户空间的用户任务能够直接使用的函数,且API函数是用户空间的用户任务调用内核函数的入口,也即是,用户空间的用户任务进入内核空间的入口。其中,用户任务也可以称为用户进程。
[0003]Autosar操作系统支持可信操作系统应用(operating system application,OSA)和非可信OSA,可信OSA运行在内核空间,非可信OSA运行在用户空间,也可以理解为,可信OSA运行在特权态,非可信OSA运行在用户态。当任一用户任务通过API函数需要调用内核函数时,API层通过访问内核数据来判断该用户任务是可信OSA的任务还是非可信OSA的任务。如果该用户任务是可信OSA的任务,那么,该用户任务能够直接调用相应的内核函数。如果该用户任务是非可信OSA的任务,那么,该用户任务需要通过syscall汇编指令向内核层发送请求,以进入内核空间,该请求携带当前需要调用的内核函数的函数标识以及该API函数的参数。内核层接收到该请求后,内核层中的异常向量表模块(trap)通过syscall_handler函数,按照该请求中携带的函数标识确定相应的内核函数,进而按照该请求中携带的参数调用该内核函数,以对该请求进行处理。待处理完成后,trap模块将处理结果返回给用户任务。
[0004]但是,由于上述方法是在trap模块中调用内核函数来实现,这个过程就需要将API函数的参数传给内核函数,操作比较复杂,从而降低了内核函数的调用效率。

技术实现思路

[0005]本申请实施例提供了一种操作系统的内核函数调用方法及计算机设备,可以解决相关技术中操作较复杂,且内核函数的调用效率较低的问题。所述技术方案如下:
[0006]第一方面,提供了一种操作系统的内核函数调用方法,所述操作系统包括应用程序接口API层和内核层,所述API层包括多个API函数,所述内核层包括多个内核函数,所述API层中的每个API函数在所述内核层中均对应有一个内核函数,且具有对应关系的API函数和内核函数的参数相同,所述方法包括:处理器确定目标用户任务为可信操作系统应用OSA的任务还是非可信OSA的任务,所述目标用户任务是指当前通过目标API函数调用目标内核函数的用户任务,所述目标API函数为所述多个API函数中的一个,所述目标内核函数为所述多个内核函数中的一个,且所述目标API函数和所述目标内核函数具有对应关系;如果所述目标用户任务为非可信OSA的任务,则所述处理器通过所述内核层将所述目标用户
任务的运行权限从用户态修改为特权态;所述处理器在所述目标用户任务的运行权限为特权态的状态下,通过所述内核层调用所述目标内核函数。
[0007]在本申请实施例中,由于目标API函数和目标内核函数具有对应关系,所以,目标API函数和目标内核函数的参数相同。这样,在通过目标API函数调用目标内核函数时,不需要将目标API函数的参数传给目标内核函数,只需要在内核层将目标用户任务的运行权限从用户态修改为特权态之后,即可直接调用目标内核函数,操作比较简单,从而提高了内核函数的调用效率。
[0008]可选地,所述处理器通过所述内核层将所述目标用户任务的运行权限从用户态修改为特权态,包括:所述处理器存储所述目标内核函数的上下文信息,所述目标内核函数的上下文信息中包括所述目标用户任务的运行权限;所述处理器通过所述内核层包括的异常向量表模块将所述目标内核函数的上下文信息中所述目标用户任务的运行权限从用户态修改为特权态。这样,所述处理器在所述目标用户任务的运行权限为特权态的状态下,通过所述内核层调用所述目标内核函数,包括:所述处理器在所述目标内核函数的上下文信息中所述目标用户任务的运行权限为特权态的状态下,通过所述内核层调用所述目标内核函数。
[0009]需要说明的是,异常向量表模块可以称为trap模块,该trap模块包括多个异常处理函数,每个异常处理函数对应一种类型的异常。在本申请实施例中,由于是因为目标用户任务的运行权限为用户态,而无法直接调用内核函数而导致的异常,这种异常可以称为内存保护异常,内存保护异常对应的异常处理函数可以称为内存保护异常处理函数,所以,异常向量表模块可以通过内存保护异常处理函数,将目标内核函数的上下文信息中目标用户任务的运行权限从用户态修改为特权态。
[0010]可选地,所述处理器通过所述内核层包括的异常向量表模块将所述目标内核函数的上下文信息中所述目标用户任务的运行权限从用户态修改为特权态,包括:所述处理器通过所述异常向量表模块确定所述目标内核函数的调用是否来自于所述API层;如果所述目标内核函数的调用来自于所述API层,则所述处理器通过所述异常向量表模块将所述目标内核函数的上下文信息中所述目标用户任务的运行权限从所述用户态修改为所述特权态。
[0011]由于本申请实施例是通过API函数来调用内核函数,从而避免通过syscall汇编指令来调用内核函数,所以,异常向量表模块将目标内核函数的上下文信息中目标用户任务的运行权限从用户态修改为特权态之前,还需要确定目标内核函数的调用是否来自于API层。如果目标内核函数的调用来自于API层,则表明当前为合法调用目标内核函数,异常向量表模块将目标内核函数的上下文信息中目标用户任务的运行权限从用户态修改为特权态。如果目标内核函数的调用不是来自于API层,则表明当前为非法调用目标内核函数,异常向量表模块将会按照异常保护流程处理。
[0012]可选地,所述处理器通过所述异常向量表模块确定所述目标内核函数的调用是否来自于所述API层,包括:所述处理器通过所述异常向量表模块获取所述API层的起始地址和结束地址;如果所述目标内核函数的返回地址位于所述起始地址与所述结束地址之间,则确定所述目标内核函数的调用来自于所述API层。
[0013]本申请实施例通过确定API层的起始地址和结束地址,从而按照目标内核函数的
返回地址能够快速地确定目标内核函数的调用是否来自于API层,进而提高内核函数的调用效率。
[0014]可选地,所述处理器在所述目标用户任务的运行权限为特权态的状态下,通过所述内核层调用所述目标内核函数之后,还包括:所述处理器确定所述目标内核函数调用完成时,将所述目标用户任务的运行权限恢复至所述用户态。
[0015]由于处理器运行目标用户任务的过程中,确定目标用户任务需要通过目标API函数来调用目标内核函数,此时,处理器会存储目标API本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种操作系统的内核函数调用方法,其特征在于,所述操作系统包括应用程序接口API层和内核层,所述API层包括多个API函数,所述内核层包括多个内核函数,所述API层中的每个API函数在所述内核层中均对应有一个内核函数,且具有对应关系的API函数和内核函数的参数相同,所述方法包括:处理器确定目标用户任务为可信操作系统应用OSA的任务还是非可信OSA的任务,所述目标用户任务是指当前通过目标API函数调用目标内核函数的用户任务,所述目标API函数为所述多个API函数中的一个,所述目标内核函数为所述多个内核函数中的一个,且所述目标API函数和所述目标内核函数具有对应关系;如果所述目标用户任务为非可信OSA的任务,则所述处理器通过所述内核层将所述目标用户任务的运行权限从用户态修改为特权态;所述处理器在所述目标用户任务的运行权限为特权态的状态下,通过所述内核层调用所述目标内核函数。2.如权利要求1所述的方法,其特征在于,所述处理器通过所述内核层将所述目标用户任务的运行权限从用户态修改为特权态,包括:所述处理器存储所述目标内核函数的上下文信息,所述目标内核函数的上下文信息中包括所述目标用户任务的运行权限;所述处理器通过所述内核层包括的异常向量表模块将所述目标内核函数的上下文信息中所述目标用户任务的运行权限从用户态修改为特权态;所述处理器在所述目标用户任务的运行权限为特权态的状态下,通过所述内核层调用所述目标内核函数,包括:所述处理器在所述目标内核函数的上下文信息中所述目标用户任务的运行权限为特权态的状态下,通过所述内核层调用所述目标内核函数。3.如权利要求2所述的方法,其特征在于,所述处理器通过所述内核层包括的异常向量表模块将所述目标内核函数的上下文信息中所述目标用户任务的运行权限从用户态修改为特权态,包括:所述处理器通过所述异常向量表模块确定所述目标内核函数的调用是否来自于所述API层;如果所述目标内核函数的调用来自于所述API层,则所述处理器通过所述异常向量表模块将所述目标内核函数的上下文信息中所述目标用户任务的运行权限从所述用户态修改为所述特权态。4.如权利要求3所述的方法,其特征在于,所述处理器通过所述异常向量表模块确定所述目标内核函数的调用是否来自于所述API层,包括:所述处理器通过所述异常向量表模块获取所述API层的起始地址和结束地址;如果所述目标内核函数的返回地址位于所述起始地址与所述结束地址之间,则确定所述目标内核函数的调用来自于所述API层。5.如权利要求1-4任一所述的方法,其特征在于,所述处理器在所述目标用户任务的运行权限为特权态的状态下,通过所述内核层调用所述目标内核函数之后,还包括:所述处理器确定所述目标内核函数调用完成时,将所述目标用户任务的运行权限恢复至所述用户态。
6.如权利要求1-5任一所述的方法,...

【专利技术属性】
技术研发人员:刘培峰
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1