Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3245253
  • 博文数量: 530
  • 博客积分: 13360
  • 博客等级: 上将
  • 技术积分: 5473
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-13 13:32
文章分类

全部博文(530)

文章存档

2017年(1)

2015年(2)

2013年(24)

2012年(20)

2011年(97)

2010年(240)

2009年(117)

2008年(12)

2007年(8)

2006年(9)

分类: C/C++

2011-12-23 17:16:48

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/
阅读(1361) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~