首页> 中国专利> 一种应用程序运行方法和应用程序架构

一种应用程序运行方法和应用程序架构

摘要

本发明公开了一种应用程序运行方法和应用程序架构,能够实现应用程序与内核之间的通信。所述方法应用于包含有内核初始化模块、内核通信模块和业务模块的应用程序中,所述方法包括通信通道建立过程:根据预设的策略加载内核初始化模块、内核通信模块和业务模块;内核通信过程:所述内核通信模块接收所述业务模块的请求,调用内核函数处理所述请求,将处理结果返回给所述业务模块。采用本发明实施例,支持多个业务模块与内核通信,各业务模块相互独立,互不影响,如果任意一个业务模块加载失败,不影响其他业务模块的加载。系统调用保证内核通信,模块化设计保证业务独立,编译配置保证代码复用。

著录项

  • 公开/公告号CN109976820A

    专利类型发明专利

  • 公开/公告日2019-07-05

    原文格式PDF

  • 申请/专利权人 苏州浪潮智能科技有限公司;

    申请/专利号CN201910278412.4

  • 发明设计人 吴振刚;沈忠立;

    申请日2019-04-09

  • 分类号

  • 代理机构北京安信方达知识产权代理有限公司;

  • 代理人王康

  • 地址 215100 江苏省苏州市吴中区吴中经济开发区郭巷街道官浦路1号9幢

  • 入库时间 2024-02-19 12:04:31

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-03-03

    授权

    授权

  • 2019-07-30

    实质审查的生效 IPC(主分类):G06F9/4401 申请日:20190409

    实质审查的生效

  • 2019-07-05

    公开

    公开

说明书

技术领域

本发明涉及计算机技术,尤指一种应用程序运行方法和应用程序架构。

背景技术

现有技术中内核层与应用层能够通过系统调用、虚拟文件系统和ioctl接口通信:

系统调用把应用程序的请求传给内核,调用相应的内核函数完成所需的处理,将处理结果返回给所述业务模块。

在文件系统中,我们可以将对虚拟文件的读写作为与内核中实体进行通信的一种手段,通过虚拟文件可以在内核层与应用层之间进行通信。与普通文件不同的是,这些虚拟文件的内容都是动态创建的。

如果需要扩展新的功能,通常以增设ioctl()命令的方式实现内核层与应用层通信。

以上三种方法中,内核层与应用层通过虚拟文件系统和ioctl接口通信,稳定性和安全性较差,并且在某些操作系统中,比如Unix操作系统,系统调用时唯一合法的选择,此时通过虚拟文件系统和ioctl接口通信不能实现内核层与应用层通信。系统调用以其特殊性,其只有内核启动后,系统调用方才在系统中存在,即系统调用的使用必须在启动之后。但如果动态库中存在系统调用的使用,即使此函数未被使用,在内核启动之前,该库都不能被正确加载。

发明内容

为了解决上述技术问题,本发明提供了一种应用程序运行方法和应用程序架构,能够实现应用程序与内核之间的通信。

为了达到本发明目的,本发明提供了一种应用程序运行方法,所述方法应用于包含有内核初始化模块、内核通信模块和业务模块的应用程序中,所述方法包括通信通道建立过程和内核通信过程;

所述通信通道建立过程包括:根据预设的策略加载内核初始化模块、内核通信模块和业务模块;

所述内核通信过程包括:所述内核通信模块接收所述业务模块的请求,调用内核函数处理所述请求,将处理结果返回给所述业务模块。

一种示例性的实施例中,所述加载内核初始化模块包括:进行内核初始化和内核启动。

一种示例性的实施例中,所述加载内核通信模块包括:建立内核通信接口和注册接口;其中,所述内核通信接口用于应用程序主动与内核通信;所述注册接口用于内核主动与应用程序通信。

一种示例性的实施例中,所述应用程序包含多个业务模块;所述根据预设的策略加载内核初始化模块、内核通信模块和业务模块,包括:

当所述内核初始化模块加载成功后,加载所述内核通信模块,当所述内核通信模块均加载成功后,按照预设的顺序依次加载业务模块;

当所述内核初始化模块或内核通信模块均加载失败后,所述应用程序退出加载;当业务模块加载失败后,按照所述预设的顺序加载下一个业务模块。

一种示例性的实施例中,所述通信通道建立过程还包括:所述内核初始化模块复用所述业务模块中的代码;其中,所述复用的代码在业务模块中通过预定义宏实现。

一种示例性的实施例中,所述内核初始化模块复用所述业务模块中的代码,包括:内核初始化模块中的内核初始化函数在编译时通过屏蔽除导出的函数外的函数实现参数编译,并在导出函数时声明作用域为导出。

一种示例性的实施例中,所述内核初始化模块、内核通信模块和业务模块以动态链接库的形式存储。

为了达到本发明目的,本发明还提供了,所述应用程序包括内核初始化模块、内核通信模块和业务模块,其中:

所述内核初始化模块,用于内核初始化和内核启动;

所述内核通信模块,用于建立内核通信接口和注册接口;其中,所述内核通信接口用于应用程序主动与内核通信;所述注册接口用于内核主动与应用程序通信。

一种示例性的实施例中,所述内核初始化模块复用所述业务模块中的代码;其中,所述复用的代码在业务模块中通过预定义宏实现。

一种示例性的实施例中,所述内核初始化模块、内核通信模块和业务模块以动态链接库的形式存储。

与现有技术相比,本发明包括所述方法应用于包含有内核初始化模块、内核通信模块和业务模块的应用程序中,所述方法包括通信通道建立过程和内核通信过程;所述通信通道建立过程包括:根据预设的策略加载内核初始化模块、内核通信模块和业务模块,;所述内核通信过程包括:所述内核通信模块接收所述业务模块的请求,调用内核函数处理所述请求,将处理结果返回给所述业务模块。支持多个业务模块与内核通信。各业务模块相互独立,互不影响,如果任意一个业务模块加载失败,不影响其他业务模块的加载。系统调用保证内核通信,模块化设计保证业务独立,编译配置保证代码复用。

本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。

附图说明

附图用来提供对本发明技术方案的进一步理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本发明的技术方案,并不构成对本发明技术方案的限制。

图1为本发明实施例一的应用程序运行方法的流程图;

图2为本发明实施例二的应用程序运行方法的流程图;

图3为本发明实施例三的应用程序架构的结构示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。

在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

实施例一

本实施例提供了一种应用程序运行方法,如图1所示,所述该方法应用于包含有内核初始化模块、内核通信模块和业务模块的应用程序中,所述方法包括S11通信通道建立过程和S12内核通信过程;

S11、所述通信通道建立过程包括:根据预设的策略加载内核初始化模块、内核通信模块和业务模块;

S12、所述内核通信过程包括:所述内核通信模块接收所述业务模块的请求,调用内核函数处理所述请求,将处理结果返回给所述业务模块。

本发明实施例中,提出了一种应用程序运行方法,支持多个业务模块与内核通信。

其中,所述加载内核初始化模块,用于内核初始化和内核启动;所述加载内核通信模块,用于提供内核统一通信接口和提供内核消息回调函数的注册接口。

一种示例性的实施例中,所述加载内核初始化模块包括:进行内核初始化和内核启动。

一种示例性的实施例中,所述加载内核通信模块包括:建立内核通信接口和注册接口;其中,所述内核通信接口用于应用程序主动与内核通信;所述注册接口用于内核主动与应用程序通信。

一种示例性的实施例中,所述应用程序包含多个业务模块;所述根据预设的策略加载内核初始化模块、内核通信模块和业务模块,包括:

当所述内核初始化模块加载成功后,加载所述内核通信模块,当所述内核通信模块均加载成功后,按照预设的顺序依次加载业务模块;

当所述内核初始化模块或内核通信模块均加载失败后,所述应用程序退出加载;当业务模块加载失败后,按照所述预设的顺序加载下一个业务模块。

一种示例性的实施例中当所述内核初始化模块或内核通信模块均加载失败,或者业务模块加载失败后,均可以发出相应的警示;所述预设的策略还包括:根据预先设置选择是否加相应的业务模块。

一种示例性的实施例中,所述通信通道建立过程还包括:所述内核初始化模块复用所述业务模块中的代码;其中,所述复用的代码在业务模块中通过预定义宏实现。

预定义宏用以区分复用代码与非复用代码,宏在Makefile中定义复用到业务模块的代码。

所述应用程序的内核中含有内核初始化函数;所述内核初始化模块复用所述业务模块中的代码,包括:所述内核中的初始化函数复用所述业务模块中的代码。

一种示例性的实施例中,所述内核初始化模块复用所述业务模块中的代码,包括:内核初始化模块中的内核初始化函数在编译时通过屏蔽除导出的函数外的函数实现参数编译,并在导出函数时声明作用域为导出。

一种示例性的实施例中,所述内核初始化模块、内核通信模块和业务模块以动态链接库的形式存储。

本发明实施例中,所述方法应用于包含有内核初始化模块、内核通信模块和业务模块的应用程序中,所述方法包括通信通道建立过程和内核通信过程;所述通信通道建立过程包括:根据预设的策略加载内核初始化模块、内核通信模块和业务模块;所述内核通信过程包括:所述内核通信模块接收所述业务模块的请求,调用内核函数处理所述请求,将处理结果返回给所述业务模块;本实施例支持多个业务模块与内核通信。各业务模块相互独立,互不影响,如果任意一个业务模块加载失败,不影响其他业务模块的加载。系统调用保证内核通信,模块化设计保证业务独立,编译配置保证代码复用。

实施例二

本实施例对上述实施例方法进行具体描述,上述方法实施例中描述也适用于本实施例中。本实施例的应用程序主要包括以下特点:

(1)采用模块化设计;

所述应用程序包括内核初始化模块、内核通信模块和多个业务模块;

