关于jiffies
iffies在內(nèi)核中是一個(gè)全局變量,聲明包含在#include <linux/jiffies.h>中,
幾個(gè)內(nèi)核中常用的的概念:
1. HZ
內(nèi)核常量,ARM架構(gòu)HZ=100,X86架構(gòu)HZ=1000
例如HZ=100,表示硬件定時(shí)器1秒鐘給CPU發(fā)送100個(gè)定時(shí)器中斷信號
每發(fā)生一次中斷的時(shí)間間隔為10ms
注意:不同的環(huán)境HZ的值都是可能不一樣的,我曾經(jīng)遇到過一個(gè)TI的開發(fā)板,他的jiffies比較特殊一點(diǎn),HZ = 128表示1秒,所以大家使用的時(shí)候,一定要確認(rèn)好HZ的值
2. jiffies_64, jiffies
?jiffies_64是內(nèi)核全局變量,64位,unsigned long long,
記錄自開機(jī)以來發(fā)生了多少次的定時(shí)器中斷,每發(fā)生一次,"自動"加1?
jiffies也是內(nèi)核全局變量,32位,unsigned long,值取得jiffies_64 的低32位,每發(fā)生一次定時(shí)器中斷,同樣"自動"加1,一般用來記錄流失時(shí)間(時(shí)間間隔)
注意:只要在內(nèi)核代碼中看到j(luò)iffies,就等于此刻為當(dāng)前時(shí)間
由于在內(nèi)核中經(jīng)常使用的jiffies,下邊給出一個(gè)小例子(本代碼只是一個(gè)使用jiffies的框架,具體使用,只需做稍微的修改) ? ? ?
?參考代碼:
unsigned long timeout = jiffies + 5*HZ;
說明:
?jiffies:表示當(dāng)前時(shí)間
5*HZ:時(shí)間間隔為5秒
timeout:表示5秒以后的時(shí)間,也就是超時(shí)時(shí)間
?參考代碼:判斷是否超時(shí)
?unsigned long timeout = jiffies + 5*HZ;
? ? ? ...
? ? ? ...
?... //若干條代碼,代碼執(zhí)行需要時(shí)間
if (jiffies > timeout)
超時(shí)
else
? ? ? ? 沒有超時(shí)
? ? ?
?解決方法:
if(time_after(jiffies, timeout)) {
? ? ??超時(shí)
? ? ? } else {
? ? ??沒有超時(shí)
? ? ? }//此函數(shù)不需要死機(jī),只需要用sourceinsignt查看內(nèi)核大神們怎么使用即可,里面很多都是經(jīng)典的用法
總結(jié)
- 上一篇: Linux 内核中的 cdev_allo
- 下一篇: Linux内核中读写文件数据的方法