关于0号进程和1号进程的一些认识
2013-07-29 20:59
369 查看
Linux操作系统内核态对进程线程不做严格区别
从内核角度看根本就没有线程的概念,线程仅仅被视为一个使用某些共享资源的进程如地址空间,文件系统,打开的文件,信号处理程序等
进程0
内核是一个大的程序,可以控制硬件,也可以创建、运行、终止、控制所有的进程。当内核被加载到内存后,首先就会有完成内核初始化的函数start_kernel()从无到有的创建一个内核线程swap,并设置其PID为0,即进程0;它也叫闲逛进程;进程0执行的是cpu_idle()函数,该函数仅有一条hlt汇编指令,就是在系统闲置时用来降低电力的使用和减少热的产生。同时进程0的PCB叫做init_task,在很多链表中起了表头的作用。
当就绪队列中再没有其他进程时,闲逛进程就会被调度程序选中,以此来省电,减少热量的产生。
进程1
即init进程。首先内核线程kernel_init执行内核的一些初始化函数,以将内核初始化。那么此内核态的线程又是怎样变为一个用户进程的?实际上,kernel_int()内核函数中调用了execve()系统调用,该系统调用装入用户态下的一个可执行程序init,从而启动用户进程init进程。注意,内核函数kernel_init()与用户态下的可执行文件init是不同的,位置不同,运行状态不同,代码也不同。init进程只是内核线程kernel_init启动起来的一个普通的用户进程,当然也是用户态下的第一个进程,并且init进程从不终止,用来创建和监控操作系统外层的所有进程的活动。
但是,刚才突然发现init进程的父进程是0号进程,百思不得其解啊!!!!
从内核角度看根本就没有线程的概念,线程仅仅被视为一个使用某些共享资源的进程如地址空间,文件系统,打开的文件,信号处理程序等
进程0
内核是一个大的程序,可以控制硬件,也可以创建、运行、终止、控制所有的进程。当内核被加载到内存后,首先就会有完成内核初始化的函数start_kernel()从无到有的创建一个内核线程swap,并设置其PID为0,即进程0;它也叫闲逛进程;进程0执行的是cpu_idle()函数,该函数仅有一条hlt汇编指令,就是在系统闲置时用来降低电力的使用和减少热的产生。同时进程0的PCB叫做init_task,在很多链表中起了表头的作用。
当就绪队列中再没有其他进程时,闲逛进程就会被调度程序选中,以此来省电,减少热量的产生。
进程1
即init进程。首先内核线程kernel_init执行内核的一些初始化函数,以将内核初始化。那么此内核态的线程又是怎样变为一个用户进程的?实际上,kernel_int()内核函数中调用了execve()系统调用,该系统调用装入用户态下的一个可执行程序init,从而启动用户进程init进程。注意,内核函数kernel_init()与用户态下的可执行文件init是不同的,位置不同,运行状态不同,代码也不同。init进程只是内核线程kernel_init启动起来的一个普通的用户进程,当然也是用户态下的第一个进程,并且init进程从不终止,用来创建和监控操作系统外层的所有进程的活动。
但是,刚才突然发现init进程的父进程是0号进程,百思不得其解啊!!!!
相关文章推荐
- Android中关于矩阵(Matrix)前乘后乘的一些认识
- 关于linux进程编程的一些笔记整理
- linux 0号进程和1号init进程
- Android中关于JNI 的学习(一)对于JNIEnv的一些认识
- 关于同步,异步,阻塞与非阻塞的一些认识
- 关于变量的一些基本认识01
- 关于ggplot2画散点图、条形图的一些细节认识
- 关于Linux进程的一些收获
- 关于一些对location认识的误区
- 关于视图的一些认识
- 关于127.0.0.1和本机IP的一些认识
- 关于迭代器失效的一些认识
- 关于Android原生Email的自己的一些认识
- 关于winpcap的一些认识
- Android 守护进程的一些认识
- linux 0号进程 1号进程 区别(转)
- 关于 库文件的一些认识
- 关于3G,一些基本面的认识
- linux 0号进程 1号进程 区别
- 关于JSP和Servlet的一些回顾认识