练得身形似鹤形
千株松下两函经
概念
进程
- 进程是一个进程实体的运行过程,是系统进行资源分配和调度的一个独立单位
- 进程映像
- 程序段
- 数据段
- PCB(进程控制块)
- 进程描述信息(进程标志符、用户标志符)
- 进程控制和管理信息(进程当前状态、进程优先级)
- 资源分配清单
- 处理机相关信息(处理机中各寄存器值)
PS:所谓创建进程,实质上是创建进程实体中的PCB;撤销进程,实质上是撤销PCB
- 进程特征
- 动态性
- 并发性
- 独立性
- 异步性
- 结构性
- 进程状态
- 创建状态
申请PCB并为其分配资源 - 就绪状态
获得初CPU之外所需一切资源 - 运行状态
单处理机下,每一时刻最多一个进程处于运行状态 - 阻塞状态
等待某资源可用(除CPU)或等待I/O - 结束状态
- 创建状态
- 进程通信
- 共享存储
- 基于数据结构
- 基于存储区
- 消息传递
- 直接通信方式
- 间接通信方式(中间实体)
- 管道通信(特殊pipe文件连接进程)
- 共享存储
线程
- 线程是轻量级进程,是一个基本CPU执行单元,也是程序执行的最小单元
- 线程结构
- 线程ID
- 程序计数器
- 寄存器集合
- 堆栈
PS:线程自己不拥有系统资源,引入线程后,进程只作为除CPU之外的资源的分配单元,线程则是CPU分配单元
- 线程实现方式
- 用户级线程
- 内核级线程
- 多线程模型
- 一对一
- 多对一
- 多对多
处理机调度
- 调度层次
- 作业调度
内存与辅存之间的调度,将外存上准备就绪的作业调入内存,为其建立进程,获得竞争CPU的机会 - 中级调度
为了提高内存利用率和系统吞吐量,将暂时不能运行的进程调出内存至外存,一旦具备运行条件了,再调入内存 - 进程调度
就绪队列中选取一个进程,分配其处理机
- 作业调度
- 进程调度方式
- 非抢占式调度
- 抢占式调度
- 调度基本准则
- CPU利用率
- 系统吞吐量
- 周转时间(作业从提交到完成所需时间)
- 等待时间(等待处理机时间之和)
- 响应时间(提交请求到首次响应时间)
- 调度算法
- 先来先服务(FCFS)
对长作业有利,短作业不利;CPU繁忙型作业有利,I/O繁忙型不利 - 短作业优先(SJF)
对长作业不利,会造成饥饿;SJF平均等待时间、平均周转时间最少 - 高响应比优先
响应比 =(等待时间+要求服务时间)/要求服务时间 - 优先级队列
- 非剥夺式优先级
- 剥夺式优先级
- 静态优先级
- 动态优先级
- 时间片轮转
- 多级反馈队列
- 先来先服务(FCFS)
进程同步
- 临界资源(一次仅允许一个进程使用的资源)
- 临界区(进程中访问临界资源的代码)
- 对临界资源访问过程
- 进入区(检查是否可以访问临界资源,并设置标志)
- 临界区
- 退出区(清除访问标志)
- 剩余区
- 同步机制(直接制约关系)
- 空闲让进
- 忙则等待
- 有限等待
- 让权等待
- 互斥
- 临界区互斥的实现方法
- 软件实现方法
- 单标志法(违背空闲让进——一个进程不进入临界区了,另一个也无法进入)
- 双标志先检查法(违背忙则等待)
- 双标志后检查法(饥饿)
- Peterson算法
- 硬件实现方法
- 中断屏蔽方法
- 硬件指令方法
- TestAndSet指令
- Swap指令
- 软件实现方法
- 信号量
- 整形信号量
- 记录型信号量
-
管程
一组数据以及定义在这组数据上的对这组数据的操作组成的软件模块,这组操作能初始化并改变管程中的数据和同步进程组成:
- 局部于管程的共享结构数据说明
- 对该数据结构进行操作的一组过程
- 对局部于管程的共享数据设置初始值的语句
特征:
- 局部于管程的数据只能被局部于管程内的过程所访问
- 一个进程只有通过调用管程内的过程才能进入管程访问共享数据
- 每次仅允许一个进程在管程内执行某个内部过程
死锁
- 死锁产生的必要条件
- 互斥
- 非抢占
- 循环等待
- 请求和保持
- 死锁的处理
- 预防死锁
- 破坏互斥
- 破坏非抢占
- 破坏循环等待
- 破坏请求和保持
- 避免死锁
- 安全状态
- 银行家算法
- 死锁的检测和解除
- 资源分配图(检测)
- 死锁定理(检测)
- 资源剥夺
- 撤销进程
- 进程会退
- 预防死锁
注意
- 进程实体是静态的,进程是动态的
- 引入进程的目的即是为了使程序能够和其他程序并发执行,提高资源利用率
- PCB是进程存在的唯一标志
- 引入线程是为了减小程序并发执行时的开销,提高系统并发性能