linux核心中建立執行緒方法

2021-09-07 07:33:07 字數 2099 閱讀 9019

1.標頭檔案
#include //

wake_up_process()

#include //

kthread_create()、kthread_run()

#include //

is_err()、ptr_err()2.實現(kthread_create 與kthread_run區別)

linux核心建立執行緒的方法實質上只有乙個:kthread_create,kthread_run是kthread_create的巨集罷了;但這個巨集卻有一定的意義,正如其名一樣:

kthread_create:建立執行緒。執行緒建立後,不會馬上執行,而是需要將kthread_create() 

返回的task_struct

指標傳給

wake_up_process()

,然後通過此函式執行執行緒。

kthread_run :建立並啟動執行緒的函式:

2.1建立執行緒

在模組初始化時,可以進行執行緒的建立。使用下面的函式和巨集定義:

struct task_struct *kthread_create(int (*threadfn)(void *data),

void *data,

const

char namefmt, ...);

#define kthread_run(threadfn, data, namefmt, ...)                     \()

例如:

static

struct task_struct *test_task;

static

int test_init_module(void

)wake_up_process(test_task);

return0;

}module_init(test_init_module);

2.2執行緒函式int threadfunc(void *data)

else}…

return0;

}

2.3結束執行緒

在模組解除安裝時,可以結束執行緒的執行。使用下面的函式:

int kthread_stop(struct task_struct *k);

例如:

static

void test_cleanup_module(void)}

module_exit(test_cleanup_module);

3.注意事項

(1) 在呼叫kthread_stop函式時,執行緒函式不能已經執行結束。否則,kthread_stop函式會一直進行等待。

(2) 執行緒函式必須能讓出cpu,以便能執行其他執行緒。同時執行緒函式也必須能重新被排程執行。在例子程式中,這是通過schedule_timeout()函式完成的。

4.效能測試

可以使用top命令來檢視執行緒(包括核心執行緒)的cpu利用率。命令如下:

top –p 執行緒號

可以使用下面命令來查詢執行緒號:

ps aux|grep 執行緒名

可以用下面的命令顯示所有核心執行緒:

ps afx

注:執行緒名由kthread_create函式的第三個引數指定

在分析usb_hub_init()的**的時候,忽略掉了一部份.

**片段如下所示:

int usb_hub_init(void)

kthread_run() 是kernel中用來啟動乙個新kernel執行緒的介面,它所要執行的函式就是後面跟的第乙個引數.在這裡,也就是hub_thread().另外,順帶 提一句,要終止kthread_run()建立的執行緒,可以呼叫kthread_stop().

linux建立執行緒 建立Linux核心執行緒

執行緒 thread 是作業系統能夠進行運算排程的最小單位。它被包含在程序之中,是程序中的實際運作單位。乙個執行緒指的是程序中乙個單一順序的控制流,乙個程序中可以併發多個執行緒,每個執行緒並行執行不同的任務。很多時候會需要在後台執行一些任務,比如做乙個需要實時監控某個模組狀態的debug功能,這種任...

Linux 核心執行緒建立

在linux核心中,建立執行緒函式為 kthread create on node 需要注意的是核心建立乙個核心執行緒是個非同步過程。函式 kthread create on node對外提供兩個函式一,kthread create worker二,kthread create on node當然我...

linux核心中新增驅動的方法

在driver目錄下,新建hello資料夾,進入資料夾,建立兩個檔案hello.h和hello.c,在hello資料夾下新增kconfig和makefile兩個檔案。1,kconfig檔案內容 config hello tristate first android driver default n ...