一种基于linux用户态调用定时器的方法及系统的制作方法

【技术领域】

[0001]本发明涉及计算机领域,尤其涉及一种基于linux用户态调用定时器的方法及系统

【背景技术】

[0002]计算机技术领域内,定时器是一种常见且必须的技术,是一系列函数的集合体,通过使用其提供的方法能够使软件在固定的时间内完成指定的功能,其目的在于使软件在固定的时间内自动执行某种操做或任务,目前在很多应用系统或应用平台中都要用到定时器来完成周期性的任务或特定时刻的任务执行,如实现自动控制,定时状态切换或延时处理等功能。

[0003]1 inux内核态拥有自己的定时器,可以获取内核的系统时间以及对应的任务调度,但目前用户态没有一个用户态自己的且与内核态同步的定时器,只能够通过调用linux内核提供的init_timer和add_timer,对定时器初始化,将定时器添加到内核的定时器中,由内核的定时器,来实现定时调度,以实现定时处理用户添加的定时器处理任务。

[0004]但上述通过内核定时器实现用户添加的定时器功能,都会产生系统调用,如果系统频繁调用或用户态添加的定时器处理太多的话,那么整个系统的性能和效率就会降低。

[0005]因此,有必要提供一种基于linux用户态调用定时器的方法及系统,以解决上述现有技术存在的技术问题。

【发明内容】

[0006]本发明的目的是提供一种基于linux用户态调用定时器的方法及系统,以减少系统调用,提高系统的性能和效率。

[0007]根据本发明的一个方面,提供一种基于linux用户态调用定时器的方法,包括以下步骤,步骤s 1,在内核通过分配内存函数kmal loc申请8字节连续的内存,返回内存的首虚拟地址kmem;步骤S2,将所述虚拟地址kmem通过—pa命令转换为物理地址kphy ;步骤S3,用户态启动時通过1ctl函數向内核态获取所述物理地址kphy;步骤S4,用户态将所述物理地址kphy转换为虚拟地址umem,用来进行用户态地址访问;步骤S5,在内核态中定义一个全局变量jiff ies并写入虚拟地址kmem;步骤S6,用户态创建执行一个while(l)的死循环线程,获取所述j i f f i e s的值,通过j i f f i e s的值获取系统时间;步骤S7,比较判断所述系统时间与本地保存的上一次时间,调用用户态的定时器处理定时器任务。

[0008]其中,在上述发明中,所述步骤S4中,内核申请的虚拟地址kmem对应的物理地址为kphy,用户态的虚拟地址umem对应的是同一个物理地址kphy,内核向虚拟地址kmem写入的任何数据,用户态都可以通过虚拟地址umem读出来。

[0009]其中,在上述发明中,所述步骤S5中,每当内核发生一次时钟中断时,则将jiffies加1,当jiff ies变化时,内核就将jiff ies的数值写入虚拟地址kmem中。

[0010]其中,在上述发明中,所述步骤S6中While循环首先获取虚拟地址umem的内容,再对应到内核虚拟地址kmem,获取到内核写入在虚拟地址kmem上的所述j iff ies的值。

[ΟΟ??]其中,在上述发明中,所述步骤S6中,While循环的最后面,添加一个sleep(lO)的休眠,以设置循环一次休眠10毫秒。

[0012]根据本发明的另一个方面,提供一种基于linux用户态调用定时器的系统,包括内核态和用户态,其中,内核态包括内核获取地址单元和内核转换单元,所述内核获取地址单元用于在内核通过分配内存函数kmal loc申请8字节连续的内存,返回内存的首虚拟地址kmem,所述内核转换单元用于将虚拟地址kmem通过—pa命令转换为物理地址kphy;用户态包括用户态获取地址单元和用户态转换单元,所述用户态获取地址用于在用户态启动时,通过1ctl函数向内核态获取物理地址kphy;所述用户态转换单元用于将物理地址kphy转换为虚拟地址umem,用来进行用户态地址访问;内核态还包括计时载入单元,用于在内核中定义一个全局变量jiff ies并写入虚拟地址kmem中;用户态还包括循环线程单元,用于创建执行一个while(l)的死循环线程,获取所述jiff ies的值并且通过jiffies的值获取系统时间;用户态还包括比较单元,用于比较判断系统时间与本地保存的上一次时间,调用用户态的定时器处理定时器任务。

