1,FCFS

先服务先调度

FCFS策略可以通过FIFO队列容易的实现。当一个进程进入就绪队列时,它的PCB会被连接到队列尾部。当CPU空闲时,它会分配给位于队列头部的进程,并且这个运行进程从队列中移去。

缺点:平均等待时间往往很长。

假设有这么三个进程P1,P2,P3按顺序到达,并且按FCFS顺序进行处理

进程 执行时间
P1 24
P2 6
P3 6

平均等待时间=((0-0)+(24-0)+(30-0))/3=18ms

1.1,护航效果

考虑动态情况下FCFS调度性能:

假设有一个CPU密集型进程和多个I/O密集型进程,随着进程在系统中的运行,可能会有这样的情况:

  1. CPU密集型进程得到CPU并使用它,这段时间里,其他I/O进程处理完它们的I/O,转到就绪队列里,等待CPU;当这些I/O密集型进程在等待的时候,I/O设备空闲
  2. 当CPU密集型进程完成CPU的执行之后,转至I/O执行进程;而此时I/O密集型进程因为具有很短的CPU执行,很快就会回到I/O队列,此时CPU空闲
  3. 之后,CPU密集型进程会移回到就绪队列并拿到CPU的执行权,I/O密集型进程完成了I/O工作之后,会在就绪队列中等待CPU的释放。
  4. 由于所有其他进程都等待一个大进程释放CPU,故称之为护航效果

2,SJF

最短作业优先调度

这个算法将每个进程与其啊次CPU执行的长度关联起来。当CPU变为空闲的时候,它会被赋给具有最短CPU执行的进程!

SJF有抢占式的和非抢占式的

假设有这么四个进程

进程 到达时间 执行时间
P1 0 8
P2 1 4
P3 2 9
P4 3 5

非抢占式的:

0ms时,P1进程进来了,P1拿到CPU的执行权,当P1运行完之后,已经是4ms了;此时P2,P3,P4均已到达,此时会根据CPU执行时间进行调度!所以进程的执行顺序是P1-P2-P4-P3

抢占式的:

第0ms的时候,P1到达并拿到CPU的执行权;

第1ms的时候,P2到达,此时P1的剩余执行时间还有7ms,而P2的执行时间只需要4ms,所以调度程序会让P2拿到CPU的执行权;

第2ms的时候,P3到达了,此时P1,P2,P3的所需执行时间分别为:7ms,2ms,9ms,所以会让P2继续执行;

第3ms的时候,P4到达了,此时P1,P2,P3,P4所需的执行时间分别为:7ms,1ms,9ms,5ms,所以后续的执行顺序应该是:P2-P4-P1-P3

这样就是图中所示的信息!

值得一提的是:抢占式SJF调度有时被称为最短剩余时间优先调度

3,优先级调度

SJF算法是通用优先级调度算法的一个特例

进程会被分配到一个优先级,但值得一提的是,对于0优先级表示最高还是最低并没有定论!

有的系统用低数字表示高优先级,有的则用来表示低优先级!

3.1,优先级的定义

优先级的定义可以分为外部的和内部的

  1. 内部的:采用一些测量数据来计算进程优先级:时限,内存要求,打开文件数量,平均I/O执行时间与CPU平均执行之比;这些都可以用于计算优先级
  2. 外部的:进程重要性,用于支付使用那个计算机的费用类型和数量,赞助部门,其他因素等;也可以用来计算优先级

3.2,问题

优先级调度算法的一个主要问题就是:无穷阻塞/饥饿

极端情况下优先级高的进程可以让优先级低的进程一直等待;

通俗点说就是:假如有一个优先级为0(这里假设数字越低,优先级越低)的进程在等待CPU执行,每当快轮到它时,都会有一个更高优先级的进程进来,还不止一次,这样它就永远都得不到运行!

3.3,解决方法

低优先级进程的无穷等待问题的解决方案之一就是老化。

老化可以逐渐增加在系统中等待很久的进程的优先级,例如可以每个一段时间就提高进程的优先级数字(这里假设数字越低,优先级越低)

3.4,示例

这里假设数字越低,优先级越高

进程 执行时间 优先级
P1 10 1
P2 1 3
P3 2 2

执行的顺序:

4,RR

轮转调度算法

轮转调度算法就是专门为分时系统设计的,类似于FCFS调度,但是增加了抢占以切换进程。

将一个较小时间单元定义为时间量或者时间片,时间片的大小通常为10~100ms,就绪队列作为循环队列,CPU调度程序循环整个就绪队列,为每个进程分配不超过一个时间片的CPU

在轮转时有两种情况

  • 进程CPU剩余执行时间>时间片

    • 执行完一个时间片的时间后,定时器会中断,交由下一个进程执行
  • 进程CPU剩余执行时间<时间片
    • 进程执行完成之后,会释放CPU,交由下一个进程执行

4.1,示例

进程 到达时间 执行时间
P1 0 100
P2 4 50
P3 6 75

