Linux中的PCB(进程描述符(task_struct))

概念必须清楚!慢一点可以,只要搞清楚就行了!

进程的两个基本元素是程序代码(可能被执行相同程序的其他进程共享)和与代码相关联的数据集

进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合
称为PCB(process control block ),Linux 操作系统下的PCB:task struct

task_struct–是PCB的一种

进程的另外一个叫法是任务(task),Linux内核通常把进程也成为任务.

内存把进程的列表存放在叫做任务队列(task list) 的双向循环链表中.链表中的每一个项类型为task_struct,称为进程描述符(prcess descriptor) 的结构

一个一个进程就是这样被连接起来的,双向链表,很直观!
Linux中的PCB(进程描述符(task_struct))_第1张图片

进程描述符的路径
在这里插入图片描述
大概从1340行开始就是关于进程描述符的信息了
Linux中的PCB(进程描述符(task_struct))_第2张图片

在 32位的机器上 ,task_struct的大小大概为 1.7KB,进程描述符里面所包含的信息能够完整的描述一个正在程序

具体的表征信息:

标识符:跟这个进程相关的唯一标识符,用来区别其他进程。
状态:如果进程正在执行,那么进程处于执行状态。
优先级:相对于其他进程的优先级。
程序计数器:程序中即将被执行的下一条指令的地址。
内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。
上下文数据:进程执行时处理器的寄存器中的数据。
I/O状态信息:包括显示的I/O请求,分配给进程的I/O设备(如磁带驱动器)和被进程使用的文件列表。
审计信息:可包括处理器时间总和,使用的时钟数总和,时间限制,审计号等。

在这里列出目前学习到的信息

1.进程标识符(pid):描述本进程的唯一标识符,用来区别其他进程
在这里插入图片描述

pid:进程标识符
tpid:线程的组号

2.进程状态
在结构体中定义的第一个变量

  volatile long state;    /* -1 unrunnable, 0 runnable, >0 stopped */

表示进程的运行状态,-1为不可运行,0可以运行,大于0表示停止。

进程图状态图:
Linux中的PCB(进程描述符(task_struct))_第3张图片
3.进程之间的亲属关系
进程的创建是具有继承关系的,一个进程可以创建多个子进程,该进程是这些子进程的父进程,这些子进程之间具有兄弟的关系等等。
在创建子进程的时候,子进程会继承父进程的大部分信息,也就是说子进程会将父进程的task_struct结构体中的大部分信息拷贝过来(fork()),除过pid,因而系统需要记录这些亲属关系,以便进程之间的协作。
每个进程的task_struct结构体中有许多指针,这些指针将所有的进程的task _struct结构连接起来,构成了一棵进程树。

Linux中的PCB(进程描述符(task_struct))_第4张图片
因为每个进程的结构体(task_struct)中都会有这些信息,所以一个连接一个就就构成一个树了.
Linux中的PCB(进程描述符(task_struct))_第5张图片
4.进程的优先级

在这里插入图片描述
Linux中的PCB(进程描述符(task_struct))_第6张图片

现在来看如何管理进程这个问题,就是描述+组织,先把进程描述起来(就是这些表征信息),都在task_struct里面),然后进行组织.对于组织的理解我的理解就是根据用户的要求来管理,就是组织.

你可能感兴趣的:(Linux)