处理器调度

1)CPU调度的相关概念

a.CPU调度——其任务是控制、协调进程对CPU的竞争;即按一定的调度算法从就绪队列中选择一个进程,把CPU的使用权交给被选中的进程;如果没有就绪进程,系统会安排一个系统空闲进程或idle进程

b.CPU要解决的三个问题

CPU调度的时机(就绪队列的改变引发了重新调度):事件发生—》当前运行的进程暂停运行—》硬件机制响应后—》进入操作系统,处理相应事件—》结束处理后:某些进程的状态会发生变化,也可能又创建了一些新的进程—》就绪队列改变了—》需要进程调度根据预设的调度算法从就绪队列选一个进程

4中情况(内核对中断/异常/系统调用处理后返回到用户态时)

进程正常终止或者由于某种错误而终止

新进程创建或一个等待进程变成就绪

当一个进程从运行态进入阻塞态

当一个进程从运行态变为就绪态

调度过程——进程切换

进程调度从就绪队列选择了要运行的进程:这个进程可以是刚刚被暂停执行的进程,也可能是另一个新的进程

进程切换:是指一个进程让出CPU,由另一个进程占用CPU的过程,包括了对原来进程各种状态的保存和对新进程各种状态的的恢复

*切换全局目录以加载一个新的地址空间

*切换内核栈和硬件上下文,其中硬件上下文包括了内核执行新进程需要的全部信息,如CPU相关寄存器

上下文切换开销:直接开销:内核完成切换所用的CPU时间(保存恢复寄存器;切换地址空间  相关指令比较昂贵)

间接开销:高速缓存(Cash)、缓冲区缓存(Buffer Cache)和TLB(Translation Lookup Buffer)失效

CPU调度算法设计:

衡量调度算法的指标:

吞吐量——每单位时间完成的进程数目

周转时间——每个进程从提出请求到运行完成的时间

响应时间——从提出请求到第一次回应的的时间

CPU利用率——CPU做有效工作的时间比例

等待时间——每个进程在就绪队列中等待的时间

进程的优先级(数)

选择时间片考虑的因素:进程切换的开销;对响应时间的要求;就绪进程个数;CPU能力;进程的行为

2)批处理系统的调度算法(吞吐量,周转时间,CPU利用率,公平、平衡)

a.先来先服务(FCFS调度算法):按照进程就绪的先后顺序使用CPU,非抢占

优点:公平,实现简单

缺点:长进程后面的短进程需要等很长时间,不利于用户体验

b.最短作业优先(SJF调度算法Shortest Job First):具有最短完成时间的进程优先执行,非抢占式

优点:(在所有进程同时可运行时,)采用SJF调度算法可以得到最短平均周期时间

缺点:不公平,源源不断的短任务到来,可能使长任务长时间得不到运行,产生“饥饿”现象

c.对短剩余时间优先:SJF抢占式版本,即当一个新就绪的进程比当前运行进程具有更短完成时间时,系统抢占当前进程,选择新就绪的进程执行

d.最高响应比优先(Highest Response Ratio Next)(折衷权衡):调度时,首先计算每个进程的响应比R;之后,总是选择R最高的进程执行

响应比R = 周转时间/处理时间 = (处理时间 + 等待时间)/ 处理时间 = 1 + (等待时间 / 处理时间)

3)交互式系统中采用的调度算法(响应时间,公平、平衡)

a.时间片轮转调度算法:(不适合相同大小的进程)

目标:改善了短任务平均响应时间

解决问题的思路:周期性切换;为每个进程分配一个时间片;时钟中断——》轮转

典型的时间片长度:10ms~100ms

优点:公平;有利于交互式计算,响应时间快

缺点:由于进程切换,时间片轮转算法要花费较高的开销

b.最高优先级调度:选择优先级最高的进程投入运行

通常:系统进程优先级高于用户进程;前台进程优先级高于后台进程;操作系统更偏好I/O型进程

优点:简单

缺点:不公平,有饥饿现象

优先级反转问题:一个低优先级进程持有一个高优先级进程所需要的资源,使得高优先级进程等待低优先级进程运行

影响:系统错误;高优先级进程停滞不前,导致系统性能降低

解决方案:设置优先级上限;优先级继承;使用中断禁止

c.多级反馈队列:设置多个就绪队列,第一级队列优先级最高

给不同就绪队列中进程分配长度不同的时间片,第一级队列时间片最小,随着队列优先级别的降低,时间片增大

当第一级队列为空时,在第二级队列调度,以此类推

各级队列新创建进程就绪后,进入第一级队列

进程用完时间片而放弃CPU,进入下一级就绪队列

由于阻塞而放弃CPU的进程进入相应的等待队列,一旦等待的事件发生,该进程回到原来一级就绪队列(队尾or队首……)

d.最短进程优先

4)多处理器调度算法设计

不仅要决定选择哪个进程执行,还要决定在哪个CPU上执行

要考虑进程在多个CPU之间迁移时的开销(高速缓存失效,TLB失效,尽可能使进程总在同一个CPU上执行)

考虑负载均衡问题

5)典型操作系统所采用的调度算法

a.UNIX 动态优先数法

b.5.3BSD 多级反馈队列法

c.Linux 抢占式调度

d.Windows 基于优先级的抢占式多任务调度

调度单位是线程,采用基于动态优先级的、抢占式调度,结合时间配额的调整


就绪线程按优先级进入相应队列

系统总是选择优先级最高的就绪线程运行

同一优先级的各线程按时间片轮转进行调度

多CPU系统中允许多个线程并行运行


引发线程调度的条件:一个线程的优先级改变了;一个线程改变了它的亲和处理机集合

线程正常终止或由于某种错误而终止

新线程创建或一个等待线程变成就绪

当一个线程从运行态进入阻塞态

当一个线程从运行变为就绪态


Windows使用32个线程优先级,分为3类

16~31:实时优先级线程不改变其优先级

1~15:可变优先级线程:其优先级可以在一定范围内升高或降低(基本优先级和当前优先级)

0:零页线程:用于对系统中空闲物理页面清零


线程的时间配额:时间配额不是一个时间长度值,而一个称为配额单位的整数

一个线程用完了自己的时间配额时,如果没有其他相同优先级的线程,Windows将重新给该线程分配一个新的时间配额,

让它继续运行


Windows会提升这样的进程的当前优先级(针对可变优先级范围内的线程优先级)

I/O操作完成

信号量或事件等待结束

前台进程中的线程完成一个等待操作

由于窗口活动而唤醒窗口线程

线程处于就绪态超过了一定时间还没有运行——“饥饿”现象

e.Solaris 综合调度算法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值