内核线程VS普通进程
来源:互联网 发布:java json 数组转换 编辑:程序博客网 时间:2024/04/28 16:37
参考文章:(1) http://blog.csdn.net/tigerjibo/article/details/8299686 (2)http://blog.chinaunix.net/uid-27032138-id-3364542.html
同一程序中可以运行多个线程,这些线程共享内存空间,除此之外,还共享打开的文件,
但是我们要建立一个概念,对于LINUX内核而言,根本没有线程一说!
LINUX的内核线程是由kernel_thread()函数在内核态下创建的。(将创建时得到的函数永远执行下去,由一个循环组成,在需要的时候,内核线程将被唤醒执行)。每个内核线程都拥有唯一属于自己的task_struct,所以在内核中,它看起来就像是一个普通的进程(只是该进程和其他一些进程共享某些资源,如地址空间)
内核线程VS普通进程
(1)内核线程执行的是内核中的函数,而普通进程只能通过系统调用才能执行内核函数。
(2)内核线程只运行在内核态,而普通进程即可以运行在内核状态也可以运行在用户态。
(3)由于内核线程只运行在内核态,所以内核线程只能运行在3G~4G这个地址空间内,而一个普通进程可以运行在0G~4G的地址空间内。
(4)内核线程没有独立的地址空间,实际它的mm指针被设置为NULL;
(5)内核经常需要在后台执行一些操作。这种任务可以通过内核线程 (kernel thread)完成。
在现有内核线程中创建一个新的内核线程的方法如下:
int kernel_thread(int (*fn)(void *),void *arg, unsigned long flags)
新的任务也是通过向普通的clone()系统调用传递特定的flags参数而创建的。在上面的函数返回时,父线程退出,并返回一个指向子线程task_struct的指针。子线程开始运行fn指向的函数,arg是运行时需要用到的参数
(6)一般情况下,内核线程会将它在创建时得到的函数永远执行下去(除非系统重启)。该函数通常由一个循环构成,在需要的时候,这个内核线程就会被唤醒和执行吗,完成了当前任务,它会自行休眠。
(7) 内核线程和 普通进程一样,可以被调度,也可以被抢占
- 内核线程VS普通进程
- linux进程,普通线程,内核线程
- 内核线程和普通进程的区别
- 内核线程与普通进程的区别
- 守护进程(内核线程和普通进程)
- 进程vs线程
- 进程VS线程
- linux 进程 VS 线程
- 进程 vs 线程
- 进程 vs. 线程
- 进程 vs. 线程
- 进程VS.线程
- 进程 vs. 线程
- 进程 vs. 线程
- 进程 vs. 线程
- 进程 vs 线程
- Linux 进程 vs 线程
- 进程.vs 线程.
- jsp运行原理
- hadoop 部署
- Impala中变相实现删除和更新
- Pat(Basic Level)Practice--1032(挖掘机技术哪家强)
- ps
- 内核线程VS普通进程
- hadoop Client: Retrying connect to server
- 2015.1.7,第四节课Android控件SharedPreferences(贡献参数)实现回显
- 忆,那年——2014
- JavaWeb的各种中文乱码终极解决方法
- 图片
- ext2文件系统
- 给刚毕业的程序员……
- 对数组进行特定的从小到大的排序如将1,1,2,2,3,3,4,4,5,5,5,5,5,5排序成1,2,3,4,5,1,2,3,4,5,5,5,5,5