王道考研复习-操作系统-进程管理(二) (4)

图解

王道考研复习-操作系统-进程管理(二)

三级调度的联系

作业调度为进程的活动做准备,例如启动时mainThread的各种初始化加载; 中级调度将暂时用能运行的进程挂起,中级调度处于之间,所有有个中字

作业调度次数少,中级调度次数多,进程调度频率对高(进程多了阻塞,就绪挂起态,状态多了切换也就频繁了)

进程调度时最基本的,不可缺少

调度时机,切换与过程

以下几种情况不能处理进程切换

在处理中断的过程中,中断操作处于核心态比较重要,原语操作,不能切换

进程在操作系统内核的临界区: 进入临界区需要枷锁占有共享数据,为了更快的释放所,不应该切换

其他需要完全屏蔽中断的饿原子操作过程,如加锁,解锁,中断现场保护,恢复

应该进行调度的情况

发生引起调度条件(如CPU时间片时间到了),当前进程无法继续执行下去

中断处理结束或自陷处理结束后,返回被中断进程的用户程序执行现场信息,恢复被调度进程的现场信息。

调度的方式

剥夺式,又称抢占式,处理机分配给任务更为紧迫和重要的进程

非剥夺式,均衡执行

对比: 采用剥夺时调用,有助于提高系统整体的吞吐量和响应效率,但必须遵守一定的原则,如优先权,短进程优先和时间片原则
## 调度的基本准则

不同的调度算法具有不同的特性,在选择调度算法式,必须要考量调度算法的特性,

CPU利用率,尽可能让CPU处于忙碌状态

系统吞吐量: 单位时间内CPU完成的作业数量

周转时间: 作业从提交到完成锁经历的十斤啊,是作业等待, 在就绪队列,在处理机以及输入/输出操作锁花费的总时间之河
周转时间 = 作业完成时间 - 作业提交时间
平均周转时间 = (作业1完成时间 + 作业2完成时间 + ... 作业n完成时间)/n

带权周转时间 = 作业周转时间/作业实际运行时间

等待时间: 进程处于等待处理机状态的时间

响应时间: 用户从提交请求到首次系统产生响应所用的时间

典型的调度算法:

FCFS: 先来先服务, 作业时间公平,不可剥夺算法,先来先服务,对长作业有利,对长CPU繁忙型作业有利,不利于I/O繁忙型作业

SJF: 短作业优先算法, 对长作业不友好,没有考虑优先级,容易导致饥饿

优先级调度算法:
剥夺式,非剥夺式
静态优先级, 动态修仙记
系统进程>用户进程
交互型进程> 非交互型进程(前台>后台)
I/O进程优先于CPU进程(I/O)比较慢,先执行,让I/O设备更早工作

高响应比优先算法(HRRN):
响应时间 = (等待时间 + 要求服务时间)/ 要求服务时间

作业等待时间相同时,要求服务的时间越短,响应比越高

在要求服务时间相同时,作业的响应比由他的服务时间决定,因此他实现的是先来先服务

时间片轮转调度算法: 如果时间片足够大,所有进程的任务都能在一个时间片中完成,则退化为先来先服务;如果时间片小,则系统需要频繁的切换进程,处理机开销大,时间片的长短通常由系统响应时间,就绪对垒中进程树木和系统处理能力决定

多级反馈队列

设置多个就绪队列,每个队列都设置不同的优先级

赋予各队列中各进程执行的时间片大小各不相同,队列优先级越高则时间片越短

一个新的进程进入内存后它首先放入1级队列的末尾,如果他在一个时间片未执行完则放入到2级对列

仅当前以及的调度队列为空的时候才去执行下一级别的调度队列

特点:

终端作业型用户,短作业优先, 这就意味着如果一直插入一级队列的短作业则会饿死

短批处理作业用户,周转时间短

长批处理作业用户,经过前面几个步骤的分布执行,不会长期得不到处理

进程同步

为甚么引入进程同步: 在多道处理机下面,进程是并发执行的,不同的进程之间存在着不同的相互制约的关系,为了协调进程之间相互制约的关系引入了进程同步概念。

进程同步的几种实现机制:

临界资源: 受限制资源,一次只能允许一个进程使用的资源,通过互斥访问实现 do {
entry section; //进入区 进入时执行 wait源语
critical section //临界区
exit section: //退出区, 退出时执行signal源语
}

同步: 进程协调完成某种任务,部分任务需要控制其先后

互斥:

空闲让进

忙着等待

有限等待

让权等待

临界区互斥软件实现

单一标志法, trun = 0,多线程同时串改的风险,违背空闲让进

双标志法 flag[n] = true; 同样存在多线程同时串改的风险,违背忙着等待

双标志检查法: 会再检测时让权,过 (书本解释有歧义,实际能work,不是最优解)

Perternson‘Algorithm: 正向标记,反向标记 flag[i] = true, turn = j;
while(flag[j] && trun ==j );
...

硬件实现:

中断屏蔽法: 关中断 -> 临界区 -> 开中断 (CUP无法进行进程切换,所以不会有问题),不能对突发事件处理

硬件指令法:

TestAndSet, 原子指令操作 对 *lock树枝控制

swap: 对 *a和 *b数据互换实现中断

信号量

基于系统的原语, signal和wait实现, 可以实现同步,互斥,前驱关系(多个进程按照一定的顺序执行)

进程同步互斥的处理方式

关系梳理, 同步,互斥 设置pv的个数和放置顺序

资源确定: 设置信号量

管程

作用: 简化pv操作,管理进程

结构:

名称

共享数据结构说明

对数据结构进行操作的一组过程

对局部管程内部的共享数据设置初始值的语句

本质就是对数据的插入和获取进行 源语 wait和signal的管理

经典例子

生产者消费者问题
吃苹果和橘子
吸烟者问题
读者学者
哲学家进餐问题

死锁

定义: 进程资源互享等待无法继续向前推进

原因:

系统资源竞争

进程推进顺序非法,程序猿bug,信号量设置错误

产生条件

进程对所分配的资源独占,其他进程无法访问

不可剥夺,其他进程无法剥夺它的资源

请求和保持条件,进程保持了至少一个资源,又提出了新的资源请求

循环等待条件: 每个进程获得资源的同时被下一个进程所请求,存在一个闭环的等待集合 { p1, p2, ..pn, p1}

处理策略

预防死锁

破坏互斥条件,如允许资源共享使用, 但对于资源少的无法满足,如打印机,而且有些场合需要保持这种互斥性

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwdpwy.html