(五)對linux內核中jiffies+Hz表示一秒鍾的理解


jiffies在內核中是一個全局變量,它用來統計系統啟動以來系統中產生的總節拍數,這個變量定義在include/Linux/jiffies.h中,定義形式如下。

unsigned long volatile jiffies;

想要理解jiffies的含義,我們需要首先理解時鍾  節拍率  節拍的概念。

一、時鍾

時鍾應用於處理器的定時信號,它使得處理器在時鍾中運行,依靠信號時鍾,處理器便知道什么時候能夠執行它的下一個功能。在linux系統中,時鍾分為硬件時鍾(又叫實時時鍾)和軟件時鍾(又叫系統時鍾)。在對內核編程中,我們經常用到的是系統時鍾,系統時鍾的主要任務有如下三點:

1.保證系統時間的正確性。

2.防止進程超額使用CPU。

3.記錄CPU和資源消耗的統計時間。

系統時鍾的初始值在系統啟動時,通過讀取硬件時鍾獲得,然后由Linux內核來維護。在系統運行中,系統時鍾的更新是根據系統啟動后的時鍾滴答數來更新的。

實時時鍾的主要作用是提供計時和產生精確的時鍾中斷。實時時鍾是用來持久存放系統時間的設備,即便系統關閉后,它也可以靠主板上的微型電池提供的電力保持系統的計時。

二、節拍率

節拍率其實就是系統定時器產生中斷的頻率,所謂頻率即指中斷每秒鍾產生多少次,即Hz(赫茲)。不同的體系結構的系統而言,節拍率不一定相同。

節拍率(Hz)的值可以在文件include/asm-x86/param.h中看到,定義如下。

#define  Hz 1000

三、節拍

節拍就是指系統中連續兩次時鍾中斷的間隔時間,該值等於節拍率分之一,即1/Hz。因為系統再啟動時已經設置了Hz,所以系統的節拍也可以確定。內核正是利用節拍來計算系統時鍾和系統運行時間的。

三、jiffies變量

jiffies用來統計系統啟動以來系統中產生的總節拍數。該變量在系統啟動時被初始化為0,接下來沒進行一次時鍾中斷,jiffies自動加1。因此,知道了總的節拍數,然后再除以Hz,即可知系統的運行時間(jiffies/Hz)。

對於jiffies+Hz的含義,jiffies表示當前的系統時鍾中斷數,Hz表示一秒后的時鍾中斷的增加量,假設time=jiffies+Hz,正如上面所說 ,內核正是利用節拍數來計算系統時鍾和系統運行時間的,則通過jiffies+Hz即可間接表示一秒鍾。

如果系統中某個程序運行一段時間后,需要比較該運行時間是否超過一秒,即可通過比較time和程序運行后的jiffies值來判斷是否超過一秒。當然此時,我們需要考慮jiffies變量的回繞問題,不可直接用if(time > jiffies)來比較,linux系統提供了4個宏定義來解決用戶空間利用jiffies變量進行時間比較時可能產生的回繞現象,如下所示:

time_before()

 time_after()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM