一种用户态程序获取内核jiffies的方法和系统技术方案

技术编号:10177384 阅读:569 留言:0更新日期:2014-07-02 16:59
本发明专利技术提供了一种用户态程序获取内核jiffies的方法,其特征在于,该方法包括:S1.在内核中申请一块内存,用来存放内核全局变量jiffies的数值,设所述内存起始地址为kmem,每当内核发生一次时钟中断,jiffies的值加1,每当jiffies发生变化时,内核就将jiffies的值写到kmem中;S2.内核将所述内存的虚拟起始地址kmem转换为物理起始地址kphy;S3.用户态程序获取所述内存的物理起始地址kphy;S4.用户态程序将所述内存的物理起始地址kphy转换为用户态程序用的虚拟起始地址uvir;S5.用户态程序通过读取所述虚拟起始地址uvir,得到内核存储在kmem地址中的内核全局变量jiffies的值。本发明专利技术能够在用户态程序方便快捷地获取内核jiffies,进而快速获取系统时间。

【技术实现步骤摘要】
【专利摘要】本专利技术提供了一种用户态程序获取内核jiffies的方法,其特征在于,该方法包括:S1.在内核中申请一块内存,用来存放内核全局变量jiffies的数值,设所述内存起始地址为kmem,每当内核发生一次时钟中断,jiffies的值加1,每当jiffies发生变化时,内核就将jiffies的值写到kmem中;S2.内核将所述内存的虚拟起始地址kmem转换为物理起始地址kphy;S3.用户态程序获取所述内存的物理起始地址kphy;S4.用户态程序将所述内存的物理起始地址kphy转换为用户态程序用的虚拟起始地址uvir;S5.用户态程序通过读取所述虚拟起始地址uvir,得到内核存储在kmem地址中的内核全局变量jiffies的值。本专利技术能够在用户态程序方便快捷地获取内核jiffies,进而快速获取系统时间。【专利说明】—种用户态程序获取内核jiffies的方法和系统
本专利技术涉及计算机
,具体涉及一种用户态程序获取内核jiffies的方法和系统。
技术介绍
Linux内核具有一个名为jiffies的全局变量,它代表从机器启动时算起的时间节拍数。这个变量最初被初始化为0,每次时钟中断时都会加I。内核通过编程预设系统定时器的频率(即节拍率tick rate),每一个周期称作一个节拍,内核频率通常是1000Hz,也就是每秒钟1000个节拍。通过jiffies和tick rate可以计算时间和相对时间。比如2秒这个时间段可以2*tick rate来表示,那么两秒以后的时间就可以表示为jiffies+2*tickrate,由此可见,通过jiffies可以到当前时间以及N秒以后的时间,这样就为当前要触发或者N秒后要触发的事项提供了可以精确衡量的基准时间。用户态的程序也需要一个基准时间,用来管理用户态程序要处理的事项,因此用户态程序需要一个方法获取基准时间。目前用户态程序获取基准时间的方式通常是使用标准的编程接口time或localtime (会精确到年月日时分秒),然后通过此时间来计算N秒以后的时间。现有用户态程序需要通过time或local time编程接口获取基准时间,但这些接口都会产生系统调用,如果频繁的获取时间的话,那么整个用户态程序性能、效率就会变得异常低。
技术实现思路
针对现有技术的不足,本专利技术提供一种用户态程序获取内核jiffies的方法和系统,能够在用户态程序方便快捷地获取内核jiffies,进而快速获取系统时间。为实现上述目的,本专利技术通过以下技术方案予以实现:一种用户态程序获取内核jiffies的方法,该方法包括:S1.在内核中申请一块内存,用来存放内核全局变量jiffies的数值,设所述内存起始地址为kmem,每当内核发生一次时钟中断,jiffies的值加I,每当jiffies发生变化时,内核就将jiffies的值写到kmem中;S2.内核将所述内存的虚拟起始地址kmem转换为物理起始地址kphy ;S3.用户态程序获取所述内存的物理起始地址kphy ;S4.用户态程序将所述内存的物理起始地址kphy转换为用户态程序用的虚拟起始地址uvir ;S5.用户态程序通过读取所述虚拟起始地址uvir,得到内核存储在kmem地址中的内核全局变量jiffies的值。其中,所述步骤SI包括:在内核中通过内核函数kmalloc申请一块内存,该内存用来存放内核全局变量jiffies,所述kmalloc函数返回该内存起始地址kmem,每当内核发生一次时钟中断,jiffies的值加I,每当jiffies发生变化时,内核就将jiffies的值写到kmem 中。其中,所述步骤S2包括:利用内核提供的宏_pa将所述内存的虚拟起始地址kmem转换为物理起始地址kphy。其中,所述步骤S3包括:用户态程序通过ioctl方法获取所述内存的物理起始地址 kphyο其中,所述步骤S4包括:用户态程序通过标准编程接口 mmap将所述内存的物理起始地址kphy转换为用户态程序用的虚拟起始地址uvir。一种用户态程序获取内核jiffies的系统,该系统包括内核模块和用户态模块,其中,内核模块,用于在内核中申请一块内存,存放内核全局变量jiff ies,设所述内存起始地址为kmem,每当内核发生一次时钟中断,jiffies的值加I,每当jiffies发生变化时,内核就将jiffies的值写到kmem中;内核将所述内存的虚拟起始地址kmem转换为物理起始地址kphy ;用户态模块,用于获取所述内存的物理起始地址kphy,将所述内存的物理起始地址kphy转换为用户态程序用的虚拟起始地址uvir,通过读取所述虚拟起始地址uvir,得到内核存储在kmem地址中的内核全局变量jiffies的值。其中,所述内核模块中在内核中申请一块内存,存放内核全局变量jiffies包括:通过内核函数kmal1c在内核中申请一块内存,该内存用来存放内核全局变量jiff ies,所述kmal1c函数返回该内存起始地址kmem。其中,所述内核模块中将所述内存的虚拟起始地址kmem转换为物理起始地址kphy包括:利用内核提供的宏_pa将所述内存的虚拟起始地址kmem转换为物理起始地址kphy。其中,所述用户态模块中获取所述内存的物理起始地址kphy包括:用户态程序通过ioctl方法获取所述内存的物理起始地址kphy。其中,所述用户态模块中将所述内存的物理起始地址kphy转换为用户态程序用的虚拟起始地址uvir包括:用户态程序通过标准编程接口 _ap将所述内存的物理起始地址kphy转换为用户态程序用的虚拟起始地址uvir。本专利技术至少具有如下的有益效果:在本专利技术中,从内核申请的起始地址为kmem的内存,内核通过kmem对应到具体的物理地址kvir,用户态程序通过uvr对应到具体的物理地址kphy。也就是说当内核向该申请的内存写入任何数据时,用户态程序都可以通过uvir读取到。jiffies对于内核来讲就是一个全局变量,每当发生一次内核的时钟中断时,就会将jiffies进行加I,每次jiffies变化时,内核就将jiffies的数值写到kmem中,这样用户态程序就可以随时通过读取uvir来得到内核jiffies的数值了。该方法利用读写共享内存的方式获取系统时间,不需要通过time或local time编程接口,省去了对系统进行频繁调用的麻烦,节省了时间,提高了系统性能。【专利附图】【附图说明】为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本专利技术实施例1中用户态程序获取内核jiffies方法的流程图;图2是本专利技术实施例2中用户态程序获取内核jiffies系统的结构示意图。【具体实施方式】为使本专利技术实施例的目的、技术方案和优点更加清楚,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所本文档来自技高网
...
一种用户态程序获取内核jiffies的方法和系统

【技术保护点】
一种用户态程序获取内核jiffies的方法,其特征在于,该方法包括:S1.在内核中申请一块内存,用来存放内核全局变量jiffies的数值,设所述内存起始地址为kmem,每当内核发生一次时钟中断,jiffies的值加1,每当jiffies发生变化时,内核就将jiffies的值写到kmem中;S2.内核将所述内存的虚拟起始地址kmem转换为物理起始地址kphy;S3.用户态程序获取所述内存的物理起始地址kphy;S4.用户态程序将所述内存的物理起始地址kphy转换为用户态程序用的虚拟起始地址uvir;S5.用户态程序通过读取所述虚拟起始地址uvir,得到内核存储在kmem地址中的内核全局变量jiffies的值。

【技术特征摘要】

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

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

1