进程(四) --- 进程调度算法

进程调度类型

  • 抢占调度
    执行的进程允许把他的cpu 给剥夺

  • 非抢占调度
    一旦某个进程得到cpu,就会一直占用到终止或者等待状态

调度算法性能指标

  • cpu 利用率: cpu 忙碌的程度,cpu 越繁忙,调度算法越好
  • 响应时间:从提交任务到第一次响应的时间(主要是交互式系统,比如终端执行 ls -l)
  • 等待时间: 进程累加再就绪队列中等待的时间
  • 周转时间:从进程从就绪队列提交到完成的时间
  • 吞吐率:每个时钟单位处理的任务数量
  • 公平性: 以合理的方式让各个进程共享cpu

调度算法

先来先服务(FCFS)

First-Come,First-Serverd(FCFS),通过一个 FIFO 队列来管理,当一个进程进入就绪队列之后,他的 PCB 控制块会被加到 FIFO 队列的尾部. cpu每次 会从FIFO 队列的头部拿去进程来执行。

缺点
该算法会导致进程平均等待事件变长。假设有三个进程再队列中的顺序为p1,p2,p3

进程名 执行时间 等待时间
P1 24ms 0
P2 3ms 24
P3 3ms 24+3=27

三个进程执行完成的平均等待时间(0+24+27)/3 = 17

三个进程执行完成的平均周转时间(24+27+30)/3 = 27

如果换一下顺序,如下所示,则明显降低平均等待时间

进程名 执行时间 等待时间
P2 3ms 0
P3 3ms 3
P1 24ms 3+3=6

三个进程执行完成的平均等待时间(0+3+6)/3 = 3

三个进程执行完成的平均周转时间(3+6+30)/3 = 13

最短作业优先服务(SJF)

Shortest-Job-First (SJF),FCFS的问题在于,执行时间长的进程再队列最前面,只要将队列的顺序按照执行时间从小到大排序,那么进程的平均等待时间就是最小的。但是进程的执行时间是个未知数,我们无法知道一个进程接下来需要占用多久的cpu.

估算
因为我们无法知道未来进程占用多久的cpu,那我们通过这个进程历史上占用cpu的时间来估算下一刻这个进程会要占用多久的cpu ,从而来排序

缺点:
可能造成饥饿现象,长进程可能长时间无法获得cpu.
解决方式

优先级调度

Priority Scheduling 是一个特殊的SJF 算法。优先级通常为固定区间的数字,比如 [0,10].其中数字的大小与优先级高低的关系再不同系统中实现是不一样的,在linux系统中0是最高优先级.

优先级调度策略就是给每个进程附上优先级(SJF 就是最短执行时间的优先级最高),优先级调度可以是抢占式非抢占式的。

SRTF

Shortest Remaining Time First (SRTF):抢占式算法,SJF 是非抢占式的,当p1(24ms) 优先到来,过了1ms 之后 p2,p3 再过来,虽p2,p3是短作业,但是还是要等待p1 执行完成之后才可以执行p2,p3。SRTF 的作用就是可以抢占,当p1执行1ms 后p2,p3 到来,则优先执行p2,p3,接着再执行p1.

优先级的定义

  • 静态优先级

优先级保持不变,可能造成饥饿现象,短进程一直占用着cpu,长进程可能长时间无法获得cpu.

  • 动态优先级

通过老化(aging) 的方式:多级反馈队列(Multi-level Feedback QUeue,MLFQ)

根据进程占用的cpu时间,当进程占用cpu的总时间越长,则慢慢降低他的优先级

根据进程再就绪队列等待的时间,当进程再就绪队列等待的事件越长,则慢慢提升他的优先级

时间片轮转(RR)

Round-Robin (RR): 每个进程都可以得到相同的CPU时间(CPU时间片)。当时间便到达晋城,将为剥夺CPU并加入就绪队列的尾部。因此该调度算法是一个抢占式调度算法。

假设时间片的长度为2ms 则,以下执行的顺序是

进程名 执行时间 等待时间
P1 14ms 0
P2 3ms 14
P3 3ms 14+3=17

三个进程执行完成的平均等待时间
p1 = (6-2)+(10-8) =6
p2 = 2+(8-4)=6
p3= 4+(9-6)=7
(6+6+7)/3=6.33
三个进程执行完成的平均周转时间
(20+10+9)/3=13

该算法的实现难处在于时间片的选取

  • 取值太小:进程切换开销显著增大
  • 取值太大: 响应速度下降,会让后面的进程等待事件变成(取值无穷大就退化成FCFS)
  • 对长作业带来额外的切换开销
    一般时间片的选取范围为 10ms-100ms ,上下文切换的事件大概为0.1ms-1ms(1%的CPU时间片开销)
posted @ 2022-04-27 20:01  zhqqqy  阅读(289)  评论(0编辑  收藏  举报