假设一个时间片是25ms

值得一提的是:时间片的大小不能一味的以为越大越好!

过大的话:极端情况下RR算法与FCFS算法一样

过小的话:会导致频繁的上下文切换,导致时间的浪费!

进程调度----FCFS,SJF,优先级调度,RR相关推荐

  1. 操作系统(五):FCFS/SJF/非抢占优先级/RR

    操作系统(五):FCFS/SJF/非抢占优先级/RR 一.题目1(书上170页5.7) 5.4 5.4 Consider the following set of processes, with th ...

  2. 进程分配算法(FCFS,SJF,RR)

    一.进程调度算法的背景 在多道程序环境下,内存中存在着多个进程,其数目往往多于处理机数目.这就要求系统能按某种算法,动态地将处理机分配给处于就绪状态的一个进程,使之执行.分配处理机的任务是由处理机调度 ...

  3. 操作系统-进程调度(FCFS和SJF)

    文章目录 进程调度(FCFS和SJF) 问题描述 实验环境 输入 输出 测试数据 实验设计 数据结构 函数的功能.参数和输出 主要函数算法设计 详细设计 流程图 实验结果与分析 结果展示与描述 结果分 ...

  4. 操作系统中的调度算法FCFS、SJF、RR算法(Java实现)

    Proce类: package five; public class Process { public String name;// 进程名称 public int arrivalTime;// 到达 ...

  5. linux进程调度之 FIFO 和 RR 调度策略

    转载 http://blog.chinaunix.net/uid-24774106-id-3379478.html  linux进程调度之 FIFO 和 RR 调度策略 2012-10-19 18:1 ...

  6. FCFS,SJF以及PSA进程调度算法效率的比较

    实现 下面是用 Java 程序比较 FCFS,SJF 和 PSA 算法效率的示例代码: FCFS 思路 对于 FCFS 算法,我们可以定义一个 Process 类来表示一个进程,其中包含进程名称.到达 ...

  7. FCFS,SJF以及PSA进程调度算法的比较

    实现 下面是用 Java 程序比较 FCFS,SJF 和 PSA 算法效率的示例代码: FCFS 思路 对于 FCFS 算法,我们可以定义一个 Process 类来表示一个进程,其中包含进程名称.到达 ...

  8. 操作系统进程调度 FCFS,SJF,RR算法(Java实现)

    有用就给个关注呗 进程控制块 为了管理和控制进程,系统在创建每一个进程时,都为其开辟一个专用的存储区,用以随时记录它在系统中的动态特性.通常,把这一存储区称为该进程的"进程控制块" ...

  9. FCFS、SJF、RR、SRT进程调度算法的代码实现

    最近在做操作系统的上机实验,顺便给大家分享一下自己实验的过程和成果. 以下是实验步骤∶ 1.用一个结构体来存储进程的信息,结构体中包含以下变量. int id; int arriving_time;/ ...

最新文章

  1. 在AI领域每月投资一次,全面解析腾讯的人工智能奇招
  2. 开发日记-20190802 关键词 闲聊
  3. vs2010 vc nmake编译openssl-0.9.8e
  4. 如何在ubuntu上搭建hustoj?
  5. VTK:Filtering之WarpTo
  6. laytpl遍历实体列表_Layui数据表格之获取表格中所有的数据方法
  7. C语言讲义——字符串
  8. ssh 免密码登录远程主机 免登录运行指令
  9. Mac国内安装oh-my-zsh
  10. windows安装各版本python解释器和anaconda
  11. nginx 隐藏端口号、自签名https、强制https
  12. 魔法风云纪无限元宝公益服务器,好玩网页游戏 2678魔法风云纪sf 神兽助战卡免费获得...
  13. Redis持久化 - 邱乘屹的个人技术博客
  14. java LPT1_com1/lpt1/prn/nul 木马后门处理方法集合
  15. 计算机组成原理多级先行进位,计算机组成原理—最系统的算机基础知识.ppt
  16. C语言打印杨辉三角的多种方法
  17. 前端学习第三站——Vue2基础篇
  18. python发短信sim800_玩转 ESP32 + Arduino (十八) 采用SIM800L发送短信和定位(基础知识)...
  19. 3G带动企业移动管理信息化应用 直播视频
  20. TOJ 1335 优先队列

热门文章

  1. 如何申请进入专家库?申请条件是什么?
  2. VC操作Excel之sercies、Trendline
  3. Android-网络编程:快乐词典
  4. Python代码国际化
  5. 和数集团“区块链+数字化”促进新场景应用落地 为多领域开启无限可能
  6. 计算机毕业设计(附源码)python医院疫情管理系统
  7. matlab 直流-直流变换器毕业论文,基于MATLAB直流-直流变换器的研究---毕业论文
  8. 独孤思维:小白搬运项目,房产公众号月入10w+
  9. JQ插件Ztree的简单使用
  10. 联想NBD白欲立:打造中国最靠谱物联网创业平台