一种基于linux用户态调用定时器的方法及系统技术方案

技术编号:13135674 阅读:48 留言:0更新日期:2016-04-06 21:45
本发明专利技术公开一种基于linux用户态调用定时器的方法及系统,其包括在内核通过kmalloc申请8字节连续的内存,返回内存的首虚拟地址kmem;将虚拟地址kmem通过_pa转换为物理地址kphy;用户态启动通过ioctl向内核态获取物理地址kphy;将物理地址kphy转换为虚拟地址umem,用来进行用户态地址访问;在内核态中定义一个全局变量jiffies并写入虚拟地址kmem;用户态创建执行一个while(1)的死循环线程,获取jiffies的值,通过jiffies的值获取系统时间;比较判断系统时间与本地保存的上一次时间,调用用户态定时器处理定时器任务;如此减少系统调用,提高系统的性能和效率。

【技术实现步骤摘要】

本专利技术涉及计算机领域,尤其涉及一种基于linux用户态调用定时器的方法及系统
技术介绍
计算机
内,定时器是一种常见且必须的技术,是一系列函数的集合体,通过使用其提供的方法能够使软件在固定的时间内完成指定的功能,其目的在于使软件在固定的时间内自动执行某种操做或任务,目前在很多应用系统或应用平台中都要用到定时器来完成周期性的任务或特定时刻的任务执行,如实现自动控制,定时状态切换或延时处理等功能。linux内核态拥有自己的定时器,可以获取内核的系统时间以及对应的任务调度,但目前用户态没有一个用户态自己的且与内核态同步的定时器,只能够通过调用linux内核提供的init_timer和add_timer,对定时器初始化,将定时器添加到内核的定时器中,由内核的定时器,来实现定时调度,以实现定时处理用户添加的定时器处理任务。但上述通过内核定时器实现用户添加的定时器功能,都会产生系统调用,如果系统频繁调用或用户态添加的定时器处理太多的话,那么整个系统的性能和效率就会降低。因此,有必要提供一种基于linux用户态调用定时器的方法及系统,以解决上述现有技术存在的技术问题。
技术实现思路
本专利技术的目的是提供一种基于linux用户态调用定时器的方法及系统,以减少系统调用,提高系统的性能和效率。根据本专利技术的一个方面,提供一种基于linux用户态调用定时器的方法,包括以下步骤,步骤S1,在内核通过分配内存函数kmalloc申请8字节连续的内存,返回内存的首虚拟地址kmem;步骤S2,将所述虚拟地址kmem通过__pa命令转换为物理地址kphy;步骤S3,用户态启动時通过ioctl函數向内核态获取所述物理地址kphy;步骤S4,用户态将所述物理地址kphy转换为虚拟地址umem,用来进行用户态地址访问;步骤S5,在内核态中定义一个全局变量jiffies并写入虚拟地址kmem;步骤S6,用户态创建执行一个while(1)的死循环线程,获取所述jiffies的值,通过jiffies的值获取系统时间;步骤S7,比较判断所述系统时间与本地保存的上一次时间,调用用户态的定时器处理定时器任务。其中,在上述专利技术中,所述步骤S4中,内核申请的虚拟地址kmem对应的物理地址为kphy,用户态的虚拟地址umem对应的是同一个物理地址kphy,内核向虚拟地址kmem写入的任何数据,用户态都可以通过虚拟地址umem读出来。其中,在上述专利技术中,所述步骤S5中,每当内核发生一次时钟中断时,则将jiffies加1,当jiffies变化时,内核就将jiffies的数值写入虚拟地址kmem中。其中,在上述专利技术中,所述步骤S6中While循环首先获取虚拟地址umem的内容,再对应到内核虚拟地址kmem,获取到内核写入在虚拟地址kmem上的所述jiffies的值。其中,在上述专利技术中,所述步骤S6中,While循环的最后面,添加一个sleep(10)的休眠,以设置循环一次休眠10毫秒。根据本专利技术的另一个方面,提供一种基于linux用户态调用定时器的系统,包括内核态和用户态,其中,内核态包括内核获取地址单元和内核转换单元,所述内核获取地址单元用于在内核通过分配内存函数kmalloc申请8字节连续的内存,返回内存的首虚拟地址kmem,所述内核转换单元用于将虚拟地址kmem通过__pa命令转换为物理地址kphy;用户态包括用户态获取地址单元和用户态转换单元,所述用户态获取地址用于在用户态启动时,通过ioctl函数向内核态获取物理地址kphy;所述用户态转换单元用于将物理地址kphy转换为虚拟地址umem,用来进行用户态地址访问;内核态还包括计时载入单元,用于在内核中定义一个全局变量jiffies并写入虚拟地址kmem中;用户态还包括循环线程单元,用于创建执行一个while(1)的死循环线程,获取所述jiffies的值并且通过jiffies的值获取系统时间;用户态还包括比较单元,用于比较判断系统时间与本地保存的上一次时间,调用用户态的定时器处理定时器任务。其中,在上述专利技术中,所述内核申请的虚拟地址kmem对应的物理地址为kphy,用户态的虚拟地址umem对应的是同一个物理地址kphy,内核向虚拟地址kmem写入的任何数据,用户态都可以通过虚拟地址umem读出来。其中,在上述专利技术中,所述计时载入单元,每当内核发生一次时钟中断时,则将jiffies加1,当jiffies变化时,内核就将jiffies的数值写入虚拟地址kmem中。其中,在上述专利技术中,所述循环线程单元,While循环首先获取虚拟地址umem的内容,再对应到内核虚拟地址kmem,获取到内核写入在虚拟地址kmem上的所述jiffies的值。其中,在上述专利技术中,所述循环线程单元还用于在所述While循环的最后面,添加一个sleep(10)的休眠,保证循环一次休眠10毫秒。根据本专利技术的一种基于linux用户态调用定时器的方法及系统,通过用户态获取内核态jiffies的值即能获取系统时间,比较判断所述系统时间与本地保存的上一次时间,调用用户态的定时器处理定时器任务,以减少系统调用,提高系统的性能和效率。下面通过附图和实施例,对本专利技术的技术方案做进一步的详细描述。附图说明图1是本专利技术的基于linux用户态调用定时器的方法流程图;图2是本专利技术的基于linux用户态调用定时器的系统中内核态结构图;图3是本专利技术的基于linux用户态调用定时器的系统中用户态结构图;图4是本专利技术的基于linux用户态调用定时器的系统原理图。具体实施方式为使本专利技术的目的、技术方案和优点更加清楚明了,下面结合具体实施方式并参照附图,对本专利技术进一步详细说明。应该理解,这些描述只是示例性的,而并非要限制本专利技术的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本专利技术的概念。图1显示了本专利技术的基于linux用户态调用定时器的方法流程图;参见图1所示,本专利技术的基于linux用户态调用定时器的方法,包括以下步骤:步骤S1,在内核通过分配内存函数kmalloc申请8字节连续的内存,返回内存的首虚拟地址kmem;在此步骤S1中,通过分配内存函数kmalloc()函数,根据语法,void*kmalloc(size_tsize,intflags)在内核态中分配连续的虚拟地址,其中,size是要分配内存的大小,以字节为单位本文档来自技高网...

