进程
定义
传统典型
- 进程是程序的一次执行
- 进程是一个程序及其数据在处理机上顺序执行时所发生的活动
- 进程是具有独立功能的程序在数据集合上运行的过程,是系统进行资源分配和调度的一个独立单位
引入进程实体概念
- 进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位
- 严格来说,(动态)进程≠(静态)进程实体,但除非具体考察两者区别,不然可以认为相同。
进程、程序、进程实体
程序 | 进程 | 进程实体/映像 |
---|---|---|
一组有序指令的集合 | 程序的一次执行过程 | 反应进程在某一时刻的状态 |
磁盘里的可执行文件 | ||
静态 | 动态 | 静态 |
同一个程序多次执行会对应多个进程,不同的PCB、PID
组成
程序段
存放要执行的代码(指令序列)
数据段
存放程序运行过程中处理的各种数据
如全局变量、局部变量、宏定义的常量
程序控制块PCB
作用
- 作为独立运行基本单位的标志
- 实现间断性运行方式
- 提供进程管理所需信息
- 提供进程调度所需信息
- 实现与其他进程的同步与通信
组成
进程标识符PID
外部标识符 | 内部标识符 |
---|---|
创建者提供 | 赋予每个进程一个唯一的数字标识 |
字母数字组成 | 一个进程的符号 |
设父子进程标识 | |
设用户标识指示拥有该进程的用户内部标识符 |
用户标识符UID
处理机状态
- 处理机状态信息=处理机的上下文
- 由处理机的各种寄存器中内容组成:通用寄存器、指令计数器、程序状态字PSW、用户栈指针
进程调度信息
进程状态
进程优先级
进程调度所需其他信息
与所采用的进程调度算法有关
e.g.进程已等待CPU的时间总和、进程已执行的时间总和
事件
阻塞原因:执行→阻塞所等待发生的事件
进程控制信息
程序和数据的地址
进程同步和通信机制
资源清单
链接指针
组织方式
- 线性方式
- 链接方式
- 索引方式
特征
动态性
进程的实质是进程实体的执行过程
并发性
独立性
进程是能独立运行、独立获得资源和接受调度的基本单位
异步性
- 各进程按各自独立的、不可预知的速度向前推进
- 操作系统提供进程同步机制来解决异步问题
状态
三种基本状态
就绪态
- 已具备除处理机外所有所需资源
- 无空闲CPU
运行态
阻塞态
- 因等待某事而暂时不能运行
- CPU和其他运行条件都无
- 阻塞队列
其他两种状态及挂起操作
创建态
进程正在被创建,操作系统为进程分配资源,初始化PCB
终止态
- 进程正在从系统中撤销,操作系统回收进程资源,撤销PCB
- 进程结束、出现错误、被系统终止
挂起操作
引入原因
- 终端用户的需要:用户发现可疑问题
- 父进程请求:父挂起子进程,以便考查和修改该进程/协调子进程间活动
- 负荷调节的需要:工作负荷重,挂起不重要进程,保证系统正常运行
- 操作系统的需要:检查运行中资源使用情况/记账
被挂起=让其静止
- 正在执行→暂停执行
- 就绪状态→暂不接受调度
进程管理中的数据结构
进程/资源信息表
进程/资源标识、描述、状态等信息及一批指针
OS管理的数据结构
- 内存表
- 设备表
- 文件表
- 进程表/进程控制块PCB
进程控制
基本概念
进程控制就是实现进程状态转换
主要功能
对系统中所有进程实施有效管理,具有创建新进程、撤销已有进程、实现进程状态转换等功能。
原语实现
- 原语用开/关中断来实现
- 原语是一种特殊的程序,其执行具有原子性
- 原语的执行必须一气呵成不可中断,不然可能导致操作系统中某些关键数据结构信息不统一,会影响操作系统进行别的管理工作。
相关原语
进程的创建
创建原语
- 申请空白PCB
- 为新进程分配所需资源
- 初始化PCB
- 将PCB插入就绪队列
引起进程创建的事件
- 用户登录:分时系统中,用户登陆成功,系统会为其建立一个新进程。
- 作业调度:多道批处理系统中,有新的作业放入内存时,会为其建立一个新进程。
- 提供服务:用户向操作系统提出某些请求时,会新建一个进程处理该请求。
- 应用请求:由用户进程主动请求创建一个子进程
进程的终止
撤消原语
- 从PCB集合中找到终止进程的PCB
- 若进程正在运行,立即剥夺CPU,将CPU分配给其他进程
- 终止其所有子进程(进程间的关系是树形结构)
- 将该进程所拥有的所有资源归还给父进程或操作系统
- 删除PCB
引起进程终止的事件
- 正常结束 e.g. 进程自己请求终止
- 异常结束 e.g. 非法使用特权指令、整数除以0,然后被操作系统强行杀掉
- 外界干预 e.g. 用户选择杀掉进程
进程的阻塞
阻塞原语
找到要阻塞的进程对应的PCB
保护进程运行现场,将PCB状态信息设置为阻塞态,暂停进程运行
将PCB插入相应事件的等待队列
引起进程阻塞的事件
需要等待系统分配某种资源
需要等待相互合作的其他进程完成工作
进程的唤醒
唤醒原语
在事件等待队列中找到PCB
将PCB从等待队列移除,设置进程为就绪态
将PCB插入就绪队列,等待被调度
引起进程唤醒的事件
等待的事件发生(因何事阻塞就由何事唤醒)
进程的切换
切换原语
将运行环境信息存入PCB
PCB移入相应队列
选择另一个进程执行,并更新其PCB
根据PCB恢复新进程所需的运行环境
引起进程切换的事件
当前进程时间
有更高优先级的进程到达
当前进程主动阻塞
当前进程终止
进程通信
概念
进程之间的信息交换
进程是分配系统资源的单位,因此各进程拥有的内存地址空间相互独立。为保证安全,一个进程不能直接访问另一个进程的地址空间。
通信方式
共享存储
-
设置一个共享空间
-
互斥地访问共享空间
-
两种方式
基于数据结构(低级)
基于存储区的共享(高级)
管道通信
-
设置一个特殊的共享文件(管道),即一个缓冲区
-
一个管道只能实现半双工通信
-
实现双向同时通信要建立两个管道
-
各进程互斥访问管道
-
写满不能再写,读空不能再读
没写满不能读,没读空不能写
消息传递
-
传递结构化的消息(消息头/消息体)
-
系统提供发送/接受原语
-
两种方式
直接通信方式:消息直接挂到接收方的消息队列里
间接(信箱)通信方式:消息先发到中间体(信箱)
线程
前驱图
-
用于描述进程间执行的先后顺序
-
有向无循环图
-
结点→进程/程序段/语句
-
初始结点:没有前驱
-
终止结点:没有后继
-
结点的重量:该结点含有的程序量/程序执行时间
-
结点间的有向边→节点间的偏序/前趋关系
程序执行
程序顺序执行
特征
顺序性
处理机严格按照程序规定的顺序执行
封闭性
- 程序运行时独占全机资源,只有本程序才能改变资源状态(初始态除外)
- 程序一旦开始执行,其结果不受外界因素影响
可再现性
- 程序执行时环境和初始条件同,结果同
- 利于检测和校正程序
程序并发执行
不存在前趋关系
特征
间断性
- 相互制约
- 执行-暂停-执行
失去封闭性
资源共享,资源状态也由这些程序改变,其环境必然受其他程序影响
不可再现性
因为失去封闭性