ldd3:當定時器執行時
,排程該定時器的程序可能正在睡眠,或在其它處理器上執行,或乾脆推出。
沒有執行定時器,排程它的程式推出了,定時器該如何?
2.6.35。22核心
gcc-4.4.5
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
module_license ("gpl");
struct timer_list my_timer;
void my_fun (unsigned long arg)
static int time_me_init (void)
/* set_current_state (task_interruptible);
schedule_timeout (end);*///bu ka wu jie guo
// mdelay (5000);
// ssleep (5);
init_timer (&my_timer);
my_timer.function = &my_fun;
my_timer.data = (unsigned long)5;
my_timer.expires = jiffies + 4*hz;
add_timer (&my_timer);
ssleep(10);
//如果沒有這句(這是保證定時器開始執行時,呼叫它的程式沒退出),會宕機
printk (kern_info "in time_me_init/n");
return 0;
}static void time_me_exit (void)
module_init (time_me_init);
module_exit (time_me_exit);
思考:這是在init中的情況,如果在其它的函式中呢,
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
module_license ("gpl");
struct timer_list my_timer;
void my_fun (unsigned long arg)
static int time_me_init (void)
/* set_current_state (task_interruptible);
schedule_timeout (end);*///bu ka wu jie guo
// mdelay (5000);
// ssleep (5);
init_timer (&my_timer);
my_timer.function = &my_fun;
my_timer.data = (unsigned long)(&my_timer);
my_timer.expires = jiffies + 1*hz;
add_timer (&my_timer);
ssleep(10);
del_timer (&my_timer);
printk (kern_info "in time_me_init/n");
return 0;
}static void time_me_exit (void)
module_init (time_me_init);
module_exit (time_me_exit);
核心定時器
linux核心2.4版中去掉了老版本核心中的靜態定時器機制,而只留下動態定時器。相應地在timer bh 函式中也不再通過 run old timers 函式來執行老式的靜態定時器。動態定時器與靜態定時器這二個概念是相對於linux核心定時器機制的可擴充套件 功能而言的,動態定時器是指核心的定時器佇...
核心定時器
核心中最終的計時資源是定時器。定時器用於定時器超時處理程式在未來某個特定時間點執行,或者週期性的輪詢硬體的狀態。linux提供了核心定時器完成這類工作。定 時器的只需要執行一些初始化的操作,如 設定乙個超時時間,指定超時要呼叫的函式,然後啟用定時器就可以了。它的處理和工作佇列還是有點類似的。和任務隊...
核心定時器
核心用來控制在未來某個時間點 基於jiffies 排程執行某個函式的一種機制。被排程的函式是非同步執行的,它類似於一種 軟體中斷 而且是處於非程序的上下文中,所以排程函式必須遵守以下規則 1 沒有 current 指標 不允許訪問使用者空間。因為沒有程序上下文,相關 和被中斷的程序沒有任何聯絡。2 ...