Linux的動態定時器 時間輪

2021-09-30 23:36:16 字數 901 閱讀 9127

定時器—有時也稱為動態定時器或核心定時器—是管理核心時間的基礎。定時器是一種軟體功能,即允許在將來的某個時刻,函式在給定的時間間隔用完時被呼叫。注意的是定時器並不會週期執行,它在超時後就自行銷毀,這也是定時器被稱為動態定時器的乙個原因。動態定時器不斷地建立和銷毀,而且它的執行次數也不受限制。

定時器在核心**中屬於乙個基礎元件。要想完全弄清楚linux2.6中核心定時器的實現,得先從初始化開始。

在start_kernel(void)-->init_timers(void)

void __init init_timers(void)

在timer_cpu_notify(&timers_nb,(unsigned long)cpu_up_prepare,

(void*)(long)smp_processor_id());

中執行init_timers_cpu(cpu) //初始化本cpu中的timers

初始化的主要**是:

spin_lock_init(&base->lock);

for (j = 0; j < tvn_size; j++)

for (j = 0; j < tvr_size; j++)

init_list_head(base->tv1.vec + j);

base->timer_jiffies = jiffies;

base->next_timer = base->timer_jiffies;

這段**的主體是base,base的定義是:structtvec_base *base;

這個tvec_base是動態定時器的主要資料結構,每個cpu上有乙個,它包含相應cpu中處理動態定時器需要的所有資料。為簡化分析僅考慮單cpu。給出這個資料機構:

struct tvec_base ____cacheline_aligned;

linux定時器時間輪演算法詳解

linux高併發程式設計 紅黑樹實現定時器 時間輪實現定時器 linux多執行緒環境下海量定時任務的定時器設計 linux定時器分為低精度定時器和高精度定時器兩種型別,核心對其均有實現。本文討論的是我們在應用程式開發中比較常見的低精度定時器。作為常用的基礎元件,定時器常用的幾種實現方法包括 基於排序...

基於時間輪的定時器

目錄 是乙個單層時間輪,當指標走到某一格上,就獲取那一格上掛的任務將其執行。當時如果時間跨度大的時候,格仔數明顯不夠,那麼就可以做成多級時間輪。其實就是當低層的時間輪走了一圈,將它高一層的時間輪走一格,並且將掛在高層時間輪上的任務分配下來。檔案 include timewheel.h include...

定時器 tick 時間輪定時器學習筆記

參考自時間輪的原理和手錶的指標計時類似,將任務結束的時間加入對應最高端的時間輪轉盤中。例如任務結束時間為4 30 20,時間輪盤有三個,分別對應,小時,分鐘和秒。開始時將任務加入4小時所在的時間輪中。四小時過去後,任務的剩餘時間時間為0 30 20就將任務加入30分所在的時間輪中。30分鐘過去後,將...