Linux PCB,process descriptor,task_struct,thread_in

2019-07-14 08:38发布

刚学完操作系统,对于进程管理的概念还一直停留在PCB上,但linux课上却几乎没有提到过PCB概念,只是经常说task_struct,经过一番查找,终于有点明白这些概念之间的关系了。 对于PCB,教材上这样说:
为了使参与并发执行的每个程序(含数据)都能独立运行,在操作系统中必须为之配置一个专门的数据结构,成为进程控制块(Process Control Block,PCB)。系统利用PCB来描述进程的基本情况和活动过程,进而控制和管理进程。这样,由程序段、相关的数据段和PCB三部分便构成了进程实体(又称进程映像)。一般情况下,我们把进程实体就简称为进程,例如,所谓创建进程,实质上是创建进程实体中的PCB;而撤销进程,实质上是撤销进程的PCB,本教材中也是如此。
  • 进程控制块的组织方式
    1)线性方式
    2)链接方式
    3)索引方式
后来经过查找,发现
  • PCB只能是逻辑上的概念,真正对于进程的描述信息,是位于task_struct中的。
The Process Control Block is the collection of information needed to define a process. In modern OS’es processes are (more or less) isolated and run in their own memory space. The term process control block is not actually in use by any operating system and the various info needed to control a process is not actually stored in a signal structure, as such the term is not that helpful
自己大致理解:
在现代的操作系统中,进程都是相互独立的,并且在属于它们自己的内存空间内运行,pcb实际上并没有任何操作系统采纳,并且对于控制进程所需要的一些列信息并不是储存在一个单一结构中的。 真正储存进程的几乎全部信息的就是task_struct
而常说的process descriptor(进程描述符)其实就是task_struct
In the kernel, the process descriptor is a structure called task_struct, which keeps track of process attributes and information. All kernel information regarding a process is found there.
有了task_struct,然而,在kernel stack的顶部或底部,通常保存的却是thread_info,是thread_info中才保存有指向task_struct的指针,这样做的原因是:
The thread_info and task_struct structures are just two different structures that hold different pieces of information about a thread, with the thread info holding more architecture-specific data than the task_struct. It makes more sense to split up the information rather than keep it all in the same structure (Although you could put them in the same struct, the 2.4 Linux kernel did this ).
自己理解:
task_struct和thread_info 是两种不同的数据结构储存了不同的关于进程的信息,thread_info中更多的是关于进程的层次结构的信息。把这些信息分开显然是更明智的选择。