进程调度算法

目录

先来先服务调度算法

最短作业优先调度算法

高响应比优先调度算法

时间片轮转调度算法

最高优先级调度算法

多级反馈队列调度算法


先来先服务调度算法

非抢占式的先来先服务算法

就像队列一样,先进先出,这似乎很公平

但是当一个长作业先运行了,那么后面的短作业等待的时间就会很长,不利于短作业。

先来先服务: 对长作业有利,适用于 CPU 繁忙型作业的系统,而不适用于 I/O 繁忙型作业的系统。

CPU繁忙型作业:是指那些需要大量的CPU时间进行计算,而很少请求I/O操作的作业。

而先来先服务,对长作业有利,也就是利于大量CPU时间进行计算

I/O繁忙型作业:是指那些在执行过程中需要频繁进行I/O操作的作业,那么进行IO的话,

肯定等待I/O操作完成,那么CPU只能干等,白白浪费CPU的资源

最短作业优先调度算法

优先选择运行时间最短的进程来运行,这有助于提高系统的吞吐量。

这显然对长作业不利,那么会造成什么问题呢?

比如,一个长作业在就绪队列等待运行,而这个就绪队列加入了非常多的短作业,

那么就会使得长作业不断的往后推,周转时间变长,致使长作业长期不会被运行。

高响应比优先调度算法

每次进行进程调度时,先计算  响应比优先级,然后把 响应比优先级 最高的进程投入运行

那么 是如何计算  响应比优先级:

对短作业:要求服务时间小, 那么值肯定更大

对长作业:要求服务时间大,那么值肯定就越小,但是随着  等待时间增加优先级会越来越高

但是 我们怎么知道  要求服务时间呢? 所以这个算法太理想了,难以实际应用

时间片轮转调度算法

每个进程都被分配一个时间片,在规定的时间内完成,没有完成就重新插入到 就绪队列 末尾

但是又引出两个问题:

一,如果时间片设得太短会导致过多的进程上下文切换,降低了 CPU 效率;

二, 如果设得太长又可能引起对短作业进程的响应时间变长。

通常时间片设为 20ms~50ms 通常是一个比较合理的折中值。

最高优先级调度算法

从就绪队列中选择最高优先级的进程进行运行,这称为最高优先级调度算法。

两种优先级:

静态优先级:创建进程时候,就已经确定了优先级了,然后整个运行时间优先级都不会变化;

动态优先级:根据进程的动态变化调整优先级,比如 如果进程运行时间增加,则降低其优先级,如果进程等待时间增加,则升高其优先级

两种处理优先级高的方法: 

非抢占式:当就绪队列中出现优先级高的进程,运行完当前进程,再选择优先级高的进程。(谦让)

抢占式:当就绪队列中出现优先级高的进程,当前进程挂起,调度优先级高的进程运行。(霸道)

多级反馈队列调度算法

多级   表示有多个队列,每个队列优先级从高到低,同时优先级越高时间片越短。
反馈   表示如果有新的进程加入优先级高的队列时,立刻停止当前正在运行的进程,转而去运行优先级高的队列;

短作业:可能可以在第一级队列很快被处理完,因为只需要很小的时间片

长作业:如果在第一级队列处理不完,可以移入下次队列等待被执行

虽然等待的时间变长了,但是运行时间也会更长

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-23 20:30:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-23 20:30:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-23 20:30:01       82 阅读
  4. Python语言-面向对象

    2024-04-23 20:30:01       91 阅读

热门阅读

  1. Codeforces Round 816 (Div. 2)(D拆位图论构造 E斜率优化)

    2024-04-23 20:30:01       27 阅读
  2. freebase一站式搭建流程

    2024-04-23 20:30:01       36 阅读
  3. 重生之我来写低代码后端01-如何高效组织代码

    2024-04-23 20:30:01       35 阅读
  4. 手误修改了spfile导致实例重启失败

    2024-04-23 20:30:01       31 阅读
  5. Php 通过 FFmpeg 获取远程视频的时长和截图

    2024-04-23 20:30:01       34 阅读
  6. 数字人技术:相关论文汇总

    2024-04-23 20:30:01       34 阅读