前言
操作系统的知识抽象、晦涩、不易理解并记忆,在此对“进程与线程”一章中重点知识总结成提纲。
进程与线程
进程的特征
- 动态性(基本特征)
- 并发性
- 独立性
- 异步性
- 结构性
进程/进程实体/进程映像的组成
- 进程控制块(PCB)(核心)
- 程序段
- 数据段
或:
- 数据栈段,存放临时变量
- 数据堆段,存放动态分配存储区
- 正文段,存放常量、赋值变量和二进制代码
进程控制块(PCB)的内容
进程描述信息:
- 进程标识符(PID)
- 用户标识符(UID)
进程控制和管理信息:
- 进程当前状态
- 进程优先级
- 代码运行的入口地址
- 程序的外存储器地址
- 进入内/主存储器(MM)的时间
- 处理机的占用时间
- 信号量的使用情况
资源分配清单:
- 堆栈段指针
- 数据段指针
- 代码段指针
- 所打开文件的描述符列表
- 所使用输入/输出(I/O)设备的信息
处理机相关信息/上下文:
- 控制寄存器值
- 地址寄存器值
- 通用寄存器(GR)值
- 标志寄存器值
- 状态字寄存器值
进程/进程控制块(PCB)的组织方式
- 链接方式(队列)
- 索引方式(表)
进程的状态
- 创建态
- 就绪态
- 运行态
- 阻塞态
- 结束态
挂起态:在进程调度中定义的特殊状态
进程/原语创建的过程
- 分配一个唯一的进程标识号(PID),申请空白的进程控制块(PCB)
- 分配运行所需资源
- 初始化进程控制块(PCB),填入用于控制和管理进程的信息
- 置为就绪态,插入就绪队列
引发进程结束的事件
- 正常结束
- 异常结束
- 外界干预
进程/原语结束的过程
- 根据进程标识符(PID)检索进程控制块(PCB),读取状态信息
- 若处于运行态,结束运行,释放处理机资源
- 若有子孙进程,结束子孙进程
- 释放所有资源,归还给父进程或操作系统(OS)
- 从所在队列/表中删除进程控制块(PCB)
进程/原语阻塞的过程
- 根据进程标识符(PID)检索进程控制块(PCB),读取状态信息
- 若处于运行态,保护现场,暂停运行,释放处理机资源
- 置为阻塞态,插入阻塞队列
进程/原语唤醒的过程
- 根据进程标识符(PID)检索进程控制块(PCB),读取状态信息
- 置为就绪态,插入就绪队列
进程不能调度/切换的情况
- 原子操作
- 访问临界区
- 中断处理过程
进程的通信方式
低级:
- PV操作
高级:
- 共享内存(低级:共享数据结构,高级:共享存储区)
- 消息队列(直接通信,间接通信)(应用最广泛)
- 管道(共享内存的发展,消息队列的特殊方式)
- 命名管道(先进先出FIFO)
- 信号
- 信号量
- 套接字(Socket)
线程控制块(TCB)的组成
- 线程标识符
- 寄存器:程序计数器(PC)、状态寄存器、通用寄存器(GR)
- 线程状态
- 线程优先级
- 线程专有存储区
- 堆栈指针
线程的实现方式
- 内核级线程/内核支持的线程(KLT)
- 用户级线程(ULT)
- 组合方式
线程库的实现方式
- 在用户空间提供一个没有内核支持的库
- 提供一个由操作系统支持的内核级的库
多线程模型的类型/内核级线程和用户级线程的对应关系
- 一对一
- 一对多
- 多对多(内核级线程数<=用户级线程数)
处理机调度
调度的层次
- 高级调度/作业调度
- 中级调度/内存调度
- 低级调度/进程调度
调度算法性能的评价指标
- 响应时间
- 等待时间
- 周转时间(平均周转时间、带权周转时间、平均带权周转时间)
- 中央处理器(CPU)利用率
- 系统吞吐量
调度程序/调度器的组成
- 排队器
- 分派器
- 上下文切换器
进程不能调度/切换的情况
- 原子操作
- 访问临界区
- 中断处理过程
进程可以调度/切换的情况
- 调度条件产生,当前进程无法继续运行
- 自陷或中断处理结束后,返回原进程的用户态程序执行现场前,调度条件产生
进程的调度方式
- 可抢占/剥夺调度方式
- 不可抢占/剥夺调度方式
线程的调度类型
- 内核级线程调度
- 用户级线程调度
典型的调度算法
- 先来先服务(FCFS)调度算法
- 短作业/进程/线程优先(SJF)调度算法
- 优先级调度算法(适用于实时系统)
算法类型:可抢占/剥夺式,不可抢占/剥夺式
优先级类型:静态,动态
优先级原则:系统进程>用户进程,交互型进程>非交互型进程,输入/输出(I/O)型进程>计算型进程
- 高响应比优先调度算法(适用于作业调度、分时系统)
响应比=(等待时间+要求服务时间)/要求服务时间
- 时间片轮转调度算法(适用于分时系统)
- 多级队列调度算法(适用于分时系统)
- 多级反馈队列调度算法(适用于分时系统)
进程切换的过程
注意:进程/(处理器/中央处理器(CPU))上下文切换只能发生在内核态
- 挂起一个进程,保存(处理器/中央处理器(CPU))上下文:程序计数器(PC)和寄存器内容
- 更新进程控制块(PCB)内容
- 将进程控制块(PCB)插入相应队列:就绪、阻塞等队列
- 选择另一个进程执行,更新其进程控制块(PCB)内容
- 跳转到新进程进程控制块(PCB)中程序计数器(PC)内容指向的位置执行
- 新进程执行完毕,恢复旧进程的(处理器/中央处理器(CPU))上下文
同步与互斥
临界资源的访问过程
- 进入区
- 临界区/段
- 退出区
- 剩余区
同步访问临界资源遵循的准则
- 空闲让进
- 忙则等待
- 有限等待
- 让权等待
互斥访问临界资源的方法
硬件实现方法/低级方法/元方法:
- 中断屏蔽法
- 硬件指令法
软件实现方法:
- 单标志法
- 先检查双标志法
- 后检查双标志法
- Peterson’s算法
信号量的类型
- 整型信号量
- 记录型信号量
或:
- 资源量
- 互斥量
管程的组成
- 名称
- 局部共享数据结构——数据/资源描述
- 设置局部共享数据结构初始值的语句
- 条件变量
- 操作共享数据结构的过程/函数——操作描述
经典同步互斥问题
- 生产者-消费者问题
- 读者-写者问题
- 哲学家进餐问题
- 吸烟者问题
死锁
死锁产生的原因
- 系统资源的竞争——资源竞争
- 进程的推进顺序非法——资源等待
死锁产生的必要条件
- 互斥条件
- 不可剥夺条件
- 请求保持条件
- 循环等待条件
注意:只要任意一个条件不成立,就不会产生死锁
死锁的处理策略
- 死锁预防
- 死锁避免
- 死锁检测和解除
死锁预防的方法
- 破坏互斥条件——不容易破坏
- 破坏不可剥夺条件——可剥夺资源法
- 破坏请求保持条件——预先静态分配法
- 破坏循环等待条件——顺序资源分配法
死锁避免的方法
核心:系统处于安全状态
注意:若系统处于安全状态,则可避免死锁;若系统处于不安全状态,则可能产生死锁
- 银行家算法(包括安全性算法)
死锁检测和解除的方法
死锁检测:
- 简化资源分配图/判断死锁定理
死锁解除:
- 资源剥夺法(被动释放资源)
- 进程回退法(主动释放资源)
- 撤销进程法(可依据进程优先级、撤销进程的代价)
总结
操作系统的知识抽象、晦涩、不易理解并记忆,在此对“进程与线程”一章中重点知识总结成提纲。
参考资料
- 《2023年操作系统考研复习指导》组编:王道论坛
作者的话
- 感谢参考资料的作者/博主
- 作者:夜悊
- 版权所有,转载请注明出处,谢谢~
- 如果文章对你有帮助,请点个赞或加个粉丝吧,你的支持就是作者的动力~
- 文章在描述时有疑惑的地方,请留言,定会一一耐心讨论、解答
- 文章在认识上有错误的地方, 敬请批评指正
- 望读者们都能有所收获