功能:实现定时器到期后调用一个函数进行相关事件的处理!编程
获取内核时间:数组
内核延时:函数
死循环延时:进程
长延时:jiffies事件
短延时:mdelay udelayssl
睡眠延时:多进程
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等一列函数!
关于内核时间相关的知识点实际经常使用的就这些了!但愿小伙伴们多加练习,结合实际项目去巩固这些知识!