[0013]其中,在上述发明中,所述内核申请的虚拟地址kmem对应的物理地址为kphy,用户态的虚拟地址umem对应的是同一个物理地址kphy,内核向虚拟地址kmem写入的任何数据,用户态都可以通过虚拟地址umem读出来。

[0014]其中,在上述发明中,所述计时载入单元,每当内核发生一次时钟中断时,则将jiff ies加1,当jiff ies变化时,内核就将jiff ies的数值写入虚拟地址kmem中。

[0015]其中,在上述发明中,所述循环线程单元,While循环首先获取虚拟地址umem的内容,再对应到内核虚拟地址kmem,获取到内核写入在虚拟地址kmem上的所述j if f ies的值。

[0016]其中,在上述发明中,所述循环线程单元还用于在所述While循环的最后面,添加一个s 1 eep (10)的休眠,保证循环一次休眠10毫秒。

[0017]根据本发明的一种基于linux用户态调用定时器的方法及系统,通过用户态获取内核态jiff ies的值即能获取系统时间,比较判断所述系统时间与本地保存的上一次时间,调用用户态的定时器处理定时器任务,以减少系统调用,提高系统的性能和效率。

[0018]下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。

【附图说明】

[0019]图1是本发明的基于linux用户态调用定时器的方法流程图;

[0020]图2是本发明的基于linux用户态调用定时器的系统中内核态结构图;

[0021]图3是本发明的基于linux用户态调用定时器的系统中用户态结构图;

[0022]图4是本发明的基于linux用户态调用定时器的系统原理图。

【具体实施方式】

[0023]为使本发明的目的、技术方案和优点更加清楚明了,下面结合【具体实施方式】并参照附图,对本发明进一步详细说明。应该理解,这些描述只是示例性的,而并非要限制本发明的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本发明的概念。

[0024]图1显示了本发明的基于linux用户态调用定时器的方法流程图;

[0025]参见图1所示,本发明的基于linux用户态调用定时器的方法,包括以下步骤:

[0026]步骤S1,在内核通过分配内存函数kmalloc申请8字节连续的内存,返回内存的首虚拟地址kmem ;

[0027]在此步骤S1中,通过分配内存函数kmalloc()函数,根据语法,void*kmalloc(size_t size,int flags)在内核态中分配连续的虚拟地址,其中,size是要分配内存的大小,以字节为单位,本发明实施例中size为8,即分配8字节连续的内存,并且返回内存的首虚拟地址kmem ;

[0028]步骤S2,将所述虚拟地址kmem通过—pa命令转换为物理地址kphy ;

[0029]在此步骤S2中,所述虚拟地址kmem通过—pa命令转换为物理地址,具体的转换计算过程就是,虚拟地址,大小4个字节(32bit),包含着找到物理地址的信息,分为3个部分:第22位到第31位这10位(最高10位)是页目录中的索引,第12位到第21位这10位是页表中的索引,第0位到第11位这12位(低12位)是页内偏移。处理器通过CR3找到当前页目录所在物理页,取虚拟地址的高lObit,然后把这lObit右移2bit(因为每个页目录项4个字节长,右移2bi t相当于乘4)得到在该页中的地址,取出该地址处PDE (4个字节),就找到了该虚拟地址对应页表所在物理页,取虚拟地址第12位到第21位这10位,然后把这lObit右移2bit(因为每个页表项4个字节长,右移2bit相当于乘4)得到在该页中的地址,取出该地址处的PTE(4个字节),就找到了该虚拟地址对应物理页的地址,最后加上12bit的页内偏移得到了对应的物理地址。

