操作系统合集
-
进程与线程
-
组成
-
PCB(进程存在唯一标识)
-
内容
-
进程描述信息
进程标识符和用户标识符
-
进程控制和管理信息
进程状态和进程优先级
-
资源分配清单
地址空间
-
处理机相关信息
各寄存器的值
-
-
组织方式
-
链接方式
-
将不同状态的PDB链接成不同队列
-
-
索引方式
-
不同索引表指向不同状态的PDB(就绪索引表,阻塞索引表)
-
-
-
-
程序段(存放要执行的代码)
-
数据段(存放程序运行中的各种数据)
-
-
特征
-
动态性
-
并发性
-
独立性
-
异步性
-
结构性
-
-
状态转换
-
三种状态转换
-
7种状态
-
-
控制
-
创建
-
终止
-
阻塞和唤醒
-
切换
-
-
进程的通信
-
共享存储
-
消息传递
需要发送原语和接收原语
-
直接通信
-
间接通信
-
-
管道通信
-
-
线程与多线程模型
-
基本概念
-
线程与进程比较
-
进程是资源分配的基本单位,线程是调度的基本单位
-
-
线程属性
-
实现方式
-
用户级线程
进程切换可直接在用户态进行
-
内核级线程
进程切换在核心态进行
-
组合方式
-
-
多线程模型
-
多对一
-
优点:线程切换在用户空间完成,系统开销小,效率高
-
缺点:当一个用户线程阻塞整个进程阻塞,并发度不高,不能并行运行
-
多对多
-
优点:
-
缺点
-
一对一
-
优点:
-
缺点
-
-
-
-
处理机调度
-
三级调度
-
高级调度(作业调度)
内存与辅存之间的调度,每个作业只调入调出一次。
-
中级调度(内存调度)
存储器管理中对换功能,提高内存利用率和系统吞吐量
-
低级调度(进程调度)
按照某种算法从就绪队列选取进程运行
-
联系
-
作业调度为进程调度做准备
-
中级调度将暂时不能运行的进程挂起
-
调度等级越低调用频率越高
-
进程调度不可缺少
-
-
-
调度目标
-
cpu利用率
-
系统吞吐量
单位时间内完成作业的数量 长作业消耗时间长会降低系统吞吐量,短作业消耗时间短会提高系统吞吐量
-
周转时间
周转时间=作业完成时间-作业提交时间 带权周转书简=周转时间/运行时间
-
等待时间
进程处于等待处理机的时间之和
-
响应时间
从用户请求到首次响应时间
-
-
调度实现
-
调度程序(调度器)
-
排队器
将就绪进程按一定策略排成队列
-
分配器
将进程取出分配cpu
-
上下文切换器
处理机切换时会发生两队切换操作
-
-
调度时机、切换与过程
-
不能进行切换和调度过程
-
在处理中断过程
-
进程在操作系统内核临界区中(普通临界区是可以的)
-
需要屏蔽中断的原子操作
-
-
应该进行进程切换和调度
-
非剥夺调度:具有调度条件且当前进程无法继续运行
-
剥夺调度:中断处理结束或自陷处理,返回被中断进程的用户程序前。
-
-
-
进程调度方式
-
闲逛进程
系统中没有就绪进程就会调用闲逛进程并测试中断,没有其它进程就绪时一直运行
-
两种线程调度
-
用户级:选择进程给予时间控制,由进程中调度程序决定那个线程运行
-
内核级:由内核选择特定线程运行,给予一个时间片,超时后挂起。
-
-
-
调度算法
-
先来先服务FCFS
-
非抢占式算法,不会存在饥饿
-
对长作业有利对短作业不利
-
-
短作业优先SJF
-
优点:平均等待时间和周转时间短
-
缺点:对短作业有利,对长作业不利,会产生饥饿现象
-
-
优先级
-
分为抢占式和不可抢占式
-
-
高响应比优先
-
响应比=(等待时间+服务时间)/服务时间
-
优点:综合考虑了等待时间和运行时间,不会产生饥饿现象
-
等待时间相同时服务时间短优先,服务时间相同时,等待时间长优先,
-
-
时间片轮转RR
-
抢占式算法
-
-
多级队列
-
解决单一调度策略的缺点,使用多个队列实现不同调度算法
-
-
多级反馈队列
-
设置多个就绪队列并赋予不同优先级
-
每个队列运行时间片大小不同
-
每个队列采用FCFS算法
-
按队列优先级调度
-
-
-
进程切换
-
上下文切换
-
上下文切换的消耗
-
上下文切换与模式切换
-
-
-
死锁
-
定义
-
死锁,饥饿,死循环区别
-
死锁产生的条件
-
互斥条件
-
请求保持条件
-
循环等待条件
-
不可剥夺条件
-
-
什么时候发生死锁
-
对系统资源竞争
-
进程推进顺序非法
-
信号量使用不当
-
-
死锁处理策略
-
预防死锁
-
破坏互斥条件
-
方法:将互斥使用的资源改为允许共享使用,如SPOOLing技术
-
缺点:不是所有资源都可共享使用,为例安全很多时候无法破坏互斥条件
-
-
破坏请求保持条件
-
方法:采用静态分配方法
-
缺点:资源利用率低,可能导致某些进程饥饿
-
-
破坏循环等待条件
-
方法:顺序资源分配法,必须按照编号递增顺序请求资源
-
缺点:
-
不方便增加设备,否则徐重新分配编号
-
实际使用资源顺序可能和编号递增顺序不一致,导致资源浪费
-
必须按照规定申请资源,用户编程麻烦。
-
-
-
破坏不可剥夺条件
-
方法:
-
进程请求新资源得不到满足时需要全部释放保持的所有资源,以后重新申请
-
使用进程优先级采用资源剥夺方式
-
-
缺点:
-
实现复杂
-
释放资源会使前面工作失效,只适用于易保存和恢复状态的资源
-
反复请求和释放资源会增减系统开销,降低系统吞吐量
-
可能会导致进程饥饿
-
-
-
-
避免死锁
-
系统安全状态
-
只要能找到一个安全序列系统就是安全状态,否则为不安全状态
-
系统处于安全状态就一定不会发送死锁,系统进入不安全状态就可能发生死锁
-
-
银行家算法
-
-
死锁检测与解除
-
资源分配图
-
死锁定理
-
如果某时刻系统的资源分配图是不可完全简化的,此时系统死锁
-
-
死锁解除
-
资源剥夺法
-
挂起死锁进程,抢占它的资源
-
-
撤销进程法
-
撤销部分或全部死锁进程
-
-
进程回退法
-
让进程回退到足以避免死锁的地步
-
-
如何决定对谁动手?
-
进程优先级
-
已执行多长时间
-
还要多久完成
-
进程已经使用多少资源
-
进程是交互式还是批处理
-
-
-
-
-
不产生死锁最小资源数量
-
n个进程最多使用m个资源,则最少需要n*(m-1)+1个资源
-
-
-
同步与互斥
-
进程同步
-
并发带来的异步性有时需要进程同步才能解决
-
-
进程互斥
-
四个部分
-
进入区
-
检查能否进入,进入后上锁
-
-
临界区
-
访问临界资源的代码
-
-
退出区
-
负责解锁
-
-
剩余区
-
其余代码部分
-
-
-
临界资源
-
必须是共享的数据
-
-
遵循原则
-
空闲让进
-
临界区空闲时应允许一个进程访问
-
-
忙则等待
-
正访问临界资源的进程等待时允许其它进程抢占处理机,但不能进程该进程临界区
-
-
有限等待
-
让权等待
-
进不了临界区的进程徐释放处理机,防止忙等
-
-
-
-
实现临界区互斥方法
-
软件实现
-
单标志法
-
双标志先检查
-
双标志后检查
-
peterson算法
-
-
硬件实现
-
中断屏蔽算法
-
TestAndSet指令
-
Swap指令
-
-
-
信号量
-
PV操作
-
P操作:wait(S),请求一个单位的该类资源
-
V操作:signal(S),释放一个单位的该类资源
-
-
整型信号量
表示系统中某种资源的数量
-
对信号量的操作:初始化,P操作,V操作
-
优点:避免并发和异步问题
-
缺点:不满足让权等待,会发生忙等
-
-
记录型信号量
-
S.value的初值表示某种资源的数目,负数的绝对值表示等待进入临界区的进程数
-
P操作会执行S.value--,当S.value<0时分配完毕,进程进入自我阻塞状态,遵循“让权等待”原则
-
S操作会执行S.value++,当S.value<=0时调用wekeup原语唤醒等待队列第一个进程(阻塞态—>就绪态)
-
-
利用信号量实现同步
-
设置同步信号量S,初始值为0
-
在“前操作”之后执行V(S)
-
在“后操作”之后执行P(S)
-
-
利用信号量实现互斥
-
设置互斥信号量mutex,初值为1
-
在进入区P(mutex)——申请资源
-
在退出区V(mutex)——释放资源
-
对不同临界资源设置不同的互斥信号量
-
-
利用信号量实现前驱关系
-
-
经典同步问题
-
生产者消费者
-
哲学家进餐问题
-
吸烟者问题
-
-
管程
解决信号量机制编码麻烦,易出错问题
-
组成
-
共享数据结构
-
对数据结构初始化的语句
-
一组访问数据结构的过程(函数)
-
-
特征
-
局部于管程的数据只能被局部于管程的过程访问
-
进程/线程只能通过管程特定过程(函数)才能访问共享数据
-
每次只能允许一个进程在管程内部执行某个内部过程
-
-
-