歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux內核 >> linux內核之定時器和時鐘管理

linux內核之定時器和時鐘管理

日期:2017/3/3 12:44:28   编辑:Linux內核

眾所周知,在任何操作系統中,都必須有一個心跳,作為操作系統的最小的時鐘管理單位

在內核當中,這個心跳叫tick,它是定時器產生的兩次時鐘中斷的間隔,頻率為HZ

在如今有越來越強勁的CPU環境下,HZ在不同的體系下有不同的值

在ARMv8體系下,HZ的值是1000,即每秒鐘1000次tick的變化

還有一個用戶層面經常使用的值是jiffies,它記錄了系統從開機之後的總的tick值,在32位體系下是32位的,一定時間過後會溢出,在64位體系下,我這輩子看不到溢出了

所以在用戶層面上,用64位的jiffies能夠掌握精確的系統運行的時間

內核還有一種時鐘叫實時時鐘,它的主要功能是開機的時候從實時時鐘裡讀出現在的時間,其它時候並無什麼作用

對用戶層面和驅動開發層面用的最多的就是系統定時器了,所謂系統定時器就是設定一個時間,時間到了之後就會觸發某個程序的調用

系統定時器是內核在每個tick中檢查定時器的狀態,如果有到時的就觸發一個軟件中斷,所以系統定時器觸發的程序處於軟件中斷環境中,此時不能使用調度,還要注意資源的競爭

OK,此時定時器就設置好了,時間一到就執行定時處理程序,注意定時處理程序執行一次後定時器功能就沒啦,具體定時時間可以配合jiffies和HZ使用(X×HZ 等於X秒)

可以在定時處理程序中使用

重新使能

不用之後要記得刪除

要注意一個多核情況下的競爭條件

假如在當前CPU執行del_timer,但是在另一個CPU上可能已經運行定時處理程序,這個時候可能就會出現同時訪問timer的情況

能解決這個問題,要注意不要在中斷中使用

內核也提供了如上3個函數進行時間等待,但使用這個函數做長時間等待並不理智

他們使用while循環來消耗CPU時間,其實是浪費了CPU的能力,如果延時時間比較長,應該使用更好的辦法

總結:

內核定時器在驅動程序中經常使用

在對時間延時小並且要求高的情況下使用delay函數

在允許調度,並且延時時間比較長的情況下 用schedule_timeout比較好

Copyright © Linux教程網 All Rights Reserved