一种内核态与用户态的通信方法、装置及终端制造方法及图纸

技术编号:18018765 阅读:21 留言:0更新日期:2018-05-23 05:06
本发明专利技术提供一种内核态与用户态的通信方法、装置及终端,以实现内核态与用户态之间的高速通信。该方法包括:获得来自内核态程序的读操作,所述读操作用于读取内核态内存区的第一虚拟地址中的数据,所述数据是由用户态程序写入的;响应所述读操作,根据内核态内存区与共享内存区的映射关系,确定所述第一虚拟地址对应的共享物理地址,其中,所述共享内存区为内核中字符设备的存储空间,所述共享物理地址与用户态内存区中第二虚拟地址对应;从所述共享物理地址读取所述数据。

【技术实现步骤摘要】
一种内核态与用户态的通信方法、装置及终端
本专利技术涉及数据处理领域,尤其涉及一种内核态与用户态的通信方法、装置及终端。
技术介绍
在Linux系统中,由于内核态与用户态的内存映射机制不同,所以,内核态不能直接读取用户态的内存区,内核态也不能直接向用户态的内存区传递数据。目前,为了解决上述问题,Linux系统的内核提供两种函数来实现内核态与用户态之间的数据的拷贝,这两种函数为:copy_from_user()和copy_to_user(),以及get_user()和put_user()。具体来说,以内核态读取用户态数据为例,内核态可以调用copy-from-user()完成用户态内存区到内核态内存区的数据拷贝,还可以调用copy-to-uesr()完成内核态内存区到用户态内存区的数据拷贝。由此可见,数据相当于做了拷贝,在用户态内存区存储一份,在内核态内存区存储一份。那么,如果用户态内存区内数据发生了修改,就得重新拷贝至内核态内存区,或者内核态内存区内数据发生了修改,也得重新拷贝至用户态内存区。所以,现有技术中存在内核态与用户态通信效率低的技术问题。
技术实现思路
鉴于上述问题,本专利技术提供一种内核态与用户态的通信方法、装置及终端,以实现内核态与用户态之间的高速通信。为解决上述技术问题,第一方面,本专利技术提供一种内核态与用户态的通信方法,包括:获得来自内核态程序的读操作,所述读操作用于读取内核态内存区的第一虚拟地址中的数据,所述数据是由用户态程序写入的;响应所述读操作,根据内核态内存区与共享内存区的映射关系,确定所述第一虚拟地址对应的共享物理地址,其中,所述共享内存区为内核中字符设备的存储空间,所述共享物理地址与用户态内存区中第二虚拟地址对应;从所述共享物理地址读取所述数据。第二方面,本专利技术提供一种内核态与用户态的通信方法,包括:获得来自用户态程序的写操作,所述写操作用于向用户态内存区中第二虚拟地址写入数据;响应所述写操作,根据用户态内存区与共享内存区的映射关系,确定所述第二虚拟地址对应的共享物理地址,其中,所述共享内存区为内核中字符设备的存储空间,所述共享物理地址与内核态内存区中第一虚拟地址对应;将数据写入所述共享物理地址。第三方面,本专利技术提供一种内核态与用户态的通信装置,包括:第一获得单元,用于获得来自内核态程序的读操作,所述读操作用于读取内核态内存区的第一虚拟地址中的数据,所述数据是由用户态程序写入的;第一确定单元,用于响应所述读操作,根据内核态内存区与共享内存区的映射关系,确定所述第一虚拟地址对应的共享物理地址,其中,所述共享内存区为内核中字符设备的存储空间,所述共享物理地址与用户态内存区中第二虚拟地址对应;读取单元,用于从所述共享物理地址读取所述数据。第四方面,本专利技术提供一种内核态与用户态的通信装置,包括:第二获得单元,用于获得来自用户态程序的写操作,所述写操作用于向用户态内存区中第二虚拟地址写入数据;第二确定单元,用于响应所述写操作,根据用户态内存区与共享内存区的映射关系,确定所述第二虚拟地址对应的共享物理地址,其中,所述共享内存区为内核中字符设备的存储空间,所述共享物理地址与内核态内存区中第一虚拟地址对应;写入单元,用于将数据写入所述共享物理地址。第五方面,本专利技术提供一种终端,包括:存储器和处理器,其中,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现上述一个或者技术方案任一项所述的方法步骤。本专利技术所提供的内核态与用户态的通信方法、装置及终端,内核与应用线程共享内核中字符设备的存储空间,即共享内存区,该共享内存区分别与内核态内存区和用户态内存区进行地址映射,使得共享内存区中的一个共享物理地址分别对应有内核态内存区中第一虚拟地址和用户态内存区中第二虚拟地址,那么,处理器在获得来自内核态程序的用于读取内核态内存区的第一虚拟地址中数据的读操作,这里,要被读取的数据是由用户态程序写入的,然后,响应该读操作,根据内核态内存区与共享内存区的映射关系,确定第一虚拟地址对应的共享物理地址,最后,处理器从该共享物理地址中读取数据,可见,在本专利技术中,通过共享内存在内核和应用线程之间实现零拷贝交互,进而实现内核和应用线程之间高速的数据交互,同时也简化了内核和应用线程之间的交互流程,极大降低了内核内存碎片的出现。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作以简单地介绍,显而易见地,下面描述中的附图是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本专利技术实施例中的终端的结构示意图;图2为本专利技术实施例中的内核态与用户态的通信方法的实施过程示意图一;图3为本专利技术实施例中的内核态与用户态地址映射关系的示意图一;图4为本专利技术实施例中的内核态与用户态的通信方法的实施过程示意图二;图5为本专利技术实施例中的内核态与用户态地址映射关系的示意图二;图6为本专利技术实施例中的内核态与用户态的通信装置的结构示意图一;图7为本专利技术实施例中的内核态与用户态的通信装置的结构示意图二。具体实施方式为使本专利技术实施例的目的、技术方案和优点更加清楚,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。本专利技术实施例提供一种内核态与用户态的通信方法,由于Linux系统内核提供的实现内核态与用户态数据的拷贝的copy_from_user()、copy_to_user()、get_user()和put_user()函数会引发阻塞,所以,Linux系统还通过其他的内核态与用户态的通信机制,如基于netlink的通信机制、文件通信机制和信号通信机制,其中,netlinksocket(套接字)提供了一组类似于伯克利软件套件(BSD,BerkeleySoftwareDistribution)风格的应用线程编程接口(API,ApplicationProgrammingInterface),用于用户态和内核态之间的进程间通信(IPC,Inter-ProcessCommunication),但netlink是一种特殊的socket,需要自定义一种协议完成数据交换,且netlink属于异步通信,内核态与用户态之间存在数据拷贝操作,不是高速数据通信的最佳选择;另一种,文件通信机制,则是一种比较笨拙的做法。系统可以先在内核态内存区中直接操作文件,将想要传递的信息写入文件,然后,用户态内存区读取这个文件,便可以得到想要的数据了,但是借助文件通信仍不适合高速的数据通信;还有一种,信号通信机制,该机制是借助信号量进行内核态与用户态的交互,也不太合适大数据量的内核态与用户态的高速数据通信。如此,为了解决上述问题,实现内核态与用户态的高速数据通信,本专利技术实施例还提供一种内核态与用户态的通信方法,该通信方法可以应用于如智能手机、平板电脑、笔记本电脑等具有Linux系统的终端。图1为本专利技术实施例中的终端的结构示意图,参见图本文档来自技高网...
一种内核态与用户态的通信方法、装置及终端

【技术保护点】
一种内核态与用户态的通信方法,其特征在于,包括:获得来自内核态程序的读操作,所述读操作用于读取内核态内存区中第一虚拟地址的数据,所述数据是由用户态程序写入的;响应所述读操作,根据内核态内存区与共享内存区的映射关系,确定所述第一虚拟地址对应的共享物理地址,其中,所述共享内存区为内核中字符设备的存储空间,所述共享物理地址与用户态内存区中第二虚拟地址对应;从所述共享物理地址读取所述数据。

【技术特征摘要】
1.一种内核态与用户态的通信方法,其特征在于,包括:获得来自内核态程序的读操作,所述读操作用于读取内核态内存区中第一虚拟地址的数据,所述数据是由用户态程序写入的;响应所述读操作,根据内核态内存区与共享内存区的映射关系,确定所述第一虚拟地址对应的共享物理地址,其中,所述共享内存区为内核中字符设备的存储空间,所述共享物理地址与用户态内存区中第二虚拟地址对应;从所述共享物理地址读取所述数据。2.根据权利要求1所述的方法,其特征在于,在所述获得来自内核态程序的读操作之前,所述方法还包括:在内核中创建字符设备,并注册所述字符设备的驱动操作函数;在将所述字符设备的存储空间中的每一个物理地址与内核态内存区中的虚拟地址进行映射后,将所述每一个物理地址与用户态内存区中的虚拟地址进行映射;将映射后的所述字符设备的存储空间确定为所述共享内存区。3.根据权利要求1或2所述的方法,其特征在于,所述在内核中创建字符设备之后,且在所述将所述字符设备的存储空间中的每一个物理地址与内核态内存区中的虚拟地址映射之前,所述方法还包括:将所述字符设备的存储空间划分为用于传递命令或参数的控制区和用于传递数据的数据区。4.根据权利要求1所述的方法,其特征在于,所述从所述共享物理地址读取所述数据,包括:读取所述共享物理地址对应的读写状态标识;当所述读写状态标识为第一值时,读取所述共享物理地址中的所述数据,并将所述读写状态标识更新为第二值,其中,当所述读写状态标识为第一值时,表明所述共享物理地址当前未被访问,当所述读写状态标识为第二值时,表明所述共享物理地址正在被访问。5.根据权利要求1所述的方法,其特征在于,所述方法还包括:获得来自内核态程序的写操作,所述写操作用于向所述内核态内存区中第一虚拟地址写入所述数据;响应所述写操作,根据所述内核态内存区与共享内存区的映射关系,确定所述第一虚拟地址对应的共享物理地址,其中,所述共享内存区为内核中字符设备的存储空间,所述共享物理地址与用户态内存区中第二虚拟地址对应;将所述数据写入所述共享物理地址。6.一种内核态与用户态的通信方法,...

【专利技术属性】
技术研发人员:张建新高永岗
申请(专利权)人:北京奇虎科技有限公司
类型:发明
国别省市:北京,11

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

1