加入收藏 | 设为首页 | 会员中心 | 我要投稿 佛山站长网 (https://www.0757zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

kernel学习:内核线程

发布时间:2016-10-08 19:19:56 所属栏目:Unix 来源:网络整理
导读:由于内核对进程和线程不做区分,所以内核线程(kernel thread)又称为内核进程(kernel process)。注意不能把普通进程中的线程理解为进程。 内核线程和普通进程的

由于内核对进程和线程不做区分,所以内核线程(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/

(编辑:佛山站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读