Linux內核線程

Linux內核線程和用戶線程是不同的,內核線程可以在全系統內進行資源的競爭而用戶線程只能在本進程內進行資源的競爭,內核線程又稱為核心進程。

Linux進程分3種,內核線程、用戶進程、用戶線程。

內核線程擁有 進程描述符、PID、進程正文段、核心堆棧。

內核線程不需要訪問用戶空間內存,這是再好不過了。所以內核線程的task_struct 的mm域為空

但是剛才說過,內核線程還有核心堆棧,沒有mm怎麼訪問它的核心堆棧呢?這個核心堆棧跟task_struct的

thread_info共享8k的空間,所以不用mm描述。

因為內核線程不訪問用戶空間,只操作內核空間內存,而所有進程的內核空間都是一樣的。這樣就省下了一個mm域的內存。


用戶進程擁有 進程描述符、PID、進程正文段、核心堆棧 、用戶空間的數據段和堆棧。


用戶線程擁有 進程描述符、PID、進程正文段、核心堆棧,同父進程共享用戶空間的數據段和堆棧。

內核線程的創建與使用:

內核線程創建使用kthread_create函數就可以搞定,新創建的線程處於不了運行狀態,必須調用wake_up_process函數喚醒該線程。

struct task_struct *kthread_create(…)

上述兩部操作可以通過kthread_run一步搞定。因此kthread_run使用更多點。


分享到:


相關文章: