进程是操作系统中的基本概念,用于描述正在运行的程序实例。
它是计算机系统中一个程序或任务的执行过程,每个进程都是独立的实体,相互之间不受影响。
进程具有以下特征:
动态性
并发性
独立性
异步性
结构性
程序是静态的,存储在磁盘上的可执行文件,是一系列指令的集合;用于解决特定问题或实现特定功能的计算机软件。
进程控制块 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. 索引方式:根据不同的状态,建立索引表,访问速度快。例如:就绪索引表、阻塞索引表。
进程控制指的是操作系统对进程的监控、调度、协调和管理,以确保系统中的多个进程能够有效、安全、有序地运行。它涵盖了对进程的创建、调度、状态转换、资源分配、终止等方面的控制和管理。
从创建进程到终止进程,这期间会执行多个原子性操作,确保进程的安全、完整。
支撑功能
资源管理功能
在创建进程阶段,操作系统会进行原语创建,主要包含以下几个操作:
引起进程创建的事件:
进程终止时,会撤销针对这个进程的原语,主要包含以下几个操作:
引起进程删除的事件:
阻塞
在进程产生阻塞的阶段,主要包含以下几个操作:
引起进程阻塞的事件:
唤醒
在进程唤醒的阶段,主要包含以下几个操作:
引起进程唤醒的事件:
进程阻塞和唤醒往往都是成对出现的,谁阻塞谁唤醒,举例说明:当前摄像头正在被其它进程占用,导致无法运行,那么等摄像头空闲时,该进程将会被唤醒。
进程切换顾名思义就是在进程的几种状态之间进行转换,主要包含以下几个操作:
引起进程切换的事件:
进程通信指的是不同进程之间进行信息交换和数据共享的机制和技术。
进程通信允许进程之间传递数据、进行同步操作和协调工作,从而实现更复杂的任务和功能。在多道程序设计和分布式系统中,进程通信是非常重要的。
共享存储指的是多个进程可以共同访问和使用的内存区域或存储空间。
操作系统会划分出一片共享的存储空间,进程之间将共享的资源放入这个空间中。但是进程对这个空间的访问是互斥的,从而保障共享空间中资源数据的安全性、一致性、完整性。
共享存储分为两种:
基于数据结构
例如存放一个数组,但这种方式访问速度很慢,效率很低。
基于存储区共享
由操作系统划分出一片区域,由进程自身进行管理,速度快。
进程通过操作系统提供的消息传递机制发送和接收消息,可以是直接通信或间接通信的方式实现。
直接通信
在进程 A 中定义消息内容(发送原语),指定发往进程 B。
在进程 B 中定义消息接收(接收原语),指定接收进程 A 发送的内容。
点对点的通信。
间接通信
间接通信不再是点对点的通信,而是采用类似信箱的模式来进行消息传递。
在进程 A 中定义消息内容,发送到信箱 A;
进程 B 从信箱 A 中读取消息内容。
间接通信支持多个进程往同一个信箱中写入内容,也支持多个进程读取同一个信箱中的内容。
一种单向通信机制,通常用于具有亲缘关系的进程间通信。管道有输入端和输出端,进程通过写入管道的一端将数据发送给另一个进程,另一个进程则从另一端读取数据。
操作系统划分给管道的缓冲区是有限的,当管道写满时,写进程将进入阻塞状态,等待数据被读取;当管道为空时,读进程将进入阻塞状态。
管道中的数据读出即焚,无法进行保存。
一个管道中支持多个写进程,一个读进程;也允许多个写进程,多个读进程,但是读取过程中会按队列顺序进行读取。