关于0号进程和1号进程的一些认识

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号进程,百思不得其解啊!!!!

posted @ 2013-07-29 20:59  herry_tu  阅读(2900)  评论(0编辑  收藏  举报