深入Linux设备驱动程序内核机制 第8章.pdf

深入Linux设备驱动程序内核机制 第8章.pdf

ID:51094292

大小:745.26 KB

页数:22页

时间:2020-03-18

深入Linux设备驱动程序内核机制 第8章.pdf_第1页
深入Linux设备驱动程序内核机制 第8章.pdf_第2页
深入Linux设备驱动程序内核机制 第8章.pdf_第3页
深入Linux设备驱动程序内核机制 第8章.pdf_第4页
深入Linux设备驱动程序内核机制 第8章.pdf_第5页
资源描述:

《深入Linux设备驱动程序内核机制 第8章.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第8章时间管理设备驱动程序需要对时间进行操作,典型的可以分为两大类:延时与定时。前者是在两个连续的动作A与B之间插入一段时间空白,也即在动作A执行后需要等待若干时间才能执行动作B,至于在这段时间空白内,当前处理器也许是进入忙等待状态,也许是切换到一个新进程上。后者是在一个指定的时间点到达后执行某些动作,轮询是其最典型的应用。本章将讨论这两类时间上的操作的技术细节,设备驱动程序员在掌握了这些幕后的技术之后可以更好地理解设备驱动是如何对时间进行掌控的,当程序中需要对时间进行管理时选择最合适的解决方案。8.1jiffies内核源代码中几乎到处充斥着jiffies这样的变量

2、,作为设备驱动程序员对此想必也一定不会陌生,在某些书中它被形象地称为“时钟滴答”。内核源码中针对32位和64位系统分别定义了jiffies和jiffies_64:#define__jiffy_data__attribute__((section(".data")))externu64__jiffy_datajiffies_64;externunsignedlongvolatile__jiffy_datajiffies;其中的__jiffy_data表明这两个变量将出现在内核最终映像的".data"区中,另外在头文件中

3、在一个变量的声明前使用了“extern”关键字,提示了这个变量可能定义在某个别的文件中,事实上它们出现在内核的链接脚本文件vmlinux.lds中。除了数据位宽不一样外,上述两个变量在原理上是一样的。为了叙述的方便,下面只提jiffies,本节稍后会给出两者在操作上的一些细微的区别。通常jiffies在Linux系统启动引导阶段被初始化为0,当系统完成了对时钟中断1的初始化1基于x86体系架构的Linux系统中产生时钟中断的硬件典型的有可编程中断计数器PIT(ProgrammableInterruptTimer)8253和高级可编程中断控制器APIC(Advance

4、dProgrammableInterruptController),后者的分辨率及稳定性都要比前者好得多,用来实现高分辨率的时间源。第8章时间管理275之后,在每个时钟中断(“时钟滴答”)处理例程中该值都会被加1,如图8-1所示:时钟中断1/HZ秒jiffiesnn+1n+2n+3图8-1每隔1/HZ秒jiffies的值增1因此该值储存了系统自最近一次启动以来的时钟滴答数。在形式上,它跟我们日常所熟悉的时分秒这样的时间概念有很大的不同,不过对于设备驱动程序而言,出于时间管理的需要,使用jiffies就已经足够,因为它甚少用这种时间形式与应用程序进行沟通。除了时钟中断

5、处理例程中对jiffies进行更新外,其他任何模块(驱动程序当然也不例外)都只是读取该值以获得当前时钟计数。在实际使用jiffies时,还需要了解Linux内核中另一个与时钟中断息息相关的宏HZ,它用来表示系统中时钟中断发生的频率:#ifdef__KERNEL__#defineHZCONFIG_HZ/*Internalkerneltimerfrequency*/#defineUSER_HZ100/*someuserinterfacesare*/#defineCLOCKS_PER_SEC(USER_HZ)/*i

6、n"ticks"liketimes()*/#endif从上述的定义可以看出,内核提供了在配置阶段通过CONFIG_HZ修改HZ数值的可能性,但绝大多数情况下都没有必要修改它,使用内核默认的值1000就足够了。事实上CONFIG_HZ并未出现在内核的配置菜单选项中,而是就在内核源码根目录下的.config文件中。HZ值为1000意味着系统1秒内要发生1000次时钟中断,也就是说每隔1毫秒,jiffies的值就会增加1。所以,如果驱动程序使用jiffies来对时间进行度量的话,其精度只能局限在毫秒级别上,更高精度的时间管理单纯使用jiffies无法满足要求。相对于jif

7、fies而言,jiffies_64是个64位的变量(即便是在32位的体系架构上也是一样,此时它是一个unsignedlonglong型的变量,通过组合两个unsignedlong型变量得到),在64位平台上,它们其实是同一个变量,而在32位平台上,jiffies和jiffies_64的低32位是重合的。之所以引入jiffies_64,是考虑到了32位变量jiffies的溢出问题,在HZ=1000的情况下,大约50天就会导致jiffies溢出。对于驱动程序中的时间度量而言,这并不是个大问题(但是在作时间比较的时候仍然需要小心处理),不过现实中显然要考虑某些系统2有

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。