进程PCB详解
为了每个程序能独立运行,便为其配置了一个专门的数据结构,称为:PCB(PCB,Process Control Block)进程控制块。
进程控制块描述了、管理着进程运行的全部信息,是操作系统中最重要的记录型数据结构,并且使得不能在多个程序环境中不能运行的程序成为一个可以独立运行的基本单位,并与其他程序并发运行
作用:
-
PCB为一个程序运行的标志:当给一个程序配置了PCB之后,就代表它已经是一个可以独立运行的进程了,取得了获取OS服务(操作系统服务)的权力。PCB随进程创建而诞生,进程销毁而毁灭,在进程销毁后会被系统回收。系统是根据PCB感受进程存在的,所以PCB是一个进程存在的唯一标志
-
PCB可以是进程间断性运行:当进程阻塞暂停运行时,PCB可以保存进程运行CPU现场信息,以供下次进程又被调度时使用。
-
PCB提供进程管理所需要的信息:调度程序只能根据PCB中所记录的信息:内存外村中的指针,找到该进程。对进程任何IO操作都需要借助PCB中记录的信息。
-
PCB实现与其他进程通信:进程同步机制是用于实现诸进程的协调运行的,在采用信号量机制时,它要求在每个进程中都设置有相应的用于同步的信号量
-
PCB提供调度所需要的信息:PCB记录了进程处于何种状态以及调度所需的其他信息:例如进程优先级。
PCB中有以下信息
- PID进程标识符:每个进程有唯一标识符,是一个进程序号
- 处理机上下文:进程某个操作可能被执行到一半被中断,当下次需要从上次执行到的地方开始执行,需要上次执行的信息,这便是上下文。
- 进程调度信息:进程调度信息又包含:1.进程状态 ,2.进程优先级,3.进程调度所需的其它信息比如,进程已等待CPU的时间总和、进程已执行的时间总和等等,4.事件,就是记录上次进程由执行态变为阻塞态的原因,就是因为什么进程停止了。
- 进程控制信息:它又包含:1.程序及数据的地址,2.进程同步和通信机制:进程同步和通信机制,这是实现同步和进程通信时必需的机制,如消息队列指针、信号量等,它们可能全部或部分地放在PCB中。3.资源清单,这种清单记录了进程运行时所需的全部资源。4.链接指针:它给出了该进程所在队列下一个进程PCB的首地址。
Linux下的多线程
首先明确一个点,linux内是没有线程这个概念的,而是轻量级进程LWP,一般我们说的线程是C库中的概念。
先放出关系图:
多线程下,一个进程其实是一个线程组,有个线程组id,在这个进程下的所有线程都有一个线程组id,都和这个进程的线程组id相同,但是pid各不相同。
一个进程,有多个轻量级进程LWP,一个轻量级进程有一个PCB,所以一个进程可能对应多个PCB,