【技术保护点】
一种基于linux用户态调用定时器的方法,其特征在于,包括以下步骤:步骤S1,在内核通过分配内存函数kmalloc申请8字节连续的内存,返回内存的首虚拟地址kmem;步骤S2,将所述虚拟地址kmem通过_pa命令转换为物理地址kphy;步骤S3,用户态启动时,通过ioctl函数向内核态获取所述物理地址kphy;步骤S4,用户态将所述物理地址kphy转换为虚拟地址umem,用来进行用户态地址访问;步骤S5,在内核态中定义一个全局变量jiffies并写入虚拟地址kmem;步骤S6,用户态创建执行一个while(1)的死循环线程,获取所述jiffies的值,通过jiffies的值获取系统时间;步骤S7,比较判断所述系统时间与本地保存的上一次时间,调用用户态的定时器处理定时器任务。

【技术特征摘要】
1.一种基于linux用户态调用定时器的方法,其特征在于,包括以下
步骤:
步骤S1,在内核通过分配内存函数kmalloc申请8字节连续的内存,
返回内存的首虚拟地址kmem;
步骤S2,将所述虚拟地址kmem通过_pa命令转换为物理地址kphy;
步骤S3,用户态启动时,通过ioctl函数向内核态获取所述物理地址
kphy;
步骤S4,用户态将所述物理地址kphy转换为虚拟地址umem,用来
进行用户态地址访问;
步骤S5,在内核态中定义一个全局变量jiffies并写入虚拟地址kmem;
步骤S6,用户态创建执行一个while(1)的死循环线程,获取所述
jiffies的值,通过jiffies的值获取系统时间;
步骤S7,比较判断所述系统时间与本地保存的上一次时间,调用用
户态的定时器处理定时器任务。
2.根据权利要求1所述的基于linux用户态调用定时器的方法,其特
征在于,所述步骤S4中,内核申请的虚拟地址kmem对应的物理地址为
kphy,用户态的虚拟地址umem对应的是同一个物理地址kphy,内核向
虚拟地址kmem写入的任何数据,用户态都可以通过虚拟地址umem读
出来。
3.根据权利要求2所述的基于linux用户态调用定时器的方法,其特
征在于,所述步骤S5中,每当内核发生一次时钟中断时,则将jiffies加1,
当jiffies变化时,内核就将jiffies的数值写入虚拟地址kmem中。
4.根据权利要求3所述的基于linux用户态调用定时器的方法,其特
征在于,所述步骤S6中While循环首先获取虚拟地址umem的内容,再
对应到内核虚拟地址kmem,获取到内核写入在虚拟地址kmem上的所述

\tjiffies的值。
5.根据权利要求1至4中任一项所述的基于linux用户态调用定时器
的方法,其特征在于,所述步骤S6中,While循环的最后面,添加一个
sleep(10)的休眠以设置循环一次休眠10毫秒。
6.一种基于linux用户态调用定时器的系统,其特征在于,包括:内
核态和用户态,其中,...

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

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

1