进程
字数
2479 字
阅读时间
10 分钟
一、进程的概念
- 程序:是静态的,是存放在硬盘中的可执行文件,是一系列指令集合
- 进程:是动态的,是程序的一次执行过程
- 同一个程序执行多次会产生多个不同的进程
- 进程 = 进程控制块
PCB
+程序段+数据段
二、进程的组成 --- PCB
为了区分同一程序多次执行产生的多个不同进程,提出了`PCB`这一概念
当进程被创建时,操作系统会为该进程分配一个唯一的、不重复的“身份证号” --- PID( process ID,进程ID)
操作系统需要记录如下数据:
而这些操作系统所记录的数据都被保存在一个数据结构PCB(Process Control Block)中,即:进程控制块
🌟总而言之,操作系统需要对各个并发运行的进程进行管理,但凡管理进程时所需要的信息,都会被放到PCB中[1]
PCB是进程存在的唯一标志,当进程被创建时,操作系统为其创建PCB,当进程结束时,操作系统会回收其PCB
进程控制块PCB存储如下信息:
三、进程的组织方式
1. 链接方式
- 按照进程的状态将PCB分为多个队列,操作系统持有指向各个队列的指针
- 队列分类:
- 就绪队列
- 运行队列
- 阻塞队列
- 队列分类:
2. 索引方式
- 根据进程的状态不同,建立几张索引表,操作系统持有指向各个索引表的指针
- 同样也有就绪索引表、运行索引表和阻塞索引表,每个索引表中存有相应状态的各个进程的进程的索引指针
四、进程的特征
注意区分进程和程序
1. 动态性
- 进程最基本的特征,进程是程序的一次执行过程,是动态的产生、变化与消亡
2. 并发性
- 内存中存在多个进程实体,各个进程可以并发执行
3. 独立性
- 进程是能够
独立
运行、独立
获取资源、独立
接受调度的基本单位
4. 异步性
- 多个进程并发执行,各自按照独立的不可预知的速度进行
5. 结构性
- 每个进程都有一个对应的
PCB
,结构上来看,每个进程都含有PCB、程序段和数据段
五、进程的状态和转换
1. 进程的状态
定义
- 一个进程的生命周期可以划分为一组状态,这些状态刻画了整个进程,进程状态体现了一个进程的生命状态。一般来说,进程有五个状态:创建状态、就绪状态、运行状态、阻塞状态、终止状态。
- 创建态:进程在创建时需要申请一个空白的PCB,用于记录控制和进程管理的信息,并完成资源分配。如果创建工作无法完成,例如:资源无法满足,就无法被调度运行,那么就说此时的进程处于创建态
- ⭐运行态:进程占用CPU,并在CPU上运行
- 注意:同一时刻,单核CPU上只能有
1个
进程在CPU上运行,而双核CPU上可以有2个
进程在CPU上运行
- 注意:同一时刻,单核CPU上只能有
- ⭐就绪态:进程已经具备运行的条件,但CPU无法分配给它(无空闲资源)
- 即:进程已经获取到了除CPU以外的所有资源
- ⭐阻塞态/等待态:进程因等待某件事(如:I/O设备的输入输出操作等)发生而暂时无法运行
- 运行态
阻塞态 - 等待事件完成后,进程又由阻塞态
就绪态
- 运行态
- 终止态/撤销态:进程结束或出现错误,或被系统终止,进入终止状态,无法执行。终止态过程中,系统将会收回分配的资源
2. 状态的转换
图例说明:
解释说明:
- 如果进程得到系统许可后,完成PCB的创建,就从创建态转换为就绪态
- 进程被调度/处于运行态的CPU的时间片用完了,就调用就绪队列的进程:就绪态
执行态/运行态 - 时间片用完、更高级的进程抢占了CPU(抢占式CPU调度算法):执行态/运行态
就绪态 - 处于运行态的进程向系统请求资源调度:运行态/执行态
阻塞态 - I/O请求、资源分配完成:阻塞态
就绪态 - 程序运行完成、出现错误、被系统终止:运行态
终止态
六、进程通信
- 进程通信是指:进程之间的信息交换
PV
操作是最低级的通信,高级通信方式是指以较高的效率传输大量数据的通信方式。
- 高级通信分类:
- 共享存储:在各自拥有独立的数据存储区后,建立一个存储共享信息的共享存储区,如果要访问其他进程的信息,就到共享存储区中去查看,值得注意的是:对共享存储区域的访问是互斥的,同一时刻不能有两个进程访问共享存储区
- 基于共享数据结构的通信方式
共享区中的数据结构格式是固定的,属于低级的通信共享方式 - 基于共享存储区的通信方式
不固定共享区数据的结构及存储位置
- 基于共享数据结构的通信方式
- 消息传递:以格式化的消息为单位,利用原语传递消息,分为直接通信和间接通信
- 原语:发送原语、接收原语
- 格式化消息:分为消息头(发送消息的ID等)和消息体(发送消息的内容和数据)
- 直接通信:将消息放在消息发送缓冲队列的队尾,而进程通过接收发送原语来从头到尾发送队列中的消息
- 间接通信:先将消息发送到一个中间实体(信箱)中,当进程需要消息传递时,只需要从信箱中取即可,为防止消息传递出错,在消息头中存储该信息的来源进程ID、目的进程ID等信息
- 管道通信:是一种特殊的消息传递方式
- 用于连接一个读进程和一个写进程以实现它们之间的一个共享文件,称为Pipe文件
- 一个管道只能实现半双工通信 ---- 同一时间段内只能允许单方向的通信
- 管道通信中,各进程对于共享文件的访问也是互斥的,如:A进程在共享文件中进行读操作时,B进程不能进行写操作
- 共享存储:在各自拥有独立的数据存储区后,建立一个存储共享信息的共享存储区,如果要访问其他进程的信息,就到共享存储区中去查看,值得注意的是:对共享存储区域的访问是互斥的,同一时刻不能有两个进程访问共享存储区
七、线程
- 线程是进程中执行运算的最小单位,是进程的一个实体,是被系统独立调度和分派的基本单位,以小的开销来提高进程内的并发程度。
- 线程不拥有系统资源,但它可以与同属一个进程的其他线程共享进程拥有的所有资源
- 一个线程可以创建和撤销另一个线程,同一进程中的不同线程是可以并发执行的
线程与进程的区别
- 基本单位:在引入线程后,线程就成为调度和分派的基本单位,进程是拥有资源(资源分配)的基本单位
- 并发性:不仅进程之间可以并发执行,同一进程的不同线程也可以并发执行
- 资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以调用其隶属的进程的所有系统资源
- 系统开销:在创建或撤销进程时,系统都需要分配或收回资源,系统开销明显大于创建或撤销线程的开销
线程与进程的联系
- 一个线程只能属于一个进程,但一个进程可以拥有多个线程
- 系统资源分配给进程,同一进程上的所有线程共享该进程的所有资源
- 处理机分配给线程,即:真正在处理机上运行的是线程
- 线程同样具有异步性,为了执行的准确性,也需要协作同步,不同进程之间的线程需要利用消息通信实现同步
- 线程是进程的可调度实体,也是进程内的一个执行单元
贡献者
freeway348
文件历史
重点记忆,PCB的存储地位 ↩︎