2021-07-18调度算法

调度算法为CPU调度算法,是用来帮助CPU来切换进程的算法。
为什么需要调度算法?
不同的进程在同一时刻有着不同的状态,处于不同状态下对于CPU的利用率是不同的,为了提高CPU的利用率,要使用合适的调度算法,使得每一个进程都能够使用CPU。
(这个写的不好)

调度算法分为两大类:非抢占式调度和抢占式调度
非抢占式调度:进程运行直到结束或者被某个事件所阻塞才转让出CPU的资源。
抢占式调度:进程依然可以运行,但是必须交出CPU资源让下一个程序运行。

调度指标:用于衡量调度算法在不同情况下的效率,
周转周期:T周转 = T完成 - T到达
响应时间:T响应 = T首次运行 - T到达
(响应时间能够反应进程的交互性的强弱)

基本的调度算法有
一、先来先到调度算法(FIFO/FCFS)
运行完一个程序在运行完下一个(非抢占式调度),按照先来后到的顺序运行。
有利于短作业,对于不利于长作业。
利于CPU繁忙型,不利于I/O繁忙型。
因为前者少有I/O阻塞,会长时间占用CPU,后者一旦有I/O阻塞就会被放到就绪队列的后端。再次被调度需要等待一段时间。
CPU繁忙型:需要超负荷的整型和浮点运算,比如大数据建模,各种科学计算。
I/O繁忙型:需要频繁的写入硬盘或其他的存储介质,比如数据中心,云储存服务器。
当若干个短作业被排在长作业后会出现护航效应(耗时较少的资源消费者被排在耗时较多的资源消费者之后)

二、最短任务优先(SJF)
在同时到达的一批任务中,最短的任务先开始。
但是由于为非抢占式调度,短任务较晚到达依然会被排在长任务之后,周转时间依然很长。

三、最短完成时间优先(
是抢占式调度版本的最短任务优先算法,优先运行较短的任务。如果正在运行较长的任务且有短任务到达,立刻停止运行长任务,切换到新来的短任务。
如果一直有短任务到达,对长任务十分不利。

以上三种调度算法不能很好的满足用户的交互性的需求,在发出请求后依然需要好一段时间才能得到回应。因此又设计了其他的算法。

四、轮转(RR)
给每个进程分配同样长度的时间片,每个进程可以在该时间片内运行。
时间片的长度为时钟周期的倍数,便于操作系统在时钟中断的时候夺回控制权。
(不明白的是:如果在原子操作没有执行完,而时间片已经用完的时候会怎么办?)
如果时间片没有使用完,程序运行完成或者被阻塞,会直接切换到下一个。
若时间片分配过长,响应性较差,用户的体验较差。
若时间片分配过短,会造成上下文的切换过于频繁,开销太大。

五、MLTQ多级反馈队列
每个优先级有其独立的队列。有多个优先级。
1、基本的规则
1)优先级较高的先运行
2)同一级别的进程使用时间片轮转调度算法
3)有新的任务加入放入优先级级别最高的队列
4)用完时间片后,优先级会降低一级。
5)在时间片内执行I/O请求,会阻塞,但优先级不变。
6)高优先级的队列的时间片较短
但是4)、5)会引发两个问题
1)饥饿问题:低优先级的程序可能一直不运行
2)愚弄调度程序:无需访问文件的程序故意在时间片将近结束的时候访问无效的文件,阻塞放弃CPU,导致优先级一直不变。
改进方法:
4)经过一段时间S后,便将所有的程序提升到最高的优先级
5)设定每个级别的最长时间配额,无论中间有多少次I/O请求,只要最长时间配额使用完了,优先级就会降低一级。

2、其他
优先级可以交由OS设置或由用户自行设置。

六、比例份额
确保每个程序占据有一定比例份额的CPU的调度的时间。
(我的疑惑:如何得知CPU的总量?计算机可以一直开下去也可以关掉)
1、彩票数能够标识进程能够占有的CPU比例份额。随机发放彩票数目给进程。
同时,要让使用频繁的进程占有更多的彩票的份额。

2、彩票机制
1)用户货币:每个用户的货币有着不同的权重,可以发放给自己所拥有的进程,进程支付用户货币给OS,OS根据货币的权重发放给用户。
2)彩票转让:将彩票转让给其他的进程
3)彩票膨胀:在信任的环境下提升进程所拥有的彩票的数量。

3、实现
1)用链表存放进程所拥有的彩票的信息
2)初始化:头指针,计数器
3)用随机数生成彩票数量范围内的随机数
4)计数器加上指针指向的进程所拥有的彩票数
5)随机数落入区间即为中奖
6)降序排列能够加快找到正确的区间的进程

4、度量:不公平指标U = 进程A完成的时刻/进程B完成的时刻

5、问题
1)如何分配彩票?目前没有很好的分配的方法
2)程序实现简单,但是在运行时间较短的情况下难以产生正确的比例。

6、步长调度——为了解决问题2)
1)确定步长——使用公约数除以每个进程所拥有的票数,得到的值称为这个程序的步长。
2)每个程序最初的步长为0,开始时按照顺序运行
3)程序运行完成之后加上自己的步长
4)每次选取步长最小的程序运行
5)当程序最终的步长一致的时候,程序运行的次数为程序拥有的彩票占总量的份额。
问题:需要全局状态,难以为新加入的进程设置步长。

其他的问题
1)如何分配彩票的面额没有得到解决。
2)难以适应I/O(这个不明白为什么?)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值