窥探 kernel,just for fun --- 内核线程

本文介绍了内核线程(kernel thread)的概念,并详细解释了内核线程与普通进程之间的区别,包括运行状态、调用权限及地址空间等方面的不同。此外还介绍了内核线程在Linux系统中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本系列文章由张同浩编写,转载请注明出处:http://blog.youkuaiyun.com/muge0913/article/details/7480929

邮箱:muge0913@sina.com



由于内核对进程和线程不做区分,所以内核线程(kernel thread)又称为内核进程(kernel process)。注意不能把普通进程中的线程理解为进程。

内核线程和普通进程的区别:

1、内核线程只运行在内核态,普通进程可以运行在内核态和用户态。

2、内核线程只能调用内核函数,普通进程可以通过系统调用调用内核函数。

3、内核线程只能运行在大于PAGE_OFFSET的地址空间,而普通进程可以4G的地址空间(除了访问用户空间的3G,通过系统调用可以访问内核空间的1G空间)。

 

由于内核线程不受用户态上下文的拖累,常被内核用于执行一些重要的任务,如刷新磁盘高速缓存,交换不同的页面。

在linux系统中用ps –ef命令看到的带“d”结尾的进程就是内核线程。

内核线程由kernel_thread在内核态被创建。



  1. 在linux2.6.xxx/arch/arm/include/asm/processor.h  
  2. /* 
  3.  * Create a new kernel thread 
  4.  */  
  5. 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.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值