如图2所示,内核通信技术主要依赖内核初始化模块和内核通信模块,加载过程这两个模块按顺序优先加载,如果任意一个模块加载失败,则程序异常退出。

当两个模块都加载成功后,建立起内核通信通道,按照预设的顺序启动需要与内核通信的业务模块1、业务模块2等业务模块,各个业务模块加载失败不影响程序正常运行,业务模块可以根据应用程序配置文件选择是否加载。

1)应用程序的模块化设计有以下特点:应用程序的各个模块功能相互独立,各个模块以动态链接库的动态加载方式,按顺序加载到应用程序的程序空间中,最终以动态链接库的形式体现在应用程序中。动态链接库(Dynamic Link Library或者Dynamic-linkLibrary,缩写为DLL),是微软公司在微软Windows操作系统中,实现共享函数库概念的一种方式。

2)内核初始化模块主要完成两方面的功能:内核初始化、启动内核;

内核初始化:由于内核启动时需要一些预定义的配置等信息,故而本模块的主要作用就是将这些信息以加密文件的形式生成在文件系统中,以方便在内核启动时初始化。

启动内核:完成内核初始化后,启动内核,如果内核启动失败,则程序异常退出。

3)内核通信模块主要完成两方面功能:提供内核统一通信接口,提供内核消息回调函数的注册接口。

统一的内核通信接口:为了建立应用程序主动与内核通信的接口。内核初始化模块加载成功后,内核启动,此时系统调用已经被注册到系统中,此时内核通信模块才能被正确加载,否在会提示运行时函数实例未找到。内核通信模块调用内核提供的系统调用,向外暴露统一的内核通信接口。以实现程序主动与内核通信的功能。

内核消息回调函数的注册接口:为了建立内核主动与应用程序通信的接口。内核通信模块作为一个底层模块,其接口向外暴露,其不应该调用其他业务模块的功能函数。因此,内核消息的处理通过回调实现。由其向外暴露回调的注册函数,业务模块向其注册回调。当内核的消息到来时,内核通信模块选择回调函数并调用,以实现内核消息的处理,建立内核主动与应用程序通信的接口。

业务模块顺序启动,启动后向内核通信模块注册内核消息的回调函数,并根据其具体业务需要,调用内核通信模块的内核通信接口实现与内核通信。

(2)内核初始化函数为内核提供加密的配置文件,不可避免的会与业务相关,其在编译过程中,需要复用到业务模块的代码,在这个过程中,极有可能复用到一部分业务模块的代码,这些代码可能会调用内核通信模块的内核通信接口,这实际上是调用系统调用。正是系统调用的特殊性,内核启动前,系统调用不能被使用,即使是参与编译未被调用也不允许。因此,这些业务模块复用的代码,必须通过预定义宏参与区分,宏在Makefile中定义。这是编译的核心步骤。如果是初始化模块编译,则不调用内核通信接口;如果是业务模块编译,则调用通信接口。

(3)上述(2)中提到的代码复用问题,初始化模块、业务模块复用同一套代码,必然会导致同名函数的不同功能,其在动态链接库的动态加载过程中中,后加载的同名函数会被先加载的同名函数替代,从而造成同名函数的代码污染。为此,内核初始化函数在编译时需通过编译参数(-qvisibility=hidden)屏蔽掉除导出函数外的所有函数,并在导出函数声明时说明其作用域为导出,即(__attribute((visibility(“default”))))。

内核初始化函数为内核提供加密的配置文件,文件中的数据即为加密的内核通信数据;在业务模块中,这些数据直接通过内核通信模块下发给内核,通过业务模块中复用的代码生成业务模块和内核初始化模块同时需要的数据;

例如,某业务需要保护C盘下的某个文件,该文件的路径即为内核通信数据;再如,某业务需要限制对于某ip的访问,那这个ip即为内核通信数据。内核初始化模块需要生成这些数据,再生成加密文件;业务模块需要生产这些数据,再下发内核。生产下发数据这部分代码就需要复用。

再如,无需内核初始化产生加密文件的业务,不需要内核初始化产生的加密文件,只需要内核通信即可,此时内核初始化模块无需复用业务模块中的代码。

实施例三

本实施例提供了一种应用程序架构,上述方法实施例中描述也适用于本实施例中,如图3所示,该应用程序包括内核初始化模块31、内核通信模块31和业务模块31,其中:

所述内核初始化模块31,用于内核初始化和内核启动;

所述内核通信模块31,用于建立内核通信接口和注册接口;其中,所述内核通信接口用于应用程序主动与内核通信;所述注册接口用于内核主动与应用程序通信。

一种示例性的实施例中,所述内核复用所述业务模块31中的代码;其中,所述复用的代码在业务模块31中通过预定义宏实现。

一种示例性的实施例中,所述内核初始化模块31、内核通信模块31和业务模块31以动态链接库的形式存储。

本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些组件或所有组件可以被实施为由处理器,如数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号