核心定時器,

2021-06-16 06:14:34 字數 1934 閱讀 5275

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 ...