(6.1)进程调度之进程调度概念和典型的调度算法

1.进程调度的目标

  • 概述上来讲:
    (1)在合适的时候以一定的策略选择一个就绪进程运行
    (2)调度时机?
    (3)调度策略?
    (3)调度目标?

  • 进程调度的目标
    (1)相应速度尽可能快
    (2)进程处理的时间尽可能短
    (3)系统吞吐量尽可能大,吞吐量:单位时间内运行更多的进程,(3)和(4)的本质是一样的
    (4)资源利用率尽可能高
    (5)对所有进程要公平
    (6)避免饥饿,饥饿:进程长时间得不到资源
    (7)避免死锁
    上述的部分原则之间存在自相矛盾,eg:
    (1)的结果会导致:对进程更多的调度,会额外的消耗更多的CPU时间,所以CPU有效的工作时间会降低,导致每个进程的处理时间会延长,导致(2)的时间变长;
    (1)的结果会导致:CPU更频繁的切换,调度要更频繁的进行,造成CPU的有效工作时间降低,导致单位时间内运行的进程更少,导致(3)的系统吞吐量降低

  • 对于进程调度的目标而言,两个量化的衡量指标
    (1)周转时间和平均周转时间
    在这里插入图片描述
    在这里插入图片描述

(2)带权周转时间和平均带权周转时间
在这里插入图片描述

2.典型的调度算法

  • 有以下几种:
    (1)先来先服务调度(First Come First Serve)
    (2)短作业优先调度算法(Short Job First)
    (3)响应比高者优先调度算法
    (4)优先数调度算法
    (5)循环轮转调度法(ROUND-ROBIN)
    (6)可变时间片轮转调度法
    (7)多重时间片循环调度法
  • (1)先来先服务调度(First Come First Serve)
    在这里插入图片描述
算法:
按照作业进入系统的时间先后来挑选作业。
先进入系统的作业优先被运行

特点:
容易实现,效率不高;
只考虑作业的等候时间,没考虑到运行时间的长短。
所以一个晚来的,但是很短的作业可能需要等待很长时间才能被运行,因为本算法不利用短作业
  • (2)短作业优先调度算法(Short Job First)
    在这里插入图片描述
算法:
参考运行时间,选取运行时间最短的作业投入运行

特点:
易于实现,效率不高;
忽视了作业等待时间,一个早来但是很长的作业将会在很长时间得不到调度,易出现资源饥饿现象
  • (3)响应比高者优先调度算法,比(1)(2)好
响应比定义:
作业的响应时间和与运行时间的比值
响应比=响应时间/运行时间=(等待时间+运行时间)/运行时间=1+等待时间/运行时间

算法:
计算每个作业的响应比,选择响应比最高的作业优先投入运行

特点:
响应比==1+等待时间/运行时间
若作业等待时间相同,则运行时间越短的作业,其响应比越高,so:越容易被调度,因而:有利于短作业;
若作业运行时间相同,则等待时间越长的作业,其响应比越高,so:越容易被调度,因而:有利于等候长的作业;
对于运行时间长的作业,其优先级可以随等待时间的增加而提高,档期等待足够久的时候,也有可能获取CPU
  • (4)优先数调度算法
算法:
根据进程的优先数,把CPU分配给最高的进程
进程优先数=静态优先数+动态优先数

静态优先数:在进程创建时候确定,在整个进程运行期间不再改变;
动态优先数:动态优先数在进程运行期间可以改变;

静态优先数的确定:
基于进程所需的资源多少
基于程序运行时间的长短
基于进程的类型:IO/CPU,前台/后台/,核心/用于

动态优先数的确定:
当使用CPU超过一定时长时;so,可以减少优先数,让别的进程被调度
当进程I/O操作时;
当进程等待超过一定时长时;so,可以增加优先数,让其快点被调度
  • (5)循环轮转调度法(ROUND-ROBIN):左轮手枪
    在这里插入图片描述
概念:
把所有就绪进程按照先进显出的原则排成队列。
新来进程追加到队列末尾。
进程以时间片q为单位轮流使用CPU。刚刚运行一个时间片的进程排到队列末尾,等待下一轮运行。
队列逻辑上是环形的。
如下图所示:

在这里插入图片描述

优点:
公平:每个就绪进程有平等机会获得CPU
交互:每个进程等待(N-1*q的时间就可以重新获得CPU

时间片q的大小
(1)若q太大
交互性差,甚至退化到FCFS调度算法

(2)若q太小
进程切换屏藩,系统开销增加

改进:
时间片的的大小可变;
组织多个就绪队列;
发布了582 篇原创文章 · 获赞 143 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/u011436427/article/details/104525847