在linux核心中,建立執行緒函式為__kthread_create_on_node(),需要注意的是
核心建立乙個核心執行緒是個非同步過程。
函式__kthread_create_on_node對外提供兩個函式
一,__kthread_create_worker
二,kthread_create_on_node
當然我們主要使用二這種形式。對於二這種形式,核心簡單定義了巨集:
#define kthread_create(threadfn, data, namefmt, arg...) \kthread_create_on_node(threadfn, data, numa_no_node, namefmt, ##arg)
這樣方便通過kthread_create來建立核心執行緒。
需要注意,__kthread_create_on_node()函式並不執行真正的核心執行緒建立,而是建立乙個物件,然後把物件遞交乙個
鍊錶上面,喚醒建立核心執行緒的執行緒來執行建立。而原先的建立者則進行等待。
這裡封裝的資料結構為struct kthread_create_info。
存放在kthread_create_list鍊錶上面。
建立執行緒的執行緒是kthreadd,其在核心啟動的早期初始化。
static noinline void __ref rest_init(void)
intkthreadd(void *unused)spin_unlock(&kthread_create_lock);}return 0;
}
static voidcreate_kthread(struct kthread_create_info *create)create->result = err_ptr(pid);
complete(done);喚醒原先需要建立執行緒的執行緒}
}
pid_tkernel_thread(int (*fn)(void *), void *arg, unsigned long flags)
linux建立執行緒 建立Linux核心執行緒
執行緒 thread 是作業系統能夠進行運算排程的最小單位。它被包含在程序之中,是程序中的實際運作單位。乙個執行緒指的是程序中乙個單一順序的控制流,乙個程序中可以併發多個執行緒,每個執行緒並行執行不同的任務。很多時候會需要在後台執行一些任務,比如做乙個需要實時監控某個模組狀態的debug功能,這種任...
linux核心中建立執行緒方法
1.標頭檔案 include wake up process include kthread create kthread run include is err ptr err 2.實現 kthread create 與kthread run區別 linux核心建立執行緒的方法實質上只有乙個 kth...
建立核心執行緒
在作業系統的最小執行單元就是執行緒,在核心中線程的概念更加容易看出來。比如說有的時候需要使用執行緒來完成一些任務,可是這些任務的工作量過大的時候系統處理這些任務就必須停下來等待。而等待的過程就大大的浪費了cup寶貴的時間,所以這個時候利用多執行緒去處理是最好的方法。在驅動裡生成的執行緒一般是系統執行...