一、进程引入
- 必须顺序执行的程序段:
可并行的程序段: - 程序并发执行的特征
- 间断性:存在等待
- 失去封闭性、运行结果不可再现,出现与时间有关的错误
- 静态程序不能支持并发运行的实现
程序本身只是一组静态代码,不能保存运行现场信息。 - 进程管理功能-4
二、进程概念
进程定义及特征
- 进程的定义及特征
- 动态性:最基本的特征
- 并发性
- 独立性:进程是一个能独立运行的基本单位
- 异步性
- 进程映像(实体组成)
进程映像 = 程序段+数据集+PCB+栈(内核栈、用户栈) - 进程与程序的区别和联系
- 静态/动态
- 顺序/并发、异步
- 程序和进程并非一一对应
进程状态及转换
进程5种状态
- 五种基本状态
- 创建状态
- 就绪状态:只差CPU
- 运行状态
- 阻塞状态
- 终止状态:等待父进程收集统计信息,结束后永久消失
- Linux的进程描述符task_struct
- state字段
- exit字段
进程控制块PCB
- 系统根据PCB来感知进程的存在,PCB是进程存在的唯一标志。
- 基本信息
(1) 标识信息
- 进程标识符:PID、外部标识符
- 用户标识符
- 家族关系
(2)调度信息
- 进程状态
- 优先级
- 事件:进程阻塞时需等待的事件
(3)现场信息--记录断点处的状态
(4)进程控制信息
三、进程控制
通常由操作系统内核的一组原语实现。
进程创建
- 进程图
- 子进程可继承父进程的全部或部分资源,被撤销时归还给父进程
- 撤销父进程时也应同时撤销其所有子进程
- 引起进程创建的典型事件
- 进程创建原语
- 分配空白PCB
- 分配资源
- 初始化PCB
- 设为就绪状态,插入就绪队列,等待CPU调度
进程撤销
- 引起进程撤销的典型事件
- 正常结束
- 异常终止
- 外界干预
- 进程撤销原语
- 根据PID找到PCB,使其处于终止状态
- 撤销其子进程或指定新的父进程
- 回收其拥有的系统资源给系统或者父进程
- 从其所在队列移出,父进程或系统 收集信息后被释放
进程阻塞和唤醒
- 引起进程阻塞和唤醒的典型事件
- 等待/解除等待
- 进程阻塞原语
- 停止进程执行,保存现场信息到PCB,进程状态运行->阻塞
- 插入阻塞队列
- 重新调度,分配到就绪队列
- 进程唤醒原语
- 移出阻塞队列
- 改PCB状态信息
- 移入就绪队列
Linux进程管理
TODO:内核代码理解,函数使用
- 进程描述符task_struct结构体
- 进程创建
- 进程终止
进程终止不等于释放task_struct结构和内核栈 - 进程睡眠/阻塞
- 进程唤醒
四、进程同步
让多个进程在并发的基础上正确地运行。