CN103942149A - 用户态程序与内核交互报文的方法及系统 - Google Patents

用户态程序与内核交互报文的方法及系统 Download PDF

Info

Publication number
CN103942149A
CN103942149A CN201410118936.4A CN201410118936A CN103942149A CN 103942149 A CN103942149 A CN 103942149A CN 201410118936 A CN201410118936 A CN 201410118936A CN 103942149 A CN103942149 A CN 103942149A
Authority
CN
China
Prior art keywords
internal memory
kernel
user
numerical value
size
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.)
Granted
Application number
CN201410118936.4A
Other languages
English (en)
Other versions
CN103942149B (zh
Inventor
李鹏
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Opzoon Technology Co Ltd
Original Assignee
Opzoon Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Opzoon Technology Co Ltd filed Critical Opzoon Technology Co Ltd
Priority to CN201410118936.4A priority Critical patent/CN103942149B/zh
Publication of CN103942149A publication Critical patent/CN103942149A/zh
Application granted granted Critical
Publication of CN103942149B publication Critical patent/CN103942149B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明公开了一种用户态程序与内核交互报文的方法及系统,涉及操作系统技术领域,本发明通过设置内核和用户态程序共享的内存,当内核有报文发送给用户态程序时,仅需改变内存的数值,用户态程序在初始化过程中映射了该内存,因此可以读到该数值,用户态程序通过简单的读取该数值来判断是否有报文,如果有报文再去收取报文,避免了不停的系统调用,同时避免了大量的无效操作,提高了整个系统的性能。

Description

用户态程序与内核交互报文的方法及系统
技术领域
本发明涉及操作系统技术领域,特别涉及一种用户态程序与内核交互报文的方法及系统。
背景技术
各种基于操作系统(例如:linux)开发的用户态程序,都不可避免的会和内核有报文交互,用户态程序可能是要内核将网络报文发送出去,也可能是要把报文交给内核进入协议栈。
现有技术方法中的用户态程序和内核之间的交互方法为:通过在用户态创建一个线程,该线程不停的通过系统调用来获取内核发送过来的数据,当内核有数据发给用户态程序时,该系统调用执行成功,当没有数据发给用户态程序时,该系统调用执行失败,但由于是通过线程不停的系统调用来获取内核发送过来的数据,在操作系统正常的运行状态下,大部分时间内核不会给用户态程序发送报文,而大量系统调用使整个系统的性能大幅下降。
发明内容
(一)要解决的技术问题
本发明要解决的技术问题是:如何提高系统的性能。
(二)技术方案
为解决上述技术问题,本发明提供了一种用户态程序与内核交互报文的方法,所述方法包括以下步骤:
S1:内核申请一块物理地址连续的内存,并将所述内存设置为与用户态程序共享;
S2:当所述内核向所述用户态程序发送报文时,则改变所述内存中所存储的数值;
S3:所述用户态程序读取所述内存中所存储的数值,并判断所述内存中所存储的数值是否被改变,若所述数值被改变,则认定为所述内核向所述用户态程序发送了报文,并进行报文接收。
其中,步骤S1包括:
S101:内核申请一块物理地址连续的内存,并将申请到内存的虚拟地址转换成物理地址;
S102:用户态程序获取所述内存的物理地址和大小,并将所述内存的物理地址通过mmap接口及所述内存大小转换为用户态程序能访问的虚拟地址;
S103:内核通过全局指针g_pkernel来指向所述内存,用户态程序通过全局指针g_pusr来指向所述内存,以实现内核与用户态程序共享所述内存。
其中,步骤S2中,所述内核通过下式改变所述内存中所存储的数值,
(*(size_t*)g_pkernel)+=1,
其中,*(size_t*)g_pkernel为size_t*类型的全局指针g_pkernel所指向的内存中的数值,+=1为自加1运算。
其中,步骤S3中,所述用户态程序通过比较var和*(size_t*)g_pusr来判断所述内存中所存储的数值是否被改变,当var和*(size_t*)g_pusr不相等时,则认定为所述内核向所述用户态程序发送了报文,var+=1,并进行报文接收;
其中,var为初值为0的变量,*(size_t*)g_pusr为size_t*类型的全局指针g_pusr所指向的内存中的数值。
其中,所述内核为linux操作系统的内核。
本发明还公开了一种用户态程序与内核交互报文的系统,所述系统包括:内核和用户态程序,
所述内核,用于申请一块物理地址连续的内存,并将所述内存设置为与用户态程序共享;
所述内核,进一步用于向所述用户态程序发送报文时,改变所述内存中所存储的数值;
所述用户态程序,用于读取所述内存中所存储的数值,并判断所述内存中所存储的数值是否被改变,若所述数值被改变,则认定为所述内核向所述用户态程序发送了报文,并进行报文接收。
其中,所述内核,进一步用于申请一块物理地址连续的内存,并将申请到内存的虚拟地址转换成物理地址;
所述用户态程序,进一步用于获取所述内存的物理地址和大小,并将所述内存的物理地址通过mmap接口及所述内存大小转换为用户态程序能访问的虚拟地址;
所述内核,进一步用于通过全局指针g_pkernel来指向所述内存,用户态程序通过全局指针g_pusr来指向所述内存,以实现内核与用户态程序共享所述内存。
其中,所述内核通过下式改变所述内存中所存储的数值,
(*(size_t*)g_pkernel)+=1,
其中,*(size_t*)g_pkernel为size_t*类型的全局指针g_pkernel所指向的内存中的数值,+=1为自加1运算。
其中,所述用户态程序通过比较var和*(size_t*)g_pusr来判断所述内存中所存储的数值是否被改变,当var和*(size_t*)g_pusr不相等时,则认定为所述内核向所述用户态程序发送了报文,var+=1,并进行报文接收;
其中,var为初值为0的变量,*(size_t*)g_pusr为size_t*类型的全局指针g_pusr所指向的内存中的数值。
其中,所述内核为linux操作系统的内核。
(三)有益效果
本发明通过设置内核和用户态程序共享的内存,当内核有报文发送给用户态程序时,仅需改变内存的数值,用户态程序在初始化过程中映射了该内存,因此可以读到该数值,用户态程序通过简单的读取该数值来判断是否有报文,如果有报文再去收取报文,避免了不停的系统调用,同时避免了大量的无效操作,提高了整个系统的性能。
附图说明
图1是本发明一种实施方式的用户态程序与内核交互报文的方法流程图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
图1是本发明一种实施方式的用户态程序与内核交互报文的方法流程图;参照图1,所述方法包括以下步骤:
S1:内核申请一块物理地址连续的内存,并将所述内存设置为与用户态程序共享;
S2:当所述内核向所述用户态程序发送报文时,则改变所述内存中所存储的数值;
S3:所述用户态程序读取所述内存中所存储的数值,并判断所述内存中所存储的数值是否被改变,若所述数值被改变,则认定为所述内核向所述用户态程序发送了报文,并进行报文接收。
为了方便访问内存,优选地,步骤S1包括:
S101:内核申请一块物理地址连续的内存,并将申请到内存的虚拟地址转换成物理地址;
S102:用户态程序获取(可在用户态程序初始化时,通过系统调用等方法来获取)所述内存的物理地址kernel_vir和大小,并将所述内存的物理地址通过mmap接口及所述内存大小转换为用户态程序能访问的虚拟地址phyaddr;
S103:内核通过全局指针g_pkernel来指向所述内存,用户态程序通过全局指针g_pusr来指向所述内存,以实现内核与用户态程序共享所述内存。
为便于改变内存中存储的数值,优选地,步骤S2中,所述内核通过下式改变所述内存中所存储的数值,
(*(size_t*)g_pkernel)+=1,
其中,*(size_t*)g_pkernel为size_t*类型的全局指针g_pkernel所指向的内存中的数值,+=1为自加1运算。
为便于确认内核是否向用户态程序发送了报文,优选地,步骤S3中,所述用户态程序通过比较var和*(size_t*)g_pusr来判断所述内存中所存储的数值是否被改变,当var和*(size_t*)g_pusr不相等时,则认定为所述内核向所述用户态程序发送了报文,var+=1,并进行报文接收;
其中,var为初值为0的变量,*(size_t*)g_pusr为size_t*类型的全局指针g_pusr所指向的内存中的数值(由于内核和用户态程序共享所述内存,故而当内核对内存中存储的数值进行改变后,则用户态程序读取到的所述内存中所存储的数值也发生了相应改变);size_t是在标准C库中定义的,在32位系统中时,其为unsigned int,是4字节的(即32位);在64位系统中时,其为long unsigned int,是8字节的(即64位),利用该类型可以增强程序的可移植性。
在具体判断所述内存中所存储的数值是否被改变时,可由用户态程序在初始化时,创建一个线程,该线程里面有如下指令:
static size_t var=0;声明一个静态变量var
if(var==*(size_t*)g_pusr)说明内核没有向用户态程序发送报文
else说明var和*(size_t*)g_pusr不相等了,表明内核向用户态程序发送了报文,此时用户态程序可以通过系统调用等方法去收取报文,然后设置var+=1,说明用户态程序已经收到了一个报文,下次线程轮训时,如果var和*(size_t*)g_pusr相等,说明已经没有报文了,如果不相等说明还有报文。
上述指令,当内核有报文发送给用户态程序时,将内存数值仅需做加1的改写,用户态程序在初始化过程中映射了该内存,因此可以读到该数值,线程每次轮训时通过简单的读取该数值来判断是否有报文,如果有报文再通过系统调用去收取报文,避免了不停的系统调用,避免了大量的无效操作,提高了整个系统的性能。
优选地,所述内核为linux操作系统的内核。
本发明还公开了一种用户态程序与内核交互报文的系统,所述系统包括:内核和用户态程序,
所述内核,用于申请一块物理地址连续的内存,并将所述内存设置为与用户态程序共享;
所述内核,进一步用于向所述用户态程序发送报文时,改变所述内存中所存储的数值;
所述用户态程序,用于读取所述内存中所存储的数值,并判断所述内存中所存储的数值是否被改变,若所述数值被改变,则认定为所述内核向所述用户态程序发送了报文,并进行报文接收。
优选地,所述内核,进一步用于申请一块物理地址连续的内存,并将申请到内存的虚拟地址转换成物理地址;
所述用户态程序,进一步用于获取所述内存的物理地址和大小,并将所述内存的物理地址通过mmap接口及所述内存大小转换为用户态程序能访问的虚拟地址;
所述内核,进一步用于通过全局指针g_pkernel来指向所述内存,用户态程序通过全局指针g_pusr来指向所述内存,以实现内核与用户态程序共享所述内存。
优选地,所述内核通过下式改变所述内存中所存储的数值,
(*(size_t*)g_pkernel)+=1,
其中,*(size_t*)g_pkernel为size_t*类型的全局指针g_pkernel所指向的内存中的数值,+=1为自加1运算。
优选地,所述用户态程序通过比较var和*(size_t*)g_pusr来判断所述内存中所存储的数值是否被改变,当var和*(size_t*)g_pusr不相等时,则认定为所述内核向所述用户态程序发送了报文,var+=1,并进行报文接收;
其中,var为初值为0的变量,*(size_t*)g_pusr为size_t*类型的全局指针g_pusr所指向的内存中的数值。
优选地,所述内核为linux操作系统的内核。
以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。

Claims (10)

1.一种用户态程序与内核交互报文的方法,其特征在于,所述方法包括以下步骤:
S1:内核申请一块物理地址连续的内存,并将所述内存设置为与用户态程序共享;
S2:当所述内核向所述用户态程序发送报文时,则改变所述内存中所存储的数值;
S3:所述用户态程序读取所述内存中所存储的数值,并判断所述内存中所存储的数值是否被改变,若所述数值被改变,则认定为所述内核向所述用户态程序发送了报文,并进行报文接收。
2.如权利要求1所述的方法,其特征在于,步骤S1包括:
S101:内核申请一块物理地址连续的内存,并将申请到内存的虚拟地址转换成物理地址;
S102:用户态程序获取所述内存的物理地址和大小,并将所述内存的物理地址通过mmap接口及所述内存大小转换为用户态程序能访问的虚拟地址;
S103:内核通过全局指针g_pkernel来指向所述内存,用户态程序通过全局指针g_pusr来指向所述内存,以实现内核与用户态程序共享所述内存。
3.如权利要求2所述的方法,其特征在于,步骤S2中,所述内核通过下式改变所述内存中所存储的数值,
(*(size_t*)g_pkernel)+=1,
其中,*(size_t*)g_pkernel为size_t*类型的全局指针g_pkernel所指向的内存中的数值,+=1为自加1运算。
4.如权利要求3所述的方法,其特征在于,步骤S3中,所述用户态程序通过比较var和*(size_t*)g_pusr来判断所述内存中所存储的数值是否被改变,当var和*(size_t*)g_pusr不相等时,则认定为所述内核向所述用户态程序发送了报文,var+=1,并进行报文接收;
其中,var为初值为0的变量,*(size_t*)g_pusr为size_t*类型的全局指针g_pusr所指向的内存中的数值。
5.如权利要求1~4中任一项所述的方法,其特征在于,所述内核为linux操作系统的内核。
6.一种用户态程序与内核交互报文的系统,其特征在于,所述系统包括:内核和用户态程序,
所述内核,用于申请一块物理地址连续的内存,并将所述内存设置为与用户态程序共享;
所述内核,进一步用于向所述用户态程序发送报文时,改变所述内存中所存储的数值;
所述用户态程序,用于读取所述内存中所存储的数值,并判断所述内存中所存储的数值是否被改变,若所述数值被改变,则认定为所述内核向所述用户态程序发送了报文,并进行报文接收。
7.如权利要求6所述的系统,其特征在于,所述内核,进一步用于申请一块物理地址连续的内存,并将申请到内存的虚拟地址转换成物理地址;
所述用户态程序,进一步用于获取所述内存的物理地址和大小,并将所述内存的物理地址通过mmap接口及所述内存大小转换为用户态程序能访问的虚拟地址;
所述内核,进一步用于通过全局指针g_pkernel来指向所述内存,用户态程序通过全局指针g_pusr来指向所述内存,以实现内核与用户态程序共享所述内存。
8.如权利要求7所述的系统,其特征在于,所述内核通过下式改变所述内存中所存储的数值,
(*(size_t*)g_pkernel)+=1,
其中,*(size_t*)g_pkernel为size_t*类型的全局指针g_pkernel所指向的内存中的数值,+=1为自加1运算。
9.如权利要求8所述的系统,其特征在于,所述用户态程序通过比较var和*(size_t*)g_pusr来判断所述内存中所存储的数值是否被改变,当var和*(size_t*)g_pusr不相等时,则认定为所述内核向所述用户态程序发送了报文,var+=1,并进行报文接收;
其中,var为初值为0的变量,*(size_t*)g_pusr为size_t*类型的全局指针g_pusr所指向的内存中的数值。
10.如权利要求6~9中任一项所述的系统,其特征在于,所述内核为linux操作系统的内核。
CN201410118936.4A 2014-03-27 2014-03-27 用户态程序与内核交互报文的方法及系统 Active CN103942149B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410118936.4A CN103942149B (zh) 2014-03-27 2014-03-27 用户态程序与内核交互报文的方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410118936.4A CN103942149B (zh) 2014-03-27 2014-03-27 用户态程序与内核交互报文的方法及系统

Publications (2)

Publication Number Publication Date
CN103942149A true CN103942149A (zh) 2014-07-23
CN103942149B CN103942149B (zh) 2017-11-03

Family

ID=51189822

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410118936.4A Active CN103942149B (zh) 2014-03-27 2014-03-27 用户态程序与内核交互报文的方法及系统

Country Status (1)

Country Link
CN (1) CN103942149B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105468400A (zh) * 2015-08-03 2016-04-06 汉柏科技有限公司 一种基于linux用户态调用定时器的方法及系统
CN107193673A (zh) * 2017-06-28 2017-09-22 锐捷网络股份有限公司 一种报文处理方法及设备
CN107733837A (zh) * 2016-08-11 2018-02-23 杭州迪普科技股份有限公司 基于应用层网络异常报文的异常检测方法及装置
CN108062253A (zh) * 2017-12-11 2018-05-22 北京奇虎科技有限公司 一种内核态与用户态的通信方法、装置及终端

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060242270A1 (en) * 2005-04-21 2006-10-26 Microsoft Corporation Isolation of user-mode device drivers
CN101150485A (zh) * 2007-11-15 2008-03-26 曙光信息产业(北京)有限公司 一种零拷贝缓冲区队列网络数据发送的管理方法
CN101707564A (zh) * 2009-12-04 2010-05-12 曙光信息产业(北京)有限公司 用于零拷贝缓冲区队列网络数据发送和接收的处理方法和装置
CN101917350A (zh) * 2010-09-13 2010-12-15 南京中兴特种软件有限责任公司 一种Linux下基于网卡驱动的零拷贝以太网报文捕获及发送的实现方法
US20110154364A1 (en) * 2009-12-22 2011-06-23 International Business Machines Corporation Security system to protect system services based on user defined policies
CN102402487A (zh) * 2011-11-15 2012-04-04 北京天融信科技有限公司 一种零拷贝接收报文的方法和系统

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060242270A1 (en) * 2005-04-21 2006-10-26 Microsoft Corporation Isolation of user-mode device drivers
CN101150485A (zh) * 2007-11-15 2008-03-26 曙光信息产业(北京)有限公司 一种零拷贝缓冲区队列网络数据发送的管理方法
CN101707564A (zh) * 2009-12-04 2010-05-12 曙光信息产业(北京)有限公司 用于零拷贝缓冲区队列网络数据发送和接收的处理方法和装置
US20110154364A1 (en) * 2009-12-22 2011-06-23 International Business Machines Corporation Security system to protect system services based on user defined policies
CN101917350A (zh) * 2010-09-13 2010-12-15 南京中兴特种软件有限责任公司 一种Linux下基于网卡驱动的零拷贝以太网报文捕获及发送的实现方法
CN102402487A (zh) * 2011-11-15 2012-04-04 北京天融信科技有限公司 一种零拷贝接收报文的方法和系统

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105468400A (zh) * 2015-08-03 2016-04-06 汉柏科技有限公司 一种基于linux用户态调用定时器的方法及系统
CN107733837A (zh) * 2016-08-11 2018-02-23 杭州迪普科技股份有限公司 基于应用层网络异常报文的异常检测方法及装置
CN107193673A (zh) * 2017-06-28 2017-09-22 锐捷网络股份有限公司 一种报文处理方法及设备
CN107193673B (zh) * 2017-06-28 2020-05-26 锐捷网络股份有限公司 一种报文处理方法及设备
CN108062253A (zh) * 2017-12-11 2018-05-22 北京奇虎科技有限公司 一种内核态与用户态的通信方法、装置及终端

Also Published As

Publication number Publication date
CN103942149B (zh) 2017-11-03

Similar Documents

Publication Publication Date Title
CN105993009B (zh) 通过非透明桥向PCIe集群中的计算资源传送MSI-X中断的方法和装置
US7752360B2 (en) Method and system to map virtual PCIe I/O devices and resources to a standard I/O bus
US10083131B2 (en) Generating and/or employing a descriptor associated with a memory translation table
US9002970B2 (en) Remote direct memory access socket aggregation
US20200201668A1 (en) Scalable techniques for data transfer between virtual machines
US8813071B2 (en) Storage reclamation systems and methods
CN103942149A (zh) 用户态程序与内核交互报文的方法及系统
CN105190552A (zh) 执行多个管理程序的系统和方法
CN104461698A (zh) 虚拟磁盘动态挂载的方法、管理装置及分布式存储系统
CN104205780B (zh) 一种存储数据的方法和装置
CN110719345A (zh) 虚拟机mac地址生成方法、系统、设备及计算机介质
CN104732164A (zh) 一种提高ssl数据处理速度的装置及其方法
CN108829529A (zh) 虚拟机内存共享方法、装置、计算机设备及存储介质
CN116860391A (zh) Gpu算力资源调度方法、装置、设备和介质
CN103329059A (zh) 用于至少部分地选择至少一个存储器的电路
CN106293967A (zh) 一种远程注入代码的方法及系统
KR20140073955A (ko) 메모리 시스템 및 그 구동 방법
CN103379145A (zh) 信息处理的方法、设备和系统
CN112015552A (zh) hash环均衡负载方法、装置、电子设备和存储介质
CN108959020B (zh) 一种计算机cpu利用率的计算方法和装置
CN106502775B (zh) 一种分时调度dsp算法的方法和系统
CN105550050A (zh) 硬件通信的方法及装置
CN111651124B (zh) Ssd映射表多核分区并行重建方法、装置、设备及介质
US9740626B2 (en) Sharing data structures between processes by semi-invasive hybrid approach
US11074200B2 (en) Use-after-free exploit prevention architecture

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
PP01 Preservation of patent right
PP01 Preservation of patent right

Effective date of registration: 20180528

Granted publication date: 20171103