1.概述
创建进程有两种方式:一是由操作系统创建,二是由父进程创建的进程(通常为子进程)。
系统调用fork是创建一个新进程的唯一方式。vfork也可创建进程,但它实际上还是调用了fork函数。
由操作系统创建的进程它们之间是平等的不存在资源继承关系。
由父进程创建的进程通常为子进程它们之间有继承关系。
在系统启动时,OS会创建一些进程,它们承担着管理和分配系统资源的任务,即系统进程。
0号idle进程,它是从无到有诞生的第一个线程,主要用于节能 ;关于 idle进程 , 系统最初引导 0号进程,对应的 PCB为 init_task(),要说明下它是 0号进程 PCB的头,并不是 1号 init进程,在引导结束后即成为 cpu 上的 idle进程。在每个 cpu上都有一个 idle进程,这些进程登记在 init_tasks[]数组中。 idle进程不进入就绪队列,系统稳定后,仅当就绪队列为空的时候 idle 进程才会被调度到,在没有其它进程运行的情况下,它大量时间占用 cpu 。
1号进程(init进程),它是一个由内核启动的用户级进程 ,它是所有用户进程的父进程。实际上,Linux2.6在初始化阶段首先把它建立为一个内核线程kernel_init:
kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND);
参数:CLONE_FS | CLONE_FILES | CLONE_SIGHAND表示0号线程和1号线程分别共享文件系统(CLONE_FS)、打开的文件(CLONE_FILES)和信号处理程序(CLONE_SIGHAND)。当调度程序选择到kernel_init内核线程时,kernel_init就开始执行内核的一些初始化函数将系统初始化。
参考文献
1.Linux进程学习总结.
2.Linux 进程管理剖析.http://www.ibm.com/developerworks/cn/linux/l-linux-process-management/
阅读(614) | 评论(0) | 转发(0) |