歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Unix知識 >> Unix基礎知識

kernel學習:內核線程

由於內核對進程和線程不做區分,所以內核線程(kernel thread)又稱為內核進程(kernel process)。注意不能把普通進程中的線程理解為進程。

內核線程和普通進程的區別:

1、內核線程只運行在內核態,普通進程可以運行在內核態和用戶態。

2、內核線程只能調用內核函數,普通進程可以通過系統調用調用內核函數。

3、內核線程只能運行在大於PAGE_OFFSET的地址空間,而普通進程可以4G的地址空間(除了訪問用戶空間的3G,通過系統調用可以訪問內核空間的1G空間)。

由於內核線程不受用戶態上下文的拖累,常被內核用於執行一些重要的任務,如刷新磁盤高速緩存,交換不同的頁面。

在linux系統中用ps –ef命令看到的帶“d”結尾的進程就是內核線程。

內核線程由kernel_thread在內核態被創建。

在linux2.6.xxx/arch/arm/include/asm/processor.h  
/* 
 * Create a new kernel thread 
 */
extern intkernel_thread(int (*fn)(void *), void *arg, unsigned long flags);

參數說明:

fn:新創建的內核線程要執行的函數。

arg:fn的參數。

flags:和do_fork中的clone_flags作用相似。在kernel_thread中do_fork缺省使用了CLONE_VM.

查看本欄目更多精彩內容:http://www.bianceng.cn/OS/unix/

Copyright © Linux教程網 All Rights Reserved