zoukankan      html  css  js  c++  java
  • 内核--时间

    功能:实现定时器到期后调用一个函数进行相关事件的处理!

    获取内核时间:

    内核延时:

      死循环延时:

        长延时:jiffies

        短延时:mdelay  udelay

      睡眠延时:

        ssleep

        msleep

    内核定时器:

        内核定时器原理:

        内核自己有一个结构体来实现内核定时器的机制:使用全局的jiffies变量:这个变量是在内核启动的过程逐渐累加的:初始值是-5*HZ*60 也就是5分钟。

        为什么初始值是个负数呢?因为在内核启动的时候,有很多进程会对jiffies进行检查:如果jiffies是正数,可能会检查失败直接退出,所以这个进程发就会启动失败。

        内核自己维护了一个链表数组:数组大小为256:即可以挂载256条链表:这些链表存放着内核的定时器jiff的值与jiffies的差值:相同的在一个链表中。如下图

        ------------------------0ms  :即立刻要到时的定时器:可能会挂载一些定时器处理函数。

        ------------------------1ms :

        ------------------------2ms :

              |

              |

        ------------------------255ms :

        除了这条链表外,内核还维护其他255个链表:分成四个部分,每部分64个链表:他们存放的着内核的定时器jiff的值与jiffies的差值:就不是1ms的间距了:具体的我也不知道!!!!呵呵

        同样是上面的实现机制:

        jiffies每次增加的时候:内核都会对这些链表里面的内容进行迁移:保证对应链表里面记录的定时器到时时间的一致性。

        上面对应的内核中的定时器原理讲述完成:

        对应的进行代码编写的时候:也是有相应的函数供我们使用:这里就不再进行描述了:可以参考一些其他的编程手册!

    高精度定时器:

        高精度定时器:是内核提供的一种更加精密的时间计时方式:不是依赖于jiffies这个全局变量。可以实现相对时间的定时,也可以实现绝对时间的定时。同时可以实现循环定时,这个要根据定时触发的handler的返回值来决定的。

        当然具体的代码:内核也提供了一套高精度定时器的操作函数:需要自己去参考编程手册练习下:hr_timer xxxxx等一列函数!

    关于内核时间相关的知识点实际常用的就这些了!希望小伙伴们多加练习,结合实际项目去巩固这些知识!

    有时候,不小心知道了一些事,才发现自己所在乎的事是那么可笑。
  • 相关阅读:
    PAT乙级-1037. 在霍格沃茨找零钱(20)
    PAT乙级-1041. 考试座位号(15)
    PAT乙级-1047. 编程团体赛(20)
    css3 实现 背景图片显示
    块级元素与行内元素(内联元素)的区别和联系
    JS变量
    导航条菜单的制作 滑动缓慢
    HTML中Id和Name的区别
    全面理解Javascript中Function对象的属性和方法
    理解盒子模型
  • 原文地址:https://www.cnblogs.com/axjlxy/p/9419533.html
Copyright © 2011-2022 走看看