操作系统-进程
进程
概念
- 在多道程序的环境下,允许多个程序并发执行,此时他们将失去封闭性,并具有间断性及不可再现性的特征;为了更好地描述和控制程序的并发执行,实现并发性和共享性,引入进程
- 为了使参与并发执行的程序能独立的运行,为进程配备了进程控制块–PCB(Process Control Block);利用PCB描述进程基本情况和运行状态进而控制和管理进程;PCB是进程存在的唯一标志
- 程序段,相关数据段和PCB构成进程映像(进程实体)
- 所以创建进程实际上就是创建进程映像中的PCB;撤销进程就是撤销进程的PCB
- 进程的定义
- 程序的一次执行过程
- 一个程序及其数据在处理机上顺序执行时发生的活动
- 进程是具有独立功能的程序在一个数据集合上运行的过程;是系统进行资源分配和调度的独立单位
特征
- 动态性: 进程是动态产生和消亡的,有着创建,活动,暂定,终止等过程,具有一定生命周期
- 并发性: 多个进程实体同时存在于内存中,能在一段时间内同时运行; 引入进程的目的就是使程序能够与其他程序并发执行,提高资源利用率
- 独立性: 进程实体是一个能独立运行,独立获得资源和接收调度的基本单位
- 异步性: 进程按各自独立的,不可预知的速度向前推进; 异步会导致执行结果的不可再现性,所以必须配置相应的进程同步机制
- 结构性: 每个进程都配置一个PCB对其进行描述
状态与转换
- 创建态: 进程正在被创建,尚未转到就绪态,创建过程: 申请一个空白PCB,向PCB写入一些控制和管理进程的信息,然后由系统为该进程分配运行时资源,最后转为就绪态
- 就绪态: 进程获得了除处理器的一切资源,一旦得到处理器,就开始运行; 系统中处于就绪态的进程可能有多个,组成就绪队列
- 运行态: 进程正在处理器上运行
- 阻塞态: 又称等待态。进程正在等待某一资源而暂停运行,比如等待IO处理; 即使处理器空闲也不能运行
- 结束态: 进程正在从系统中消失,可能是正常结束或其他原因中断退出; 进程需要结束时,首先置该进程为结束态,然后再进一步处理资源回收与回收等工作
- 就绪态->运行态: 就绪态的进程被调度后获得处理器资源(分派处理器时间片),进程转为运行态
- 运行态->就绪态: 运行态的进程的时间片用完,不得不让出处理器,进程转为就绪态
- 运行态->阻塞态: 进程请求的某一资源的使用和分配发生时,进程转为阻塞态; 进程以系统调用的形式请求操作系统提供服务,这是一种特殊的,由运行用户态程序调用操作系统内核过程的形式
- 阻塞态->就绪态: 进程等待的事件或者资源到来时,中断处理程序把相应阻塞态进程转为就绪态
进程创建
- 允许一个进程创建一个另一个进程,成为父子进程,子进程可以继承父进程拥有资源,子进程撤销时,从父进程获得的资源归还给父进程,父进程撤销时,也撤销其所有的子进程
- 创建新进程:
- 为新进程分配唯一的进程标识号,并申请一个空白PCB(PCB有限),若PCB申请失败,则创建失败
- 为进程分配资源,为进程的程序和数据分配必要的内存空间(在PCB中体现),若内存空间不足,处于阻塞态,等待内存资源
- 初始化PCB,包括初始化标志信息,处理器状态信息,控制信息以及进程优先级
- 若就绪队列未满,则插入就绪队列,等待被调度执行
进程切换
- 进程切换指处理器从一个进程的运行转到另一个进程上运行:
- 保存处理器上下文,包括程序计数器和其他寄存器
- 更新PCB消息
- 把进程的PCB移入相应队列,如就绪,阻塞等队列
- 选择另一个进程运行,并更新其PCB
- 更新内存管理的数据结构
- 恢复处理器上下文
进程阻塞与唤醒
- 阻塞原语:
- 找到要被阻塞进程的标识号对应的PCB
- 若为运行态,保护现场,转为就绪态,停止运行
- 将该PCB插入响应事件的等待队列,将处理器资源调度给其他就绪进程
- 唤醒原语:
- 在该事件的等待队列找到相应进程的PCB
- 将其从等待队列移出,置为就绪态
- 将该PCB插入就绪队列,等待调度
进程终止
- 正常结束: 进程的任务已完成,准备退出运行
- 异常结束: 运行时,发生了异常事件使得无法继续运行,如存储区越界,非法指令,运行超时,算术运算错等
- 外界干预: 应外界的请求而终止运行,如操作员或操作系统干预,父进程请求或父进程终止
- 终止过程(撤销原语):
- 根据被终止状态的标识符,检索PCB,读出该进程状态
- 若被终止状态处于执行状态,则立即终止,将处理器资源分配给其他进程
- 若有子孙进程,则将其所有子孙进程终止
- 将该进程的资源或归还给其父进程或操作系统
- 将该PCB从所在队列删除
进程控制块PCB
- 进程创建时,操作系统会为其创建一个PCB,该结构常驻内存,任意时刻都可存取,进程结束时删除;PCB是进程存在唯一标志,是进程实体的一部分
- 进程描述信息:
- 进程标识符 – 标识各个进程
- 用户标识符 – 进程归属的用户,为共享和保护服务
- 进程控制和管理信息:
- 进程当前状态 – 描述进程状态信息,作为处理器调度依据
- 进程优先级 – 优先级高的可以优先获得处理器
- 资源分配清单: 用于说明有关内存地址空间和虚拟地址空间的状况,所打开文件列表和所使用的的输入输出设备信息
- 处理器相关信息: 处理器中各寄存器的值,进程被切换时,处理器状态信息被保存在相应的PCB中,以便该进程重新执行时能从断点执行
- 进程描述信息:
- 为了方便和管理,组织PCB有两种方式
- 链接方式: 将统一状态的PCB链接成一个队列,不同状态不同队列,阻塞态的进程可根据阻塞原因分为多个队列
- 索引方式: 将同一状态的进程组织为一个索引表,表项指向相应PCB,不同状态对应不同索引表
进程通信
-
共享存储
- 通信的进程之间存在一块可直接访问的共享空间,通过对这片共享空间进行读写完成进程之间信息交换
- 低级的共享是基于数据结构的共享; 高级共享是基于存储区的共享
- 操作系统只负责为通信进程提供可共享使用的存储空间和同步互斥工具,数据交互由用户自己安排
-
消息传递
- 直接通信: 发送进程把消息发送给接收进程,并将它挂在接收进程的消息缓冲队列上,接收进程从缓冲队列取消息
- 间接通信: 发送进程把消息发送到中间实体,接收进程从实体取得消息,中间实体一般称为信箱,又称信箱通信方式,比如电子邮件系统
-
管道通信
- 管道: 用于连接一个读写进程以实现进程通信的一个共享文件,又名pipe文件;以字符流形式写入
- 有固定的读出和写入端,不能更改;
- 只能用于父子进程或者兄弟进程之间通信
- 管道是固定大小的缓冲区,Linux中是4KB大小
- 管道读取是一次性动作,数据一旦被读取就要从管道内丢弃,以释放空间写入更多数据