Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2207871
  • 博文数量: 436
  • 博客积分: 9833
  • 博客等级: 中将
  • 技术积分: 5558
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-29 10:27
文章存档

2013年(47)

2012年(79)

2011年(192)

2010年(118)

分类: LINUX

2013-01-20 10:06:24



《深入理解Linux内核》第三章有关进程方面的理解与问题:



1.      
进程是任何多道程序设计的操作系统中的基本概念,通常被定义为程序执行时的一个实例。在Linux源代码中,进程常被称为“任务”。



2.      
进程描述符 为了管理进程,内核必须对每个进程所做的事情进行清楚的描述。例如:内核必须知道进程的优先级,它是正在CPU上运行还是因为某些事件而被阻塞,给它分配了什么样的地址空间,允许它访问哪个文件等等,这正是进程描述符的作用。



3.      
进程状态:进程描述符中的状态域描述了进程当前所处的状态,它是一组标志,其中,每一个标志描述了一种可能的进程状态。以下是进程可能的状态:



可运行状态:进程要么在CPU上执行,要么准备执行。



可中断的等待状态:进程被挂起,直到某个条件变为真。



不可中断的等待状态:与可中断等待状态类似,但有一个例外:把信号传递到睡眠进程不能改变它的状态。



暂停状态:进程的执行被暂停。



跟踪状态:进程的执行已由Debugger程序暂停。当一个进程被另一个进程监控时,任何信号都可以把个进程置于跟踪状态。



僵死状态:进程的执行被终止,但父进程还没有发布wait4()waitpid()系统调用来返回有关死忘进程的信息。在发布wait()类系统调用前,内核不能丢弃包含在死进程描述符中的数据,因此父进程可能还需要它。



僵死撤消状态:最终状态,由于父进程刚发出wait4()waitpid()系统调用,因而进程由系统删除。为了防止其他执行线程在同一个进程上也执行wait()类系统调用,而把进程的状态由僵死状态改为僵死撤消状态。



4.      
标识一个进程:内核对进程的大部分引用都是通过进程描述符指针进行的。类Unix操作系统允许用户使用一个叫做进程标识符(PID)的数来标识进程,PID存放在进程描述符的pid字段中,PID被顺序编号,新创建进程的PID通常是前一个进程的PID1。不过,PID的值有一个上限,当内核使用的PID达到这个上限值的时候必须开始循环使用已闲置的小PID号。缺省情况下,最大的PID号是32767。由于循环使用PID号,内核必须通过管理一个pidmap_array位图来表示当前已分配的PID号和闲置的PID号。因为一个页框包含32768个位,所以32位体系结构中pidmap_array位置存放在一个单独的页中。Linux把不同的PID与系统中每个进程或轻量级进程相关联。对于线程组,一个线程组中的所有线程使用和该线程组的领头线程相同的PID,即该组中第一个轻量级进程的PID,它被存入进程描述符的tgid字段。getpid()系统调用返回当前进程的tgid值而不是pid值。



5.      
轻量级进程:两个轻量级进程基本上可以共享一些资源,诸如地址空间、打开的文件等。(之所以说轻量级,就是说偏向线程,可以共享一些资源,但是又不是完全的线程。)      线程,内核看做是简单的进程。











问题:轻量级进程和线程的区别,为什么要轻量级进程而非线程?



 

阅读(784) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~