一种用户进程与系统服务之间的通信方法、装置制造方法及图纸

技术编号:10782885 阅读:103 留言:0更新日期:2014-12-17 04:15
本发明专利技术适用于计算机技术领域,提供了一种用户进程与系统服务之间的通信方法、装置,所述方法包括:用户进程通过第一内核向第一代理模块发送第一请求,第一请求中携带有用户进程需要系统服务处理的第一数据;第一代理模块接收到第一请求后,通过第一内核将第一请求中携带的第一数据写入到与保存的共享内存地址信息对应的第一内存空间;系统服务通过第二内核以轮询的方式从第一内存空间读取第一数据,并进行处理,得到处理后的第一数据,并将处理后的第一数据写入到第一内存空间;第一代理模块通过第一内核以轮询的方式从第一内存空间读取处理后的第一数据,并通过第一内核将处理后的第一数据发送给用户进程。本发明专利技术,大大减少了上下文切换的开销。

【技术实现步骤摘要】
一种用户进程与系统服务之间的通信方法、装置
本专利技术属于计算机
,尤其涉及一种用户进程与系统服务之间的通信方法、装置。
技术介绍
目前,处理器已进入多核/众核时代,然而,目前的操作系统仅以对称多处理器(SymmetricMulti-Processing,SMP)方式使用多核/众核处理器,并不能充分利用多核/众核处理器的并行处理能力。实验证明,当处理器超过16个核,现有Linux的性能不再线性增长反而降低。因此,有必要设计一种新的操作系统。微内核操作系统(MicrokernelOperatingSystem)结构,是20世纪80年代后期发展起来的。现代操作系统设计中的一个突出思想是把操作系统中更多的成分和功能放到更高的层次(及用户模式)中去运行,而留下一个尽量小的内核,用它来完成操作系统最基本的核心功能,这种技术被称为微内核技术。微内核的设计目标是将系统服务的实现和系统的基本操作规则分离开来,微内核将许多系统服务放入分离的进程,如文件系统,设备驱动程序,而进程通过消息传递调用系统服务。这些非常模块化的用户态服务用于完成操作系统中比较高级的操作,这样的设计使内核中最基本的部分的设计更简单。一个服务组件的出错并不会导致整个系统的崩溃,内核需要做的,仅仅是重新启动这个组件,而不必影响其它的部分。基于微内核的操作系统具有如下特征:1)足够小的内核在微内核操作系统中,内核是指精心设计的、能实现现代OS最基本的核心功能的部分。微内核并非是一个完整的OS,而只是操作系统中最基本的部分,它通常用于:实现与硬件紧密相关的处理;实现一些较基本的功能;负责客户和服务器之间的通信。它们只是为构建通用OS提供一个重要基础,这样就可以确保把操作系统内核做得很小。这样,在众核平台上,可以同时在每个中央处理器(CentralProcessingUnit,CPU)上运行一个内核kernel实例,每个CPU进入内核态时互不干扰,避免多个CPU争抢内核锁产生的性能消耗。2)基于客户/服务器模式将操作系统中最基本的部分放入内核中,而把操作系统的绝大部分功能都放在微内核外面的一组服务器中实现。这些系统服务都是被作为进程来实现的,运行在用户态。因为用户态进程间的地址空间是隔离的,所以通常情况下不同进程间无法直接进行通信。一旦不同进程间需要调用,例如用户进程和系统服务、系统服务间调用都是借助微内核提供的消息传递机制来实现信息交互的。所以,在用户看来,这是一种类似客户/服务器的模式,用户向内核发出请求,内核控制相应系统服务给予服务。现有的微内核一般只提供基本的硬件操作接口,它将所有操作系统(OperatingSystem,OS)必须提供的功能通过系统服务的形式提供,不同的系统服务运行在用户态;系统服务相互之间隔离,即使某个系统服务出现异常也不会干扰到其他模块;系统服务和系统服务之间通过进程间通信(InterProcessCommunication,IPC)的方式工作。现有的微内核操作系统都是基于客户/服务器模型的,用户进程通过向OS发送请求消息通知OS需要使用一种系统服务,OS接收到请求消息后根据自身的情况调度相应的系统服务来完成一次系统服务。通常用户编写自己的应用程序,会使用一些系统提供的库函数,这些库大多提供封装好的系统服务的接口,用户只需要根据自己的需要,填写相关的参数,就可以感觉上直接调用了一些系统服务,前面所说的功能步骤都是由OS完成。图1展示了单核平台上使用一次系统服务的过程。在众核平台上,由于同时存在多个kernel实例,每个CPU运行一个独立的kernel实例,每个kernel实例相互之间不会干扰对方,同时用户态的各个进程可以随意被各个kernel实例运行。这种情况下还要考虑各个进程可能不在同一个kernel上,这时发送消息需要使用核间通信。核间发送消息需要在每个kernel上开启一个代理模块(monitor),所有消息先汇集到代理,代理查找目标核的位置,将消息从本地monitor发送到对端monitor,再由对端monitor发送到对端目标进程。所以,通常用户使用一次系统服务的过程如图2所示,可以归结为以下几个步骤:1)用户进程组装一个消息,并将消息发送给内核;2)内核将消息发送到本地monitor;3)本地monitor查找目标核的位置,并将消息发往对端monitor;4)对端monitor接收到消息后,将消息发往系统服务;5)系统服务工作;6)系统服务完成工作后,将执行结果发往对端monitor;7)对端monitor将执行结果发往本地monitor;8)本地monitor接收到执行结果后,发给用户进程。从上述过程,可以看出,现有的微内核操作系统的服务办法性能低下。与宏内核操作系统相比,完成同样的一次系统服务,微内核的开销比宏内核多了几倍甚至更多。宏内核操作系统(以Linux为例)所有的OS提供的系统服务都以代码编写在内核模块中,完成一次系统服务所需要的过程是用户程序陷入内核,然后由内核执行系统服务,完成后从内核态返回用户态。开销仅为2次上下文切换。而微内核操作系统,如图2所示,完成一次调用所需的开销通常是8次上下文切换和2次核间通信。如果系统服务需要相互调用,宏内核可以在内核中完成不同功能模块的直接调用,而微内核结构就需要使用消息通信的方式,使CPU在处于用户态的不同系统服务间来回切换,核间通信和上下文切换带来的开销很大,性能问题就更加严重。
技术实现思路
本专利技术实施例提供了一种用户进程与系统服务之间的通信方法、装置,旨在解决现有技术使CPU在处于用户态的用户进程与系统服务之间通信时,核间通信和上下文切换带来的开销很大,性能问题就更加严重的问题。第一方面,提供一种用户进程与系统服务之间的通信方法,应用于多核平台,所述多核平台包括至少一个第一物理核以及至少一个第二物理核,所述第一物理核上运行有第一内核,所述第一内核上运行有第一代理模块以及一个或多个用户进程,所述第二物理核上运行有第二内核,所述第二内核上运行有第二代理模块以及系统服务,所述第一代理模块上保存有所述系统服务与所述用户进程共享的共享内存地址信息,所述方法包括:所述用户进程通过第一内核向所述第一代理模块发送第一请求,所述第一请求中携带有所述用户进程需要所述系统服务处理的第一数据;所述第一代理模块接收到第一请求后,通过所述第一内核将所述第一请求中携带的所述第一数据写入到与保存的所述共享内存地址信息对应的第一内存空间;所述系统服务通过所述第二内核以轮询的方式从所述第一内存空间读取所述第一数据,并进行处理,得到处理后的第一数据,并将所述处理后的第一数据写入到所述第一内存空间;所述第一代理模块通过所述第一内核以轮询的方式从所述第一内存空间读取所述处理后的第一数据,并通过所述第一内核将所述处理后的第一数据发送给所述用户进程。在第一种可能的实现方式中,结合第一方面,在所述第一代理模块通过所述第一内核以轮询的方式从所述第一内存空间读取所述处理后的第一数据,并通过所述第一内核将所述处理后的第一数据发送给所述用户进程之后,还包括:所述第一代理模块通过所述第一内核将所述共享内存地址信息发送给所述用户进程;所述用户进程根据所述共享内存地址信息建立与所述系统服务的连接,并保存所述本文档来自技高网
...
一种用户进程与系统服务之间的通信方法、装置

