用户态程序与内核交互报文的方法及系统技术方案

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

【技术实现步骤摘要】
【专利摘要】本专利技术公开了一种用户态程序与内核交互报文的方法及系统,涉及操作系统
,本专利技术通过设置内核和用户态程序共享的内存,当内核有报文发送给用户态程序时,仅需改变内存的数值,用户态程序在初始化过程中映射了该内存,因此可以读到该数值,用户态程序通过简单的读取该数值来判断是否有报文,如果有报文再去收取报文,避免了不停的系统调用,同时避免了大量的无效操作,提高了整个系统的性能。【专利说明】用户态程序与内核交互报文的方法及系统
本专利技术涉及操作系统
,特别涉及一种用户态程序与内核交互报文的方法及系统。
技术介绍
各种基于操作系统(例如:linux)开发的用户态程序,都不可避免的会和内核有报文交互,用户态程序可能是要内核将网络报文发送出去,也可能是要把报文交给内核进入协议栈。现有技术方法中的用户态程序和内核之间的交互方法为:通过在用户态创建一个线程,该线程不停的通过系统调用来获取内核发送过来的数据,当内核有数据发给用户态程序时,该系统调用执行成功,当没有数据发给用户态程序时,该系统调用执行失败,但由于是通过线程不停的系统调用来获取内核发送过来的数据,在操作系统正常的运行状态下,大部分时间内核不会给用户态程序发送报文,而大量系统调用使整个系统的性能大幅下降。
技术实现思路
(一)要解决的技术问题本专利技术要解决的技术问题是:如何提高系统的性能。(二)技术方案为解决上述技术问题,本专利技术提供了一种用户态程序与内核交互报文的方法,所述方法包括以下步骤:S1:内核申请一块物理地址连续的内存,并将所述内存设置为与用户态程序共S2:当所述内核向所述用户态程序发送报文时,则改变所述内存中所存储的数值;S3:所述用户态程序读取所述内存中所存储的数值,并判断所述内存中所存储的数值是否被改变,若所述数值被改变,则认定为所述内核向所述用户态程序发送了报文,并进行报文接收。其中,步骤SI包括:SlO1:内核申请一块物理地址连续的内存,并将申请到内存的虚拟地址转换成物理地址;S102:用户态程序获取所述内存的物理地址和大小,并将所述内存的物理地址通过mmap接口及所述内存大小转换为用户态程序能访问的虚拟地址;S103:内核通过全局指针g_pkernel来指向所述内存,用户态程序通过全局指针g_pusr来指向所述内存,以实现内核与用户态程序共享所述内存。其中,步骤S2中,所述内核通过下式改变所述内存中所存储的数值,(* (size_t*)g_pkernel)+=1,其中,*(size_t*) g_pkernel为size_t*类型的全局指针g_pkernel所指向的内存中的数值,+=I为自加I运算。其中,步骤S3中,所述用户态程序通过比较var和*(size_t*)g_pusr来判断所述内存中所存储的数值是否被改变,当var和*(size_t*)g_pusr不相等时,贝U认定为所述内核向所述用户态程序发送了报文,var+=l,并进行报文接收;其中,var为初值为O的变量,* (size_t*) g_pusr为size_t*类型的全局指针g_pusr所指向的内存中的数值。其中,所述内核为Iinux操作系统的内核。本专利技术还公开了一种用户态程序与内核交互报文的系统,所述系统包括:内核和用户态程序,所述内核,用于申请一块物理地址连续的内存,并将所述内存设置为与用户态程序共孚;所述内核,进一步用于向所述用户态程序发送报文时,改变所述内存中所存储的数值;所述用户态程序,用于读取所述内存中所存储的数值,并判断所述内存中所存储的数值是否被改变,若所述数值被改变,则认定为所述内核向所述用户态程序发送了报文,并进行报文接收。其中,所述内核,进一步用于申请一块物理地址连续的内存,并将申请到内存的虚拟地址转换成物理地址;所述用户态程序,进一步用于获取所述内存的物理地址和大小,并将所述内存的物理地址通过_ap接口及所述内存大小转换为用户态程序能访问的虚拟地址;所述内核,进一步用于通过全局指针g_pkernel来指向所述内存,用户态程序通过全局指针g_pusr来指向所述内存,以实现内核与用户态程序共享所述内存。其中,所述内核通过下式改变所述内存中所存储的数值,(* (size_t*)g_pkernel)+=1,其中,*(size_t*) g_pkernel为size_t*类型的全局指针g_pkernel所指向的内存中的数值,+=1为自加I运算。 其中,所述用户态程序通过比较var和* (size_t*) g_pusr来判断所述内存中所存储的数值是否被改变,当var和*(size_t*)g_pusr不相等时,贝U认定为所述内核向所述用户态程序发送了报文,var+=l,并进行报文接收;其中,var为初值为O的变量,* (size_t*) g_pusr为size_t*类型的全局指针g_pusr所指向的内存中的数值。其中,所述内核为Iinux操作系统的内核。(三)有益效果本专利技术通过设置内核和用户态程序共享的内存,当内核有报文发送给用户态程序时,仅需改变内存的数值,用户态程序在初始化过程中映射了该内存,因此可以读到该数值,用户态程序通过简单的读取该数值来判断是否有报文,如果有报文再去收取报文,避免了不停的系统调用,同时避免了大量的无效操作,提高了整个系统的性能。【专利附图】【附图说明】图1是本专利技术一种实施方式的用户态程序与内核交互报文的方法流程图。【具体实施方式】下面结合附图和实施例,对本专利技术的【具体实施方式】作进一步详细描述。以下实施例用于说明本专利技术,但不用来限制本专利技术的范围。图1是本专利技术一种实施方式的用户态程序与内核交互报文的方法流程图;参照图1,所述方法包括以下步骤:S1:内核申请一块物理地址连续的内存,并将所述内存设置为与用户态程序共S2:当所述内核向所述用户态程序发送报文时,则改变所述内存中所存储的数值;S3:所述用户态程序读取所述内存中所存储的数值,并判断所述内存中所存储的数值是否被改变,若所述数值被改变,则认定为所述内核向所述用户态程序发送了报文,并进行报文接收。为了方便访问内存,优选地,步骤SI包括:SlOl:内核申请一块物理地址连续的内存,并将申请到内存的虚拟地址转换成物理地址;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为自加I运算。为便于确认内核是否向用户态程序发送了报文,优选地,步骤S3中,所述用户态程序通过比较var和*(size_t*)g_pusr来判断所述内存中所存储的数值是否被改变,当var和*(size_t*)g_pusr不相本文档来自技高网...
用户态程序与内核交互报文的方法及系统

【技术保护点】
一种用户态程序与内核交互报文的方法,其特征在于,所述方法包括以下步骤:S1:内核申请一块物理地址连续的内存,并将所述内存设置为与用户态程序共享;S2:当所述内核向所述用户态程序发送报文时,则改变所述内存中所存储的数值;S3:所述用户态程序读取所述内存中所存储的数值,并判断所述内存中所存储的数值是否被改变,若所述数值被改变,则认定为所述内核向所述用户态程序发送了报文,并进行报文接收。

【技术特征摘要】

【专利技术属性】
技术研发人员:李鹏
申请(专利权)人:汉柏科技有限公司
类型:发明
国别省市:天津;12

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

1