linux核心時間管理及核心定時器

2021-10-05 01:33:14 字數 2333 閱讀 6011

linux核心時間管理

linux核心中有大量的函式需要時間管理,比如延時程式、週期性的程式排程等。硬體定時器提供時鐘源,時鐘源的頻率是可以設定的,設定好以後通過週期性中斷來計時。

週期性中斷的頻率也叫系統節拍,系統節拍在編譯核心的時候可以設定。

核心原始碼的根目錄下的.config檔案中有相關巨集定義

config_hz_fixed=0

config_hz_100=y

# config_hz_200 is not set

# config_hz_250 is not set

# config_hz_300 is not set

# config_hz_500 is not set

# config_hz_1000 is not set

config_hz=100

config_sched_hrtick=y

此外,在編譯核心的時候也可以通過圖形介面配置,最後被寫入.config檔案下,核心最終會根據config_hz來確定時鐘節拍

時鐘節拍快慢的優缺點

時鐘節拍越快時間精度越高,例如設定為100hz的時間精度是10ms;1000hz的時間精度是1ms。

時鐘節拍越快意味著中斷越頻繁,處理器消耗越大。目前一般cpu過剩。

linux核心使用全域性變數 jiffies記錄系統從啟動以來的系統節拍數。每次系統啟動會將jiffies置零0。在32位系統中需要考慮溢位問題。假設系統節拍設定為1000hz,則49.7天就會溢位。對於繞回現象linux核心有相關api函式對jiffies進行比較。

linux 核心提供了幾個 jiffies 和 ms、 us、 ns 之間的轉換函式,可以將時間轉換成節拍數。

將 jiffies 型別的引數 j 分別轉換為對應的毫秒、微秒、納秒。

int jiffies_to_msecs(const unsigned long j)

int jiffies_to_usecs(const unsigned long j)

u64 jiffies_to_nsecs(const unsigned long j)

將毫秒、微秒、納秒轉換為 jiffies 型別。

long msecs_to_jiffies(const unsigned int m)

long usecs_to_jiffies(const unsigned int u)

unsigned long nsecs_to_jiffies(u64 n)

核心定時器

linux 核心定時器使用很簡單,只需要提供超時時間(相當於定時值)和定時處理函式即可,當超時時間到了以後設定的定時處理函式就會執行。 核心定時器只能定時一次,在定時時間超出以後會自動關閉,如果要實現週期性定時,則序需要在定時處理函式中重新開啟定時器。

核心定時器使用

linux 核心使用 timer_list 結構體表示核心定時器。

struct timer_list ;
使用核心定時器需要定義timer_list結構體,填充其成員變數,編寫超時函式。然後調動核心定時器的相關api函式來操作。

核心定時器api函式

void init_timer(struct timer_list *timer)
void add_timer(struct timer_list *timer)
int del_timer(struct timer_list * timer)

int del_timer_sync(struct timer_list *timer)

del_timer函式不關注定時器是否啟用或者定時結束。

del_timer_sync是del_timer的公升級版,此函式會等待定時處理函式執行完畢再刪除定時器

int mod_timer(struct timer_list *timer, unsigned long expires)
此函式必須在定時器沒有啟用的狀態下使用,直接修改定時的系統節拍數。

核心定時器使用

#include struct timer_list timer;

void function(unsigned long arg)

void timer_begin(void)

void timer_end(void)

Linux核心 定時器和時間管理

系統定時器是一種可程式設計硬體晶元。它能以固定頻率產生中斷。該中斷就是所謂的定時器中斷。它所相應的中斷處理程式負責更新系統時間,還負責執行須要週期性執行的任務。系統定時器和時鐘中斷處理程式是linux系統核心管理機制中的中樞。另外乙個關注的焦點是動態定時器 一種用來推遲執行程式的工具。比方說。假設軟...

時間管理5大核心步驟

時間管理核心五大步驟為 收集 處理 管理 執行 回顧。1 收集 收集記錄,你是否會有過總覺得有一些事情沒乾的感覺。人的大腦記憶是有限的,我們需要把我們的計畫 任務 靈感記錄下來,合理利用甘特圖,這樣會更加方便 快捷。2 處理 處理分類,事情有分輕重,如果能及時處理的事情一定要及時處理,避免事情的堆積...

linux 核心學習之 定時器和時間管理

1.概述 目的 核心 系統定時器和時鐘中斷處理程式是linux系統核心管理機制的中樞。2 基本概念 系統定時器 一種可程式設計硬體晶元,用於幫助核心計算和管理時間,能以固定頻率自發產生定時器中斷,對應的中斷處理程式負責更新系統時間及執行需要週期性的任務。節拍率 系統定時器自行觸發時鐘中斷的頻率,即系...