CN108062253A - 一种内核态与用户态的通信方法、装置及终端 - Google Patents
一种内核态与用户态的通信方法、装置及终端 Download PDFInfo
- Publication number
- CN108062253A CN108062253A CN201711311715.9A CN201711311715A CN108062253A CN 108062253 A CN108062253 A CN 108062253A CN 201711311715 A CN201711311715 A CN 201711311715A CN 108062253 A CN108062253 A CN 108062253A
- Authority
- CN
- China
- Prior art keywords
- kernel
- user space
- data
- shared
- physical address
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/545—Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明提供一种内核态与用户态的通信方法、装置及终端,以实现内核态与用户态之间的高速通信。该方法包括:获得来自内核态程序的读操作,所述读操作用于读取内核态内存区的第一虚拟地址中的数据,所述数据是由用户态程序写入的;响应所述读操作,根据内核态内存区与共享内存区的映射关系,确定所述第一虚拟地址对应的共享物理地址,其中,所述共享内存区为内核中字符设备的存储空间,所述共享物理地址与用户态内存区中第二虚拟地址对应;从所述共享物理地址读取所述数据。
Description
技术领域
本发明涉及数据处理领域,尤其涉及一种内核态与用户态的通信方法、装置及终端。
背景技术
在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的通信机制、文件通信机制和信号通信机制,其中,netlink socket(套接字)提供了一组类似于伯克利软件套件(BSD,Berkeley Software Distribution)风格的应用线程编程接口(API,Application Programming Interface),用于用户态和内核态之间的进程间通信(IPC,Inter-Process Communication),但netlink是一种特殊的socket,需要自定义一种协议完成数据交换,且netlink属于异步通信,内核态与用户态之间存在数据拷贝操作,不是高速数据通信的最佳选择;另一种,文件通信机制,则是一种比较笨拙的做法。系统可以先在内核态内存区中直接操作文件,将想要传递的信息写入文件,然后,用户态内存区读取这个文件,便可以得到想要的数据了,但是借助文件通信仍不适合高速的数据通信;还有一种,信号通信机制,该机制是借助信号量进行内核态与用户态的交互,也不太合适大数据量的内核态与用户态的高速数据通信。
如此,为了解决上述问题,实现内核态与用户态的高速数据通信,本发明实施例还提供一种内核态与用户态的通信方法,该通信方法可以应用于如智能手机、平板电脑、笔记本电脑等具有Linux系统的终端。
图1为本发明实施例中的终端的结构示意图,参见图1所示,该终端10包括处理器11和存储器12,其中,存储器12分为内核态内存区121和用户态内存区122,内核态内存区121的物理内存页用于存储内核态数据和指令,用户态内存区122的物理内存页用于存储用户态数据和指令。
其中,在内核态内存区121中创建一共享内存区123,该共享内存区分别与内核态内存区和用户态内存区进行地址映射,使得共享内存区的每一个物理地址分别与内核态内存区中的一个虚拟地址和用户态内存区中的一个虚拟地址对应。
在本发明实施例中,上述共享内存区的地址可以与内核态内存区的虚拟地址一致,这样,内核就可以直接访问该共享内存区的地址,当然,该共享内存区的地址也可以是与内核态内存区中的虚拟地址不同的地址,这样,内核就需要通过地址映射来访问该共享内存区的地址。除此之外,共享内存还可以存在其他的实现方式,本发明实施例不作具体限定。
在实际应用中,上述共享内存区可以为内核中创建的字符设备的存储空间。具体来说,创建上述字符设备的方法可以包括:在内核中创建字符设备,并注册字符设备的驱动操作函数;在将字符设备的存储空间中的每一个物理地址与内核态内存区中的虚拟地址进行映射后,将每一个物理地址与用户态内存区中的虚拟地址进行映射;将映射后的字符设备的存储空间确定为共享内存区。
这里,当用户态程序或者内核态程序需要向内存中写入数据时,根据待写入数据的数据结构,向内核请求创建共享内存区,内核根据请求创建字符设备,在内核空间中创建字符设备,并注册字符设备的驱动操作函数,然后,将字符设备的存储空间中的每一个物理地址与内核态内存区中的虚拟地址进行映射,同时,将每一个物理地址与用户态内存区中的虚拟地址进行映射,最终,将映射后的字符设备的存储空间确定为共享内存区。
进一步地,上述驱动操作函数可以包括以下一种或者多种函数的组合:用于指示打开字符设备的打开操作函数、用于指示内存映射的映射操作函数、用于读写数据的读写操作函数以及用于对输入输出通道进行管理的输入输出管理操作函数。当然,还可以存在其他的驱动操作函数,本发明实施例不作具体限定。
下面对本发明实施例中的内核态与用户态的通信方法进行说明。
图2为本发明实施例中的内核态与用户态的通信方法的实施过程示意图,参见图2所示,上述方法可以包括:
S201:用户态程序向内核发送向用户态内存区中第二虚拟地址写入数据的写操作;
这里,用户态程序在运行时,获得一写操作,该写操作用于向用户态内存区中的第二虚拟地址写入数据,用户态程序向内核发送该写操作。
S202:内核响应写操作,根据用户态内存区与共享内存区的映射关系,确定第二虚拟地址对应的共享物理地址;
其中,共享内存区为内核中字符设备的存储空间,共享物理地址与内核态内存区中第一虚拟地址对应;
在实际应用中,在内核态和用户态之间通过字符设备建立联系,字符设备可以看成内核态和用户态之间通信的桥梁。该字符设备的存储空间映射到内核态程序的内核态内存区中,该字符设备的存储空间就可以被内核态程序直接使用,同时,还可以将字符设备的存储空间通过MMAP函数映射到用户态程序的用户态内存区中,这样,虽然逻辑地址不同,但是他们共用相同的物理地址,用户态程序对这段共享内存区中数据的修改,内核态程序可以直接读取,同样,内核态程序对共享内存区中数据的修改,用户态程序也可以直接读取。例如,图3为本发明实施例中的内核态与用户态地址映射关系的示意图一,参见图3所示,字符设备的存储空间31映射到内核态内存区32的地址段E0000000~E0020000,此时,字符设备的存储空间31的地址段可以与内核态内存区32的地址段一致,同为E0000000~E0020000,字符设备的存储空间31通过MMAP函数映射到用户态内存区33的地址段为90000000~90020000,可见,在内核态内存区32和用户态内存区33中不同的虚拟地址可以对应于字符设备的存储空间31中的同一个物理地址,例如,内内核态内存区中的E0010000可以与字符设备的存储空间中的20010000对应,同时,20010000与用户态内存区33中的90010000对应。
在本发明实施例中,内核态和用户态可以定义相同的数据结构。
S203:内核将数据写入共享物理地址;
至此,用户态程序向与自身第二虚拟地址对应的共享物理地址中写入了数据,该数据可以为首次写入第二虚拟地址的数据,也可以为用户态程序用于修改第二虚拟地址中原有数据的数据,本发明实施例不作具体限定。
接下来,当用户态程序将数据写入第二虚拟地址对应的共享物理地址之后,内核态程序可以直接读取该数据,那么,在S203之后,上述方法还可以包括:
204:内核态程序向内核发送读取内核态内存区中第一虚拟地址的数据的读操作;
这里,内核态程序所要读取的数据是由用户态程序通过S201至S203写入共享物理地址的。
S205:内核响应读操作,根据内核态内存区与共享内存区的映射关系,确定第一虚拟地址对应的共享物理地址,其中,共享内存区为内核中字符设备的存储空间,共享物理地址与用户态内存区中第二虚拟地址对应;
S206:内核从共享物理地址中读取数据;
S207:内核将读取得到的数据发送给内核态程序。
由上述可知,用户态程序在共享内存区中写入的数据可以被内核态程序由共享内存区直接读取,以完成内核态和用户态之间的通信。
在实际应用中,还可以由内核态程序在共享内存区中写入的数据,由用户态程序由共享内存区映射至用户内存区后读取。那么,图4为本发明实施例中的内核态与用户态的通信方法的实施过程示意图二,参见图4所示,上述方法还可以包括:
S401:内核态程序向内核发送向内核态内存区中第一虚拟地址写入数据的写操作;
S402:内核响应写操作,根据内核态内存区与共享内存区的映射关系,确定第一虚拟地址对应的共享物理地址;
S403:内核将数据写入共享物理地址;
S404:用户态程序向内核发送读取用户态内存区中第二虚拟地址的数据的读操作;
S405:内核响应读操作,根据用户态内存区与共享内存区的映射关系,确定第二虚拟地址对应的共享物理地址;
S406:内核从共享物理地址中读取数据;
S407:内核将读取得到的数据发送给用户态程序。
本发明所提供的内核态与用户态的通信方法中,内核与应用线程共享内核中字符设备的存储空间,即共享内存区,该共享内存区分别与内核态内存区和用户态内存区进行地址映射,使得共享内存区中的一个共享物理地址分别对应有内核态内存区中第一虚拟地址和用户态内存区中第二虚拟地址,那么,处理器在获得来自内核态程序的用于读取内核态内存区的第一虚拟地址中数据的读操作,这里,要被读取的数据是由用户态程序写入的,然后,响应该读操作,根据内核态内存区与共享内存区的映射关系,确定第一虚拟地址对应的共享物理地址,最后,处理器从该共享物理地址中读取数据,可见,在本发明中,通过共享内存在内核和应用线程之间实现零拷贝交互,进而实现内核和应用线程之间高速的数据交互,同时也简化了内核和应用线程之间的交互流程,极大降低了内核内存碎片的出现。
基于同一发明构思,在实际应用中,为了避免同一共享物理地址同时被内核态程序和用户态程序同时访问而造成冲突,共享内存区的每一个物理地址设置有一个读写状态标识,内核态程序和用户态程序可以通过获取该读写状态标识获知该共享物理地址是否正在被访问。例如,当读写状态标识置为1时,表明该共享物理地址正在被访问;当读写状态标识置为0时,表明该共享物理地址当前未被访问。
那么,上述S203可以为:内核读取共享物理地址对应的读写状态标识;当读写状态标识为第一值时,内核读取共享物理地址中的数据,并将读写状态标识更新为第二值。
相应地,上述S206可以为:内核读取共享物理地址对应的读写状态标识;当读写状态标识为第一值时,内核将数据写入共享物理地址,并将读写状态标识更新为第二值。
其中,当读写状态标识为第一值时,表明共享物理地址当前未被访问,当读写状态标识为第二值时,表明共享物理地址正在被访问。那么,第一值可以为0,相应地,第二值可以为1;第一值也可以为1,相应地,第二值可以为0。总之,第一值和第二值为其他两个不同的取值即可,本发明实施例不作具体限定。
基于上述实施例,在实际应用中,图5为本发明实施例中的内核态与用户态地址映射关系的示意图二,参见图5所示,为了高速的进行数据交互,可以将共享内存区划分为控制区511和数据区512,并分别映射到内核态内存区和用户态内存区,使得内核态内存区52被划分为控制区521和数据区522,用户态内存区53被划分为控制区531和数据区532。在实际应用中,控制区可以为32K,数据区可以为96K,当然,控制区和数据区还可以根据实际需要划分大小,本发明实施例不作具体限定。
这里,控制区用于传递命令或参数,数据区用于传递数据。
那么,在上述创建字符设备的过程中,在内核中创建字符设备的步骤之后,且在将字符设备的存储空间中的每一个物理地址与内核态内存区中的虚拟地址映射的步骤之前,上述方法还可以包括:将字符设备的存储空间划分为控制区和数据区。
进一步地,上述共享内存区中每一个共享物理地址对应的读取状态标识可以存储在共享内存区的控制区内。
基于同一发明构思,本发明实施例还提供一种内核态与用户态的通信装置,该装置与上述一个或者多个实施例所述的内核一致。
图6为本发明实施例中的内核态与用户态的通信装置的结构示意图一,参见图6所示,该通信装置60可以包括:第一获得单元61,用于获得来自内核态程序的读操作,读操作用于读取内核态内存区的第一虚拟地址中的数据,数据是由用户态程序写入的;第一确定单元62,用于响应读操作,根据内核态内存区与共享内存区的映射关系,确定第一虚拟地址对应的共享物理地址,其中,共享内存区为内核中字符设备的存储空间,共享物理地址与用户态内存区中第二虚拟地址对应;第一读取单元63,用于从共享物理地址中读取数据。
在本发明实施例中,上述装置还可以包括:创建单元,用于在内核中创建字符设备,并注册字符设备的驱动操作函数;映射单元,用于在将字符设备的存储空间中的每一个物理地址与内核态内存区中的虚拟地址映射后,将每一个物理地址与用户态内存区中的虚拟地址进行映射;空间确定单元,用于将映射后的字符设备的存储空间确定为共享内存区。
在本发明实施例中,上述映射单元,还用于在创建单元在内核中创建字符设备之后,且在映射单元在将字符设备的存储空间中的每一个物理地址与内核态内存区中的虚拟地址映射之前,将字符设备的存储空间划分为用于传递命令或参数的控制区和用于传递数据的数据区。
在本发明实施例中,上述第一读取单元,用于读取共享物理地址对应的读写状态标识;当读写状态标识为第一值时,读取共享物理地址中的数据,并将读写状态标识更新为第二值,其中,当读写状态标识为第一值时,表明共享物理地址当前未被访问,当读写状态标识为第二值时,表明共享物理地址正在被访问。
在本发明实施例中,上述装置,还可以包括:第一写入单元;
那么,第一获取单元,还用于获得来自内核态程序的写操作,写操作用于向内核态内存区中第一虚拟地址写入数据;第一确定单元,还用于响应写操作,根据内核态内存区与共享内存区的映射关系,确定第一虚拟地址对应的共享物理地址,其中,共享内存区为内核中字符设备的存储空间,共享物理地址与用户态内存区中第二虚拟地址对应;第一写入单元,用于将数据写入共享物理地址。
这里需要指出的是,以上装置实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本发明装置实施例中未披露的技术细节,请参照本发明方法实施例的描述而理解。
基于同一发明构思,本发明实施例还提供一种内核态与用户态的通信装置,该装置与上述一个或者多个实施例所述的内核一致。
图7为本发明实施例中的内核态与用户态的通信装置的结构示意图二,参见图7所示,该通信装置70可以包括:第二获得单元71,用于获得来自用户态程序的写操作,写操作用于向用户态内存区中第二虚拟地址写入数据;第二确定单元72,用于响应写操作,根据用户态内存区与共享内存区的映射关系,确定第二虚拟地址对应的共享物理地址,其中,共享内存区为内核中字符设备的存储空间,共享物理地址与内核态内存区中第一虚拟地址对应;第二写入单元73,用于向共享物理地址写入数据。
在本发明实施例中,上述第二写入单元,用于从共享内存区的控制区中读取共享物理地址对应的读写状态标识;当读写状态标识为第一值时,向共享物理地址写入数据,并将读写状态标识更新为第二值,其中,当读写状态标识为第一值时,表明共享物理地址当前未被访问,当读写状态标识为第二值时,表明共享物理地址正在被访问。
在本发明实施例中,上述装置,还可以包括:第二读取单元;
那么,上述第二获得单元,用于获得来自用户态程序的读操作,读操作用于读取内核态内存区中第二虚拟地址的数据,数据是由内核态程序写入的;第二确定单元,用于响应读操作,根据用户态内存区与共享内存区的映射关系,确定第二虚拟地址对应的共享物理地址,其中,共享内存区为内核中字符设备的存储空间,共享物理地址与用户态内存区中第一虚拟地址对应;第二读取单元,用于从共享物理地址读取数据。
这里需要指出的是,以上装置实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本发明装置实施例中未披露的技术细节,请参照本发明方法实施例的描述而理解。
需要说明的是,上述实施例中,第一获得单元和第二获得单元在逻辑上可以合设,也可以分设;第一确定单元和第二确定单元在逻辑上可以合设,也可以分设;第一写入单元和第二写入单元在逻辑上可以合设,也可以分设;第一读取单元和第二读取单元在逻辑上可以合设,也可以分设;第一写入单元、第二写入单元、第一读取和第二读取单元在逻辑上可以合设,也可以分设,本发明不作具体限定。
基于同一发明发构思,本发明实施例还提供一种终端,如智能手机、平板电脑、笔记本电脑等安装有Linux操作系统或者基于Linux的操作系统,如Android系统的终端。仍参见图1所示,该终端10包括:存储器11和处理器12,其中,存储器11用于存储一条或多条计算机指令,其中,一条或多条计算机指令被处理器执行以实现上述一个或者多个实施例中所述的内核态与用户态的通信方法。
基于同一发明发构思,本发明实施例还提供一种计算机可读存储介质,其上存储有计算机线程,该线程被处理器执行时实现上述一个或者多个实施例中所述的内核态与用户态的通信方法。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机线程产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用线程代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机线程产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机线程产品的流程图和/或方框图来描述的。应理解可由计算机线程指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机线程指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机线程指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机线程指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种内核态与用户态的通信方法,其特征在于,包括:
获得来自内核态程序的读操作,所述读操作用于读取内核态内存区中第一虚拟地址的数据,所述数据是由用户态程序写入的;
响应所述读操作,根据内核态内存区与共享内存区的映射关系,确定所述第一虚拟地址对应的共享物理地址,其中,所述共享内存区为内核中字符设备的存储空间,所述共享物理地址与用户态内存区中第二虚拟地址对应;
从所述共享物理地址读取所述数据。
2.根据权利要求1所述的方法,其特征在于,在所述获得来自内核态程序的读操作之前,所述方法还包括:
在内核中创建字符设备,并注册所述字符设备的驱动操作函数;
在将所述字符设备的存储空间中的每一个物理地址与内核态内存区中的虚拟地址进行映射后,将所述每一个物理地址与用户态内存区中的虚拟地址进行映射;
将映射后的所述字符设备的存储空间确定为所述共享内存区。
3.根据权利要求1或2所述的方法,其特征在于,所述在内核中创建字符设备之后,且在所述将所述字符设备的存储空间中的每一个物理地址与内核态内存区中的虚拟地址映射之前,所述方法还包括:
将所述字符设备的存储空间划分为用于传递命令或参数的控制区和用于传递数据的数据区。
4.根据权利要求1所述的方法,其特征在于,所述从所述共享物理地址读取所述数据,包括:
读取所述共享物理地址对应的读写状态标识;
当所述读写状态标识为第一值时,读取所述共享物理地址中的所述数据,并将所述读写状态标识更新为第二值,其中,当所述读写状态标识为第一值时,表明所述共享物理地址当前未被访问,当所述读写状态标识为第二值时,表明所述共享物理地址正在被访问。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获得来自内核态程序的写操作,所述写操作用于向所述内核态内存区中第一虚拟地址写入所述数据;
响应所述写操作,根据所述内核态内存区与共享内存区的映射关系,确定所述第一虚拟地址对应的共享物理地址,其中,所述共享内存区为内核中字符设备的存储空间,所述共享物理地址与用户态内存区中第二虚拟地址对应;
将所述数据写入所述共享物理地址。
6.一种内核态与用户态的通信方法,其特征在于,包括:
获得来自用户态程序的写操作,所述写操作用于向用户态内存区中第二虚拟地址写入数据;
响应所述写操作,根据用户态内存区与共享内存区的映射关系,确定所述第二虚拟地址对应的共享物理地址,其中,所述共享内存区为内核中字符设备的存储空间,所述共享物理地址与内核态内存区中第一虚拟地址对应;
将数据写入所述共享物理地址。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
获得来自用户态程序的读操作,所述读操作用于读取内核态内存区中第二虚拟地址的数据,所述数据是由内核态程序写入的;
响应所述读操作,根据所述用户态内存区与共享内存区的映射关系,确定所述第二虚拟地址对应的共享物理地址,其中,所述共享内存区为内核中字符设备的存储空间,所述共享物理地址与用户态内存区中第一虚拟地址对应;
从所述共享物理地址读取所述数据。
8.一种内核态与用户态的通信装置,其特征在于,包括:
第一获得单元,用于获得来自内核态程序的读操作,所述读操作用于读取内核态内存区的第一虚拟地址中的数据,所述数据是由用户态程序写入的;
第一确定单元,用于响应所述读操作,根据内核态内存区与共享内存区的映射关系,确定所述第一虚拟地址对应的共享物理地址,其中,所述共享内存区为内核中字符设备的存储空间,所述共享物理地址与用户态内存区中第二虚拟地址对应;
第一读取单元,用于从所述共享物理地址读取所述数据。
9.一种内核态与用户态的通信装置,其特征在于,包括:
第二获得单元,用于获得来自用户态程序的写操作,所述写操作用于向用户态内存区中第二虚拟地址写入数据;
第二确定单元,用于响应所述写操作,根据用户态内存区与共享内存区的映射关系,确定所述第二虚拟地址对应的共享物理地址,其中,所述共享内存区为内核中字符设备的存储空间,所述共享物理地址与内核态内存区中第一虚拟地址对应;
第二写入单元,用于将数据写入所述共享物理地址。
10.一种终端,其特征在于,包括:存储器和处理器,其中,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现权利要求1至7任一项所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711311715.9A CN108062253A (zh) | 2017-12-11 | 2017-12-11 | 一种内核态与用户态的通信方法、装置及终端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711311715.9A CN108062253A (zh) | 2017-12-11 | 2017-12-11 | 一种内核态与用户态的通信方法、装置及终端 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108062253A true CN108062253A (zh) | 2018-05-22 |
Family
ID=62136426
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711311715.9A Pending CN108062253A (zh) | 2017-12-11 | 2017-12-11 | 一种内核态与用户态的通信方法、装置及终端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108062253A (zh) |
Cited By (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109376104A (zh) * | 2018-09-28 | 2019-02-22 | 阿里巴巴集团控股有限公司 | 一种芯片及基于其的数据处理方法和装置 |
CN109408226A (zh) * | 2018-09-19 | 2019-03-01 | 深圳传音通讯有限公司 | 数据处理方法、装置及终端设备 |
CN109800190A (zh) * | 2019-01-22 | 2019-05-24 | 星辰天合(北京)数据科技有限公司 | 内存的加速处理方法及装置、存储介质、处理器 |
CN110209597A (zh) * | 2019-05-24 | 2019-09-06 | 北京百度网讯科技有限公司 | 处理访问请求的方法、装置、设备和存储介质 |
CN110377436A (zh) * | 2019-07-12 | 2019-10-25 | 清华大学 | 持久性内存的数据存储访问方法、设备及装置 |
CN110502325A (zh) * | 2019-08-12 | 2019-11-26 | 北京和利时系统工程有限公司 | 一种任务运行方法及装置、计算机可读存储介质 |
CN110647493A (zh) * | 2018-06-26 | 2020-01-03 | 大唐移动通信设备有限公司 | 一种数据传输方法、处理器和pcie系统 |
CN110765209A (zh) * | 2019-10-28 | 2020-02-07 | 机械工业仪器仪表综合技术经济研究所 | 数据读写处理方法及装置 |
CN110858145A (zh) * | 2018-08-22 | 2020-03-03 | 龙芯中科技术有限公司 | 一种Linux操作系统下BIOS的更新方法和装置 |
CN111143072A (zh) * | 2019-12-29 | 2020-05-12 | 浪潮(北京)电子信息产业有限公司 | 用户态程序内存分配方法、系统及相关组件 |
CN111143418A (zh) * | 2019-12-28 | 2020-05-12 | 浪潮商用机器有限公司 | 一种数据库读取数据方法、装置、设备及存储介质 |
CN111240853A (zh) * | 2019-12-26 | 2020-06-05 | 天津中科曙光存储科技有限公司 | 一种节点内大块数据双向传输方法及系统 |
CN111431757A (zh) * | 2020-02-18 | 2020-07-17 | 平安科技(深圳)有限公司 | 虚拟网络的流量采集方法及装置 |
CN111444119A (zh) * | 2020-03-25 | 2020-07-24 | 北京计算机技术及应用研究所 | 一种基于内核参数的飞腾平台非易失内存注册方法 |
CN111475099A (zh) * | 2019-01-23 | 2020-07-31 | 阿里巴巴集团控股有限公司 | 一种数据存储方法、装置及其设备 |
CN112306702A (zh) * | 2019-07-26 | 2021-02-02 | 龙芯中科技术股份有限公司 | 数据共享方法、装置、电子设备及储存介质 |
CN112346390A (zh) * | 2020-11-24 | 2021-02-09 | 杭州迪普信息技术有限公司 | 光模块控制方法、装置、设备及计算机可读存储介质 |
CN112463662A (zh) * | 2020-12-16 | 2021-03-09 | 福州创实讯联信息技术有限公司 | 一种用户态控制i2c设备的方法与终端 |
CN112711546A (zh) * | 2019-10-24 | 2021-04-27 | 华为技术有限公司 | 内存配置方法、装置及存储介质 |
CN112954068A (zh) * | 2021-03-09 | 2021-06-11 | 西安奥卡云数据科技有限公司 | 一种基于rdma的数据传输方法及装置 |
CN112948318A (zh) * | 2021-03-09 | 2021-06-11 | 西安奥卡云数据科技有限公司 | 一种Linux操作系统下基于RDMA的数据传输方法及装置 |
CN113098955A (zh) * | 2021-03-30 | 2021-07-09 | 山东英信计算机技术有限公司 | 一种数据传输方法、装置、设备及计算机可读存储介质 |
CN113326213A (zh) * | 2021-05-24 | 2021-08-31 | 北京计算机技术及应用研究所 | 一种飞腾服务器平台下在驱动程序中实现地址映射的方法 |
CN114003520A (zh) * | 2021-09-28 | 2022-02-01 | 苏州浪潮智能科技有限公司 | 一种主机与设备之间的数据传输方法、装置、系统及介质 |
CN114048502A (zh) * | 2021-10-15 | 2022-02-15 | 中国科学院信息工程研究所 | 一种轻量级可信通道及其通信控制方法 |
WO2022166553A1 (zh) * | 2021-02-05 | 2022-08-11 | 华为技术有限公司 | 一种实现批量系统调用的方法及装置 |
CN116107764A (zh) * | 2023-04-03 | 2023-05-12 | 阿里云计算有限公司 | 数据处理方法及系统 |
WO2024051109A1 (zh) * | 2022-09-06 | 2024-03-14 | 浪潮电子信息产业股份有限公司 | 一种数据存储方法、装置、系统、设备和介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102402487A (zh) * | 2011-11-15 | 2012-04-04 | 北京天融信科技有限公司 | 一种零拷贝接收报文的方法和系统 |
CN103942149A (zh) * | 2014-03-27 | 2014-07-23 | 汉柏科技有限公司 | 用户态程序与内核交互报文的方法及系统 |
CN105677493A (zh) * | 2016-01-04 | 2016-06-15 | 汉柏科技有限公司 | 用户态和内核间的通信方法及系统 |
CN105677597A (zh) * | 2014-11-20 | 2016-06-15 | 中兴通讯股份有限公司 | 数据写入方法及装置 |
-
2017
- 2017-12-11 CN CN201711311715.9A patent/CN108062253A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102402487A (zh) * | 2011-11-15 | 2012-04-04 | 北京天融信科技有限公司 | 一种零拷贝接收报文的方法和系统 |
CN103942149A (zh) * | 2014-03-27 | 2014-07-23 | 汉柏科技有限公司 | 用户态程序与内核交互报文的方法及系统 |
CN105677597A (zh) * | 2014-11-20 | 2016-06-15 | 中兴通讯股份有限公司 | 数据写入方法及装置 |
CN105677493A (zh) * | 2016-01-04 | 2016-06-15 | 汉柏科技有限公司 | 用户态和内核间的通信方法及系统 |
Cited By (45)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110647493B (zh) * | 2018-06-26 | 2022-04-01 | 大唐移动通信设备有限公司 | 一种数据传输方法、处理器和pcie系统 |
CN110647493A (zh) * | 2018-06-26 | 2020-01-03 | 大唐移动通信设备有限公司 | 一种数据传输方法、处理器和pcie系统 |
CN110858145A (zh) * | 2018-08-22 | 2020-03-03 | 龙芯中科技术有限公司 | 一种Linux操作系统下BIOS的更新方法和装置 |
CN109408226A (zh) * | 2018-09-19 | 2019-03-01 | 深圳传音通讯有限公司 | 数据处理方法、装置及终端设备 |
CN109376104A (zh) * | 2018-09-28 | 2019-02-22 | 阿里巴巴集团控股有限公司 | 一种芯片及基于其的数据处理方法和装置 |
CN109376104B (zh) * | 2018-09-28 | 2021-12-07 | 创新先进技术有限公司 | 一种芯片及基于其的数据处理方法和装置 |
CN109800190A (zh) * | 2019-01-22 | 2019-05-24 | 星辰天合(北京)数据科技有限公司 | 内存的加速处理方法及装置、存储介质、处理器 |
CN111475099A (zh) * | 2019-01-23 | 2020-07-31 | 阿里巴巴集团控股有限公司 | 一种数据存储方法、装置及其设备 |
CN111475099B (zh) * | 2019-01-23 | 2023-06-20 | 阿里巴巴集团控股有限公司 | 一种数据存储方法、装置及其设备 |
CN110209597A (zh) * | 2019-05-24 | 2019-09-06 | 北京百度网讯科技有限公司 | 处理访问请求的方法、装置、设备和存储介质 |
US11307801B2 (en) | 2019-05-24 | 2022-04-19 | Beijing Baidu Netcom Science And Technology Co., Ltd. | Method, apparatus, device and storage medium for processing access request |
CN110377436A (zh) * | 2019-07-12 | 2019-10-25 | 清华大学 | 持久性内存的数据存储访问方法、设备及装置 |
CN112306702B (zh) * | 2019-07-26 | 2023-07-14 | 龙芯中科技术股份有限公司 | 数据共享方法、装置、电子设备及储存介质 |
CN112306702A (zh) * | 2019-07-26 | 2021-02-02 | 龙芯中科技术股份有限公司 | 数据共享方法、装置、电子设备及储存介质 |
CN110502325B (zh) * | 2019-08-12 | 2023-06-02 | 北京和利时系统工程有限公司 | 一种任务运行方法及装置、计算机可读存储介质 |
CN110502325A (zh) * | 2019-08-12 | 2019-11-26 | 北京和利时系统工程有限公司 | 一种任务运行方法及装置、计算机可读存储介质 |
CN112711546A (zh) * | 2019-10-24 | 2021-04-27 | 华为技术有限公司 | 内存配置方法、装置及存储介质 |
CN110765209A (zh) * | 2019-10-28 | 2020-02-07 | 机械工业仪器仪表综合技术经济研究所 | 数据读写处理方法及装置 |
CN111240853A (zh) * | 2019-12-26 | 2020-06-05 | 天津中科曙光存储科技有限公司 | 一种节点内大块数据双向传输方法及系统 |
CN111240853B (zh) * | 2019-12-26 | 2023-10-10 | 天津中科曙光存储科技有限公司 | 一种节点内大块数据双向传输方法及系统 |
CN111143418A (zh) * | 2019-12-28 | 2020-05-12 | 浪潮商用机器有限公司 | 一种数据库读取数据方法、装置、设备及存储介质 |
CN111143418B (zh) * | 2019-12-28 | 2023-09-08 | 浪潮商用机器有限公司 | 一种数据库读取数据方法、装置、设备及存储介质 |
CN111143072A (zh) * | 2019-12-29 | 2020-05-12 | 浪潮(北京)电子信息产业有限公司 | 用户态程序内存分配方法、系统及相关组件 |
CN111143072B (zh) * | 2019-12-29 | 2023-09-08 | 浪潮(北京)电子信息产业有限公司 | 用户态程序内存分配方法、系统及相关组件 |
CN111431757A (zh) * | 2020-02-18 | 2020-07-17 | 平安科技(深圳)有限公司 | 虚拟网络的流量采集方法及装置 |
CN111431757B (zh) * | 2020-02-18 | 2023-03-24 | 平安科技(深圳)有限公司 | 虚拟网络的流量采集方法及装置 |
CN111444119B (zh) * | 2020-03-25 | 2023-06-02 | 北京计算机技术及应用研究所 | 一种基于内核参数的飞腾平台非易失内存注册方法 |
CN111444119A (zh) * | 2020-03-25 | 2020-07-24 | 北京计算机技术及应用研究所 | 一种基于内核参数的飞腾平台非易失内存注册方法 |
CN112346390A (zh) * | 2020-11-24 | 2021-02-09 | 杭州迪普信息技术有限公司 | 光模块控制方法、装置、设备及计算机可读存储介质 |
CN112463662A (zh) * | 2020-12-16 | 2021-03-09 | 福州创实讯联信息技术有限公司 | 一种用户态控制i2c设备的方法与终端 |
CN112463662B (zh) * | 2020-12-16 | 2024-04-05 | 福州创实讯联信息技术有限公司 | 一种用户态控制i2c设备的方法与终端 |
WO2022166553A1 (zh) * | 2021-02-05 | 2022-08-11 | 华为技术有限公司 | 一种实现批量系统调用的方法及装置 |
CN112954068B (zh) * | 2021-03-09 | 2022-09-27 | 西安奥卡云数据科技有限公司 | 一种基于rdma的数据传输方法及装置 |
CN112954068A (zh) * | 2021-03-09 | 2021-06-11 | 西安奥卡云数据科技有限公司 | 一种基于rdma的数据传输方法及装置 |
CN112948318A (zh) * | 2021-03-09 | 2021-06-11 | 西安奥卡云数据科技有限公司 | 一种Linux操作系统下基于RDMA的数据传输方法及装置 |
CN113098955A (zh) * | 2021-03-30 | 2021-07-09 | 山东英信计算机技术有限公司 | 一种数据传输方法、装置、设备及计算机可读存储介质 |
CN113326213A (zh) * | 2021-05-24 | 2021-08-31 | 北京计算机技术及应用研究所 | 一种飞腾服务器平台下在驱动程序中实现地址映射的方法 |
CN113326213B (zh) * | 2021-05-24 | 2023-07-28 | 北京计算机技术及应用研究所 | 一种飞腾服务器平台下在驱动程序中实现地址映射的方法 |
CN114003520A (zh) * | 2021-09-28 | 2022-02-01 | 苏州浪潮智能科技有限公司 | 一种主机与设备之间的数据传输方法、装置、系统及介质 |
CN114003520B (zh) * | 2021-09-28 | 2023-06-20 | 苏州浪潮智能科技有限公司 | 一种主机与设备之间的数据传输方法、装置、系统及介质 |
CN114048502A (zh) * | 2021-10-15 | 2022-02-15 | 中国科学院信息工程研究所 | 一种轻量级可信通道及其通信控制方法 |
CN114048502B (zh) * | 2021-10-15 | 2023-08-15 | 中国科学院信息工程研究所 | 一种轻量级可信通道及其通信控制方法 |
WO2024051109A1 (zh) * | 2022-09-06 | 2024-03-14 | 浪潮电子信息产业股份有限公司 | 一种数据存储方法、装置、系统、设备和介质 |
CN116107764B (zh) * | 2023-04-03 | 2023-09-26 | 阿里云计算有限公司 | 数据处理方法及系统 |
CN116107764A (zh) * | 2023-04-03 | 2023-05-12 | 阿里云计算有限公司 | 数据处理方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108062253A (zh) | 一种内核态与用户态的通信方法、装置及终端 | |
JP6779838B2 (ja) | メモリシステムおよび制御方法 | |
JP6763984B2 (ja) | インフィニバンド(IB)上で仮想ホストバスアダプタ(vHBA)を管理およびサポートするためのシステムおよび方法、ならびに単一の外部メモリインターフェイスを用いてバッファの効率的な使用をサポートするためのシステムおよび方法 | |
JP6211579B2 (ja) | テーブル・オブ・コンテンツエントリを使用してデータを格納するためのシステムおよび方法 | |
JP2018156679A (ja) | データを格納するための方法およびデータを格納するための一時的でないコンピュータ読取可能記録媒体 | |
TW201841118A (zh) | 採用映射記憶體提供多重命名空間的方法及設備 | |
JP4807683B2 (ja) | データ記憶装置 | |
EP0752661A1 (en) | Cross-domain data transfer using deferrred page remapping | |
US11675709B2 (en) | Reading sequential data from memory using a pivot table | |
CN108509145A (zh) | 存储系统和控制方法 | |
US9208088B2 (en) | Shared virtual memory management apparatus for providing cache-coherence | |
JP2018116329A (ja) | ストレージ制御装置、およびストレージ制御プログラム | |
US11194711B2 (en) | Storage device | |
CN108694135A (zh) | 用于在页高速缓存中持久性地高速缓存存储数据的方法和设备 | |
CN105094691B (zh) | 一种数据操作的方法、设备和系统 | |
CN108958647A (zh) | 存储器装置的边读边写访问方法 | |
CN107368379A (zh) | 面向EVP的跨GuestOS进程间通信方法及系统 | |
US9703593B2 (en) | Apparatus and method for memory overlay | |
CN115269450A (zh) | 内存协同管理系统和方法 | |
TW202111541A (zh) | 裝置內標記資料移動系統 | |
CN109408226A (zh) | 数据处理方法、装置及终端设备 | |
US8898353B1 (en) | System and method for supporting virtual host bus adaptor (VHBA) over infiniband (IB) using a single external memory interface | |
CN104699414B (zh) | 一种数据读写方法及存储设备 | |
CN110737397A (zh) | 用于管理存储系统的方法、设备和计算机程序产品 | |
US8762647B2 (en) | Multicore processor system and multicore processor |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20180522 |
|
RJ01 | Rejection of invention patent application after publication |