【技术保护点】
一种用户进程与系统服务之间的通信方法,其特征在于,应用于多核平台,所述多核平台包括至少一个第一物理核以及至少一个第二物理核,所述第一物理核上运行有第一内核,所述第一内核上运行有第一代理模块以及一个或多个用户进程,所述第二物理核上运行有第二内核,所述第二内核上运行有第二代理模块以及系统服务,所述第一代理模块上保存有所述系统服务与所述用户进程共享的共享内存地址信息,所述方法包括:所述用户进程通过第一内核向所述第一代理模块发送第一请求,所述第一请求中携带有所述用户进程需要所述系统服务处理的第一数据;所述第一代理模块接收到第一请求后,通过所述第一内核将所述第一请求中携带的所述第一数据写入到与保存的所述共享内存地址信息对应的第一内存空间;所述系统服务通过所述第二内核以轮询的方式从所述第一内存空间读取所述第一数据,并进行处理,得到处理后的第一数据,并将所述处理后的第一数据写入到所述第一内存空间;所述第一代理模块通过所述第一内核以轮询的方式从所述第一内存空间读取所述处理后的第一数据,并通过所述第一内核将所述处理后的第一数据发送给所述用户进程。

【技术特征摘要】
1.一种用户进程与系统服务之间的通信方法,其特征在于,应用于多核平台,所述多核平台包括至少一个第一物理核以及至少一个第二物理核,所述第一物理核上运行有第一内核,所述第一内核上运行有第一代理模块以及一个或多个用户进程,所述第二物理核上运行有第二内核,所述第二内核上运行有第二代理模块以及系统服务,所述第一代理模块上保存有所述系统服务与所述用户进程共享的共享内存地址信息,所述方法包括:所述用户进程通过第一内核向所述第一代理模块发送第一请求,所述第一请求中携带有所述用户进程需要所述系统服务处理的第一数据;所述第一代理模块接收到第一请求后,通过所述第一内核将所述第一请求中携带的所述第一数据写入到与保存的所述共享内存地址信息对应的第一内存空间;所述系统服务通过所述第二内核以轮询的方式从所述第一内存空间读取所述第一数据,并进行处理,得到处理后的第一数据,并将所述处理后的第一数据写入到所述第一内存空间;所述第一代理模块通过所述第一内核以轮询的方式从所述第一内存空间读取所述处理后的第一数据,并通过所述第一内核将所述处理后的第一数据发送给所述用户进程;在所述第一代理模块通过所述第一内核以轮询的方式从所述第一内存空间读取所述处理后的第一数据,并通过所述第一内核将所述处理后的第一数据发送给所述用户进程之后,还包括:所述第一代理模块通过所述第一内核将所述共享内存地址信息发送给所述用户进程;所述用户进程根据所述共享内存地址信息建立与所述系统服务的连接,并保存所述用户进程与所述系统服务之间建立连接时所用的连接信息,所述连接信息包括所述系统服务的服务标识、所述共享内存地址信息。2.如权利要求1所述的方法,其特征在于,在所述用户进程通过第一内核向所述第一代理模块发送第一请求之前,还包括:判断所述用户进程和所述系统服务之间是否已经建立连接;如果否,则执行所述用户进程通过第一内核向所述第一代理模块发送第一请求以及该步骤之后的后续步骤,实现所述用户进程与所述系统服务之间的通信,并建立两者之间的连接;如果是,则所述用户进程根据所述连接信息,写入需要所述系统服务处理的第一数据到与所述连接信息中保存的共享内存地址信息对应的第一内存空间;所述系统服务从所述第一内存空间读取所述第一数据,并进行处理,得到处理后的第一数据,并将所述处理后的第一数据写入到所述第一内存空间;所述用户进程从所述第一内存空间读取所述处理后的第一数据。3.如权利要求1所述的方法,其特征在于,所述第一代理模块上保存有所述系统服务与所述用户进程共享的共享内存地址信息包括:所述系统服务通过所述第二内核向操作系统申请共享内存;所述系统服务通过所述第二内核向所述第二代理模块通知所述系统服务申请到的共享内存地址信息;所述第二代理模块向所述第一代理模块广播所述共享内存地址信息;所述第一代理模块保存所述共享内存地址信息。4.如权利要求1所述的方法,其特征在于,所述用户进程根据所述共享内存地址信息建立与所述系统服务的连接包括:所述系统服务将所述共享内存地址信息对应的第一内存空间映射至所述系统服务的虚拟地址空间;所述第一代理模块将所述共享内存地址信息对应的第一内存空间映射至所述第一代理模块的虚拟地址空间;所述用户进程将所述共享内存地址信息对应的第一内存空间映射至所述用户进程的虚拟地址空间。5.如权利要求1所述的方法,其特征在于,所述第一代理模块、所述用户进程、所述第二代理模块以及所述系统服务均为用户态程序。6.一种用户进程与系统服务...

【专利技术属性】
技术研发人员:詹卿王伟
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:广东;44

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

1