[°03°] 步骤S3,用户态启动通过1ctl函数向内核态获取所述物理地址kphy ;

[0031]通过上述步骤S1和步骤S2,内核态得到所述物理地址kphy后,用户态启动,通过设备驱动程序中对设备的10通道进行管理的接口函数1ctl()向内核态获取所述物理地址kphy ο

[0032]步骤S4,将所述物理地址kphy转换为虚拟地址umem,用来进行用户态地址访问;

[0033]在步骤S3用户态向内核态获取所述物理地址kphy后,通过计算转换所述物理地址kphy为虚拟地址umem ;

[0034]通过上述步骤S1到所述步骤S4,内核申请的虚拟地址kmem对应的物理地址为kphy,而用户态的虚拟地址umem对应的是与内核同一个物理地址kphy,所以内核向虚拟地址kmem写入的任何数据,用户态都可以通过虚拟地址umem读出来。

[0035]步骤S5,在内核态中定义一个全局变量jiff ies并写入虚拟地址kmem;

[0036]在此步骤S5中,所述全局变量jiffies用来纪录自系统启动以来产生地节拍的总数,启动时,内核将该变量j if f ies初始化为0,每当内核发生一次时钟中断时,就会将变量jiff ies加1,当变量jiff ies变化时,内核就将变量j if f ies的数值写入到所述虚拟地址kmem 中。

[0037 ] 步骤S6,用户态创建执行一个wh ile(l)的死循环线程,获取所述jiffies的值,通过jiffies的值获取系统时间;

[0038]在此步骤S6中,用户态创建一个线程,线程里面执行一个While(l)的死循环,循环中首先获取用户态虚拟地址umem的内容,在上述步骤S1到所述步骤S4,用户态都可以通过虚拟地址umem读出来,故用户态可以通过虚拟地址umem对应到内核虚拟地址kmem,获取到内核写入在虚拟地址kmem上的所述变量jiff ies的值;如上步骤S5所述,又因变量jiffies的值是用来纪录自系统启动以来产生地节拍的总数,即能获取系统时间。

[0039]步骤S7,比较判断所述系统时间与本地保

