linux定时器和jiffies

linux定时器和jiffies

ID:32535405

大小:74.80 KB

页数:9页

时间:2019-02-11

linux定时器和jiffies_第1页
linux定时器和jiffies_第2页
linux定时器和jiffies_第3页
linux定时器和jiffies_第4页
linux定时器和jiffies_第5页
资源描述:

《linux定时器和jiffies》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、1.linuxHZLinux核心几个重要跟时间有关的名词或变数,以下将介绍HZ、tick与jiffies。HZLinux核心每隔固定周期会发出timerinterrupt(IRQ0),HZ是用来定义每一秒有几次timerinterrupts。举例来说,HZ为1000,代表每秒有1000次timerinterrupts。HZ可在编译核心时设定,如下所示(以核心版本2.6.20-15为例):adrian@adrian-desktop:~$cd/usr/src/linuxadrian@adrian-desktop:/usr/src/linux$makeme

2、nuconfigProcessortypeandfeatures--->Timerfrequency(250HZ)--->其中HZ可设定100、250、300或1000。小实验观察/proc/interrupt的timer中断次数,并于一秒后再次观察其值。理论上,两者应该相差250左右。adrian@adrian-desktop:~$cat/proc/interrupts

3、greptimer&&sleep1&&cat/proc/interrupts

4、greptimer0:9309306IO-APIC-edgetimer0:9309562IO-APIC

5、-edgetimer上面四个栏位分别为中断号码、CPU中断次数、PIC与装置名称。-9-要检查系统上HZ的值是什么,就执行命令catkernel/.config

6、grep'^CONFIG_HZ='2.TickTick是HZ的倒数,意即timerinterrupt每发生一次中断的时间。如HZ为250时,tick为4毫秒(millisecond)。3.JiffiesJiffies为Linux核心变数(unsignedlong),它被用来记录系统自开机以来,已经过了多少tick。每发生一次timerinterrupt,Jiffies变数会被加一。值得注意的

7、是,Jiffies于系统开机时,并非初始化成零,而是被设为-300*HZ(arch/i386/kernel/time.c),即代表系统于开机五分钟后,jiffies便会溢位。那溢位怎么办?事实上,Linux核心定义几个macro(timer_after、time_after_eq、time_before与time_before_eq),即便是溢位,也能借由这几个macro正确地取得jiffies的内容。另外,80x86架构定义一个与jiffies相关的变数jiffies_64,此变数64位元,要等到此变数溢位可能要好几百万年。因此要等到溢位这刻发生应

8、该很难吧。-9-3.1jiffies及其溢出全局变量jiffies取值为自操作系统启动以来的时钟滴答的数目,在头文件中定义,数据类型为unsignedlongvolatile(32位无符号长整型)。jiffies转换为秒可采用公式:(jiffies/HZ)计算,将秒转换为jiffies可采用公式:(seconds*HZ)计算。当时钟中断发生时,jiffies值就加1。因此连续累加一年又四个多月后就会溢出(假定HZ=100,1个jiffies等于1/100秒,jiffies可记录的最大秒数为(2^32-1)/100=429

9、49672.95秒,约合497天或1.38年),即当取值到达最大值时继续加1,就变为了0。3.4Linux内核如何来防止jiffies溢出Linux内核中提供了以下四个宏,可有效解决由于jiffies溢出而造成程序逻辑出错的情况。下面是从LinuxKernel2.6.7版本中摘取出来的代码:/**Theseinlinesdealwithtimerwrappingcorrectly.Youare*stronglyencouragedtousethem*1.Becausepeopleotherwiseforget*2.Becauseifthetimerw

10、rapchangesinfutureyouwon'thaveto*alteryourdrivercode.**time_after(a,b)returnstrueifthetimeaisaftertimeb.-9-**Dothiswith"<0"and">=0"toonlytestthesignoftheresult.A*goodcompilerwouldgeneratebettercode(andareallygoodcompiler*wouldn'tcare).Gcciscurrentlyneither.*/#definetime_after(a

11、,b)(typecheck(unsignedlong,a)&&typecheck(unsignedlon

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

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

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