一.linux内核延时机制概述
内核中涉及的延时主要有两种实现方式:忙等待或者睡眠等待。前者阻塞程序,在延时时间到达前一直占用CPU,而后者是将进程挂起(置进程于睡眠状态并释放CPU资源)。所以,前者一般用在延时时间在毫秒以内的精确延时,后者用于延时时间在毫秒以上的长延时。为了充分利用 CPU 资源,使系统有更好的吞吐性能,在对延迟时间的要求并不是很精确的情况下,睡眠等待通常是值得推荐的。
二.忙等待短延时
特点:
1.CPU原地空转,死等某个事件满足要求
2.忙等待用于等待时间极短的场合:ns,us,ms(10ms以内)
3.中断和进程都可以使用(硬件中断处理函数,tasklet,工作队列,普通的进程)
内核中提供了如下3个函数用于纳秒、微秒和毫秒级的延时:
void ndelay(unsigned long nsecs);
void udelay(unsigned long usecs);
void mdelay(unsigned long msecs); //一般不建议直接使用mdelay()函数,这将无谓地耗费 CPU 资源
上述延迟的实现原理本质上