linux 设备驱动程序 时间流 之 延迟执行 -1

原创 2004年09月27日 20:52:00
一:自己通过循环实现:
   a) j = jiffies + jit_delay * HZ;
          while( jiffes < j )
                /* nothing */;  // 忙,不允许调度器调度

    缺点:如果在代码执行前,关了时钟中断的话,则jiffes不会得到更新,死循环的啊!而且增大了系统的负荷,任何其他程序得不到调度。

    b)   j = jiffies + jit_delay * HZ;
          while( jiffes < j )
                schedule();   // 允许调度器调度
    缺点:虽然允许调度,但是若系统中只有一个进程可以运行时(当前的进程),则会发生来回调度自己,浪费系统的资源,而且调度后,如果系统很忙,驱动程序等待的时间可能会比预计多得多。一旦一个进程在调度时让出了处理器,无法保证以后的某个时间就能重新分配给它。如果可接受的延迟时间有上限的话,用这种方式调用 schedule,对驱动程序来说并不是一个安全的解决方案。
 
  获得延迟的最好方法,是请求内核为我们实现延迟。根据驱动程序是否在等待其他事件,有两种设置短期延迟的办法。

c)如果驱动程序使用等待队列等待某个事件,而你又想确保在一段时间后一定运行该驱动程序,可以使用 sleep 函数的超时版本,
sleep_on_timeout(wait_queue_head_t *q, unsigned long timeout);
interruptible_sleep_on_timeout(wait_queue_head_t *q,
                               unsigned long timeout);

d)在通常的驱动程序中,可以以下列两种方式重新获得执行:在等待队列上调用一个 wake_up,或者 timout 超时。在这个特定实现中,没人会调用 wake_up(毕竟其它代码根本就不知道这件事),所以进程总是因 timeout 超时而被唤醒。这是一个完美有效的实现,不过,如果驱动程序无须等待其它事件,可以用一种更直接的方式获取延迟,即使用schedule_timeout:



set_current_state(TASK_INTERRUPTIBLE);
schedule_timeout (jit_delay*HZ);



linux 设备驱动程序 时间流 之 延迟执行 --转载

3  延迟执行 设备驱动程序经常需要将某些特定代码延迟一段时间后执行――通常是为了让硬件能完成某些任务。这一节将介绍许多实现延迟的不同技术,哪种技术最好取决于实际环境中的具体情况。我们将介绍所有的这些...
  • collide
  • collide
  • 2004年09月27日 20:46
  • 3543

linux 设备驱动程序 时间流 之 延迟执行 -2

关于短延迟:延迟通过使用jiffies达不到目的,只能使用内核函数:udelay(unsigned long usecs);mdelay(unsigned long msecs);前者用软件循环指定的...
  • collide
  • collide
  • 2004年09月27日 22:17
  • 4027

linux 设备驱动程序 时间流 总结

第 6 章  时间流至此,我们基本知道怎样编写一个功能完整的字符模块了。现实中的设备驱动程序,除了实现必需的操作外还要做更多工作,如计时、内存管理,硬件访问等等。幸好,内核中提供的许多机制可以简化驱动...
  • collide
  • collide
  • 2004年09月27日 20:16
  • 2589

LINUX设备驱动程序(第3版)[高清PDF]

下载地址:网盘下载 内容简介 编辑 《LINUX设备驱动程序(第3版)》已针对Linux内核的2610版本彻底更新过了。内核的这个版本针对常见任务完成了合理化设计及相应的...
  • cf406061841
  • cf406061841
  • 2017年05月29日 10:07
  • 1998

linux设备驱动程序第二版 时间流

第6章 时间流至此,我们知道怎样写一个特性比较完全的字符模块了。我们将在后面几章陆续讨论驱动程序可以访问的一些内核资源。本章,我们先来看看内核代码是如何对时间问题进行处理的。该问题包括(按复杂程度排列...
  • menuconfig
  • menuconfig
  • 2007年08月24日 14:55
  • 1269

如何编写Linux设备驱动程序以及测试详细流程(附实例)

Linux是Unix操作系统的一种变种,在Linux下编写驱动程序的原理和思想完全类似于其他的Unix系统,但它dos或window环境下的驱动程序有很大的区别。在Linux环境下设计驱动程序,思想简...
  • melody157398
  • melody157398
  • 2012年05月22日 13:49
  • 1017

时间、延迟(Linux设备驱动程序)

时间延迟 如何度量时间差,比较时间 如何获得当前时间 如何将操作延迟指定的一段时间 如何调度异步函数到指定的时间之后执行 度量时间差 内核通过定时器中断来跟踪时间流。 时钟中断由...
  • s651665496
  • s651665496
  • 2016年04月25日 20:43
  • 1086

linux设备驱动程序(第三版)阅读笔记(三)

说明:版权所有归作者,只供学习交流,若有其它用途请联系作者,转载请遵守IT人职业规范,请注明转载地址   第三章:字符设备驱动程序 1,(设备编号的内部表示)在内核中, dev_t 类型(...
  • tanghui19900420
  • tanghui19900420
  • 2013年04月24日 08:25
  • 543

手把手教你写Linux设备驱动---定时器(一)(基于友善之臂4412开发板)

这个专题我们来说下Linux中的定时器。在Linux内核中,有这样的一个定时器,叫做内核定时器,内核定时器用于控制某个函数,也就是定时器将要处理的函数在未来的某个特定的时间内执行。内核定时器注册的处理...
  • morixinguan
  • morixinguan
  • 2017年04月02日 17:56
  • 3828

手把手教你写Linux设备驱动---input子系统(二)--按键驱动实现(一)(基于友善之臂4412开发板)

在上一节里,我们用一个应用程序实现了鼠标的控制,并控制鼠标用相对位移不断的画一个正方形,感觉非常有意思,这一节,我们将通过一个简单按键实例来真正的实现一个input设备驱动程序。http://blog...
  • morixinguan
  • morixinguan
  • 2017年04月11日 00:11
  • 1585
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux 设备驱动程序 时间流 之 延迟执行 -1
举报原因:
原因补充:

(最多只允许输入30个字)