文章目录
- 进程的概念
- 程序的概念
- 进程控制块 PCB
- 进程的组成
- 进程状态
- 进程状态转换
- 进程队列
- 进程的组织
- 进程控制
- 内核的两大功能
- 进程创建
- 进程终止
- 进程阻塞与唤醒
- 进程切换
- 进程通信
进程的概念
进程是操作系统中的基本概念,用于描述正在运行的程序实例。
它是计算机系统中一个程序或任务的执行过程,每个进程都是独立的实体,相互之间不受影响。
进程具有以下特征:
-
动态性
-
并发性
-
独立性
-
异步性
-
结构性
程序的概念
程序是静态的,存储在磁盘上的可执行文件,是一系列指令的集合;用于解决特定问题或实现特定功能的计算机软件。
进程和程序之间是多对多的关系,一个进程可以对应多个线程,而一个程序可以对应一个或多个进程。
进程控制块 PCB
进程控制块 PCB(Process Control Block) 是在创建进程时,系统给每个进程分配的管理者,是进程存在的唯一标识。
它包含了操作系统维护进程所需的所有信息,用于跟踪和管理每个进程的状态、上下文、资源分配等关键信息。
PCB 由下列四个部分组成:
1. 进程标识信息:包括进程ID(PID)和父进程ID,用于唯一标识一个进程以及确定其父进程。
2. 进程控制和管理信息: 包括进程的状态(就绪、运行、阻塞等)、调度优先级、时间片、进程的状态改变原因等。
3. 资源分配清单:记录进程所分配的资源,例如:内存、磁盘、处理器等。
4. 处理机状态信息: 记录了进程的寄存器内容,程序计数器(PC)和堆栈指针等,用于保存和恢复进程的执行上下文。
进程的组成
每个独立的进程主要由三个部分组成,分别是:
-
PCB
-
程序段: 指进程执行的程序代码,它包括了程序的指令集合。
-
数据段:指进程所使用的数据,包括程序执行过程中需要处理的数据、变量、常量等。保存了程序运行时所需的各种数据信息。
其中 PCB 是供操作系统使用的,程序段和数据段是供进程使用的。
进程状态
在操作系统中,进程可以处于不同的状态,这些状态描述了进程在其生命周期中的不同情况和条件,主要有 5
中进程状态,分别是:
1. 创建态:进程刚刚被创建,正在进行初始化。
2. 就绪态:除 CPU 外的资源都已经分配完毕,等待系统调用执行。
3. 运行态:进程正在 CPU 上执行指令,处于运行状态。
4. 阻塞态(等待态): 进程因为某些事件而暂时停止执行,等待特定的事件发生,如等待输入输出完成、等待某个信号等。处于阻塞态的进程不会消耗系统的 CPU 资源,但会占用一定的系统内存资源。
5. 结束态:进程执行完毕或被操作系统终止,释放其占用的系统资源。
进程状态转换
在进程的整个生命周期中,主要会处于就绪态、运行态以及阻塞态这三种状态。
基于单 CPU 的情况下,同一时刻只会有一个进程处于运行状态,由此便可以引出进程之间的转换概念。
状态转换:
-
创建态 ——> 就绪态:一个新创建的进程会进入就绪状态等待调度器分配 CPU 时间片。
-
就绪态 ——> 运行态:系统调用分配时间片后,进入运行状态。
-
运行态 ——> 就绪态:系统分配的时间片用完后,重新进入就绪状态等待分配时间片。
-
运行态 ——> 阻塞态:运行状态的进程可能因为等待某个事件而转入阻塞状态。(主动操作)
-
阻塞态 ——> 就绪态:系统给处于阻塞状态的进程分配了所需资源,重新进入就绪态。(被动操作)
-
运行态 ——> 终止态:进行运行完毕或者出现异常,释放资源,结束进程。
进程队列
进程队列是指在操作系统中,相同状态的进程所形成的组织,称为:队列。
进程队列是操作系统实现多道程序设计和进程调度的重要工具,用于存储和组织系统中的各个进程,以便操作系统能够有效地管理它们。
主要的进程队列有以下几种类型:
1. 就绪队列:存放所有已经准备好运行但尚未得到 CPU 执行的进程。根据优先级,操作系统的调度程序会从这个队列中选择一个进程,分配 CPU 时间片,使其进入运行状态。
2. 阻塞队列 :存放因为等待某个事件发生而暂时停止执行的进程。例如:输入输出、资源分配等事件完成。阻塞队列也可以划分为更为详细的队列,例如:等待摄像头阻塞队列,等待磁盘阻塞队列等
3. 完成队列:存放已经执行完成的进程的队列。进程完成后,其 PCB 可能会被移至此队列等待释放资源或其他操作。
队列远远不止提到的这几种,根据划分的形式、定义不同,可以衍生出各种队列。
进程的组织
在一个操作系统中,每一个进程都会拥有一个唯一的 PCB,大量的 PCB 由此便产生了对进程的组织方式。
常用的组织方式有三种:
1. 线性方式:将所有的 PCB 以线性结构的形式组织在一张表中,通常,这张表可以是一个数组或链表,其中存储了所有进程的 PCB 信息。
2. 链接方式
链接方式就是分为各种各样的指针队列,以链表的形式进行索引。
- 执行指针:指向当前处于运行状态的进程。
- 就绪队列指定:指向当前处于就绪态的进程。
- …
3. 索引方式:根据不同的状态,建立索引表,访问速度快。例如:就绪索引表、阻塞索引表。
进程控制
进程控制指的是操作系统对进程的监控、调度、协调和管理,以确保系统中的多个进程能够有效、安全、有序地运行。它涵盖了对进程的创建、调度、状态转换、资源分配、终止等方面的控制和管理。
从创建进程到终止进程,这期间会执行多个原子性操作,确保进程的安全、完整。
内核的两大功能
支撑功能
- 中断处理
- 时钟管理
- 原语操作
资源管理功能
- 进程管理
- 存储器管理
- 设备管理
进程创建
在创建进程阶段,操作系统会进行原语创建,主要包含以下几个操作:
- 申请 PCB;
- 为进程分配所需资源(CPU 除外);
- 初始化 PCB;
- 由创建态 ——> 就绪态。
引起进程创建的事件:
- 作业调度:多道操作系统中,当作业放入内存时,会为其建立一个进程。
- 交互登录:分时系统中,用户登录成功时。
- 服务请求:当操作系统为某个作业提供某项服务时。
- 程序执行:提交一个新的程序进行执行时。
进程终止
进程终止时,会撤销针对这个进程的原语,主要包含以下几个操作:
- 找到 PCB;
- 终止其所属的子进程;
- 释放资源或归还给父进程;
- 删除 PCB;
- 由运行态 ——> 终止态。
引起进程删除的事件:
- 正常结束
- 异常结束
- 外界干预
进程阻塞与唤醒
阻塞
在进程产生阻塞的阶段,主要包含以下几个操作:
- 找到对应 PCB;
- 保护进程运行现场,挂起;
- 进入阻塞队列;
- 由运行态 ——> 阻塞态。
引起进程阻塞的事件:
- 等待系统分配某种资源
- 依赖其它进程的返回结果
- …
唤醒
在进程唤醒的阶段,主要包含以下几个操作:
- 找到在等待队列中的 PCB;
- 进入就绪队列;
- 由阻塞态 ——> 就绪态。
引起进程唤醒的事件:
- 系统为等待队列中的进程分配了所需资源
- 依赖的进程结果已经返回
- …
进程阻塞和唤醒往往都是成对出现的,谁阻塞谁唤醒,举例说明:当前摄像头正在被其它进程占用,导致无法运行,那么等摄像头空闲时,该进程将会被唤醒。
进程切换
进程切换顾名思义就是在进程的几种状态之间进行转换,主要包含以下几个操作:
- 保存处理机上下文;
- 更新当前 PCB 信息;
- 将当前 PCB 切换到对应状态;
- 选择另一个进程执行,更新其 PCB 信息;
- 更新内存管理的数据结构;
- 恢复处理机上下文。
引起进程切换的事件:
- 系统所分配的时间片用完了;
- 阻塞;
- 当前程序运行完毕;
- 优先级更高的进程进入了队列;
- 程序出错。