linux用户态定时器,一种基于linux用户态调用定时器的方法及系统的制作方法相关推荐

  1. linux 目录防篡改,一种基于Linux虚拟文件系统的防篡改方法及系统的制作方法

    一种基于Linux虚拟文件系统的防篡改方法及系统的制作方法 [技术领域] [0001]本发明涉及文件防护技术领域,特别涉及一种基于Linux虚拟文件系统的防篡改方法及系统. [背景技术] [0002] ...

  2. linux进程看门狗使用方式,Linux系统中基于看门狗的精细化进程监控方法及系统的制作方法...

    Linux系统中基于看门狗的精细化进程监控方法及系统的制作方法 [技术领域] [0001] 本发明涉及Linux系统的进程监控技术领域,特别是涉及一种Linux系统中基于看 门狗的精细化进程监控方法及 ...

  3. 制作linux只读文件系统,一种Squashfs只读根文件系统的远程升级方法及系统的制作方法...

    一种Squashfs只读根文件系统的远程升级方法及系统的制作方法 [技术领域] [0001]本发明涉及嵌入式Linux操作系统的根文件系统,具体是涉及一种Squashfs (南瓜文件系统)只读根文件系 ...

  4. 计算机网络安全通信的实现方法,一种计算机网络安全通信的实现方法及系统的制作方法...

    专利名称:一种计算机网络安全通信的实现方法及系统的制作方法 技术领域: 本发明涉及计算机网络安全通信领域,具体讲本发明是一种关于计算机网络安全通信的 实现方法及系统. 背景技术: 在许多安全相关的高可 ...

  5. linux 网络监控 邮件,一种基于Linux的邮件监控方法与流程

    本发明涉及计算机安全技术领域,具体地说是一种实用性强.基于Linux的邮件监控方法. 背景技术: 随着计算机的普及以及人们对个人信息安全的重视,如何保障计算机乃至个人信息的安全成为了一个至关重要的问题 ...

  6. linux 修改bios信息,一种基于Linux系统通过IPMI工具修改BIOS选项的测试方法及系统_2017103901253_权利要求书_专利查询_专利网_钻瓜专利网...

    1.一种基于Linux系统通过IPMI工具修改BIOS选项的测试方法,其特征在于: 步骤101,启用IPMI服务: 步骤102,BIOS Setup选项使能设置: 步骤103,修改BIOS选项当前值与 ...

  7. 龙芯2h芯片不能进入pmon_一种基于龙芯2H芯片应用的COMe_nano核心板的制作方法

    本实用新型涉及工业自动化控制技术领域,尤其是涉及一种基于龙芯 2H芯片应用的COMe_nano核心板. 背景技术: 核心板是将PC的核心功能打包封装的一块电子主板.大多数核心板集成了CPU.存储设备和 ...

  8. android 活体检测方案,一种基于人脸识别认证的Android红外双目活体检测的制作方法...

    本发明涉及人脸识别领域,具体涉及一种基于人脸识别认证的Android红外双目活体检测. 背景技术: 在目前的利用红外线实现双目活体检测的技术中,普通红外双目,能够同时实时采集近红外和可见光两种图像,并 ...

  9. python模糊神经网络预测_一种基于模糊神经网络的化学分子生物毒性预测模型算法的制作方法...

    本发明属于化工 技术领域: ,具体是一种基于模糊神经网络的化学分子生物毒性预测模型算法. 背景技术: :近些年来,化学物质合成技术飞快发展,合成物质已经应用于社会的各行各业,随着工业的高度发展,全球化 ...

  10. skew算法_一种基于FPGA的多通道高速输入信号自动de‑skew算法的制作方法

    本发明涉及高速数据采集技术,更具体的涉及一种基于FPGA的多通道高速输入信号自动de-skew算法. 背景技术: 随着对精度和速率要求越来越高,目前数据采集系统向着多通道和超高速两个方向发展.多通道高 ...

最新文章

  1. IDEA2017注册码
  2. 对软件工程课程的期望
  3. 关于 Mac OS X 内核技术来源
  4. mysql join性能_Mysql Join语法解析与性能分析
  5. ECCV 2020 Spotlight 谷歌论文大盘点
  6. 23种常用设计模式的UML类图
  7. python制作个人信息管理系统_python实现简易学生信息管理系统
  8. 【转】NHibernate集合映射中的set, list, map, bag, array
  9. YBT 2.4 AC自动机
  10. Windows网络编程获得本机IP地址
  11. 设计、经验和变革:做好IT战略规划的三要素
  12. VS下载插件慢的解决方法。
  13. 广告/友情链接/站内信/会员地址/会员银行卡/我的收藏/评论/搜索/用户标签/用户抬头号/签到/我的足迹/我的优惠卷
  14. 关于校园粮食浪费问题的调查
  15. C++:Trivial、Standard-Layout 和 POD
  16. 举头皮皮虾机器人_一种仿生水下皮皮虾机器人通信系统的制作方法
  17. html删除子元素无效,如何使用JavaScript删除DOM节点的所有子元素?
  18. 给大家普及呼叫中心和电话营销系统相关知识--中继线路
  19. SQL Server 与Oracle 建表语句的不同之处
  20. pbootcms后台编辑器上传mp4视频 默认黑屏不显示如何解决

热门文章

  1. 第七十五章 SQL命令 START TRANSACTION
  2. 绘制可视化报表技巧,免费报表工具必备!
  3. 计算机组装维护课件,计算机组装与维护课件(全)
  4. Python统计学11——分位数回归
  5. apache配置基于域名访问
  6. matlab 数据白化,数据白化
  7. com词根词缀_(完整版)词根词缀记忆大全---经典详细的总结
  8. 台式计算机有无线网卡吗,台式机无线网卡怎么用?图解在这自己收藏
  9. 《领导力21法则》读书感悟
  10. 4.5 Frank 口语习语前7