现在的位置: 首页 > 综合 > 正文

linux时间管理 之 延时操作

2014年01月13日 ⁄ 综合 ⁄ 共 1117字 ⁄ 字号 评论关闭

1、有时候为了同步CPU与外设的速度问题,带来了延时操作。

     延时可以分为长延时和断延时。

2、长延时

      a、忙等待

            while(i--)

            优点:简单

            缺点:i、忙等待,CPU效率低

                       ii、内核允许抢占时,时间不精确

      b、让出处理器

            i、unsigned long j = jiffies + HZ;

                 while(time_before(jiffies,j))

                        schedule()

                 schedule()可以让出处理器,但不能把进程从CPU的运行队列中移出。当只有这一个进程时,将导致CPU不断的运行schedule而不能进入idle状态。

            ii、delay_1s()

                  {

                  set_current_state(TASK_UNINTERRUPTIBLE);

                  schedule_timeout(jiffies + HZ);

                   }

                  改变当前进程的状态,调用schedule_timeout时可以把进程睡眠。

                  schedule_timeout,当前进程从运行队列移走之后将被纪录到定时器的数据节点中,当定时器的时间到期后,将会唤醒进程从新进入运行队列。

              iii、msleep

                   void msleep(unsigned int msecs):内部实现了__set_current_state和schedule_timeout。

                    msleep_interruptible

                   unsigned long msleep_interruptible(unsigned int msecs):睡眠的进程可以被打断。

3、短延时

      短延时一般延时时间较短,可与进程切换所需时间比拟。所以短延时的实现一般基于忙等待。

      进程切换一板1-100微秒。

     include/linux/delay.h

     void mdelay(unsigned long msecs);

     void udelay(unsigned long usecs);

     void ndelay(unsigned long nsecs);

抱歉!评论已关闭.