调度算法

一、先来先服务FCFS (First Come First Serve)

  1.思想:

    选择最先进入后备/就绪队列的作业/进程,入主存/分配CPU

  2.优缺点

    优点:对所有作业/进程公平,算法简单稳定

    缺点:不够灵活,对紧急进程的优先处理权限不够,在相同时限下处理任务数量可能更少

二、短作业优先SJF (Shortest Job First)

  1.思想:

    可分为抢占式和非抢占式(执行时间越短,优先级越高)

    抢占式优先权,若队列后续作业/进程的优先级更高,则它抢占CPU资源,之前运行的作业/进程暂停,开始执行优先级更高的作业/进程,总结就是当前在CPU中的作业/进程总是执行时间最短,能够最快完成的

    非抢占式优先权,若当前CPU中已经有正在执行的作业/进程,则不会打断其执行过程,当后备队列中有多个进程时,下一个会先执行优先级高的作业/进程,入主存/分配CPU,总结就是下一个执行的作业/进程总是在后备队列中执行时间最短的 

  2.优缺点

    优点:灵活性高,相同时限下能处理更多的任务

    缺点:不够稳定,算法更复杂

PS:优先级调度算法与此算法类似,只不过额外指明了作业/进程的优先级以确定执行先后顺序,在此不再赘述

三、举例

  周转时间 = 完成时刻 - 进入时刻

  等待时间 = 完成时刻 - (进入时刻 + 执行时间)

  1.FCFS

    调度顺序:P1 -> P2 -> P3 -> P4

    画个Gantt图助于理解

    

    下方为不同进程进入队列次序及时间,上方为CPU中进程执行顺序表

    平均周转时间:Ta = (8 + 11 + 19 + 23) / 4 = 15.25s

    平均等待时间:Tw = (0 + 7 + 10 + 18) / 4 = 8.75s

  2.抢占式优先权调度

    调度顺序:P1 -> P2 -> P4 -> P2 -> P3 -> P1

    

      平均周转时间:Ta = (26 +  9 + 17 + 5) / 4 = 14.25s

    平均等待时间:Tw = (18 + 5 + 8 + 0) / 4 = 7.75s

  3.非抢占式SJF

    调度顺序:P1 -> P2 -> P4 -> P3

    

    平均周转时间:Ta = (8 +  11 + 24 + 14) / 4 = 14.25s

    平均等待时间:Tw = (0 + 7 + 15 + 9) / 4 = 7.75s

调度算法FCFS、SJF和优先权调度的介绍和例题的更多相关文章

  1. k8s调度器介绍(调度框架版本)

    从一个pod的创建开始 由kubectl解析创建pod的yaml,发送创建pod请求到APIServer. APIServer首先做权限认证,然后检查信息并把数据存储到ETCD里,创建deployme ...

  2. FCFS,SJF,HRN

    1.编写并调试一个单道处理系统的作业等待模拟程序. 作业等待算法:分别采用先来先服务(FCFS),最短作业优先(SJF).响应比高者优先(HRN)的调度算法. 对每种调度算法都要求打印每个作业开始运行 ...

  3. 短作业优先调度算法(SJF)

    假设有n项作业位于就绪队列中,这些作业的提交时间用数组requestTimes按照提交时间的先后顺序存储,对应的作业服务时间(持续时间)用数组durations存储.采用SJF算法,计算n项作业的平均 ...

  4. Go调度器介绍和容易忽视的问题

    本文记录了本人对Golang调度器的理解和跟踪调度器的方法,特别是一个容易忽略的goroutine执行顺序问题,看了很多篇Golang调度器的文章都没提到这个点,分享出来一起学习,欢迎交流指正. 什么 ...

  5. C语言模拟实现先来先服务(FCFS)和短作业优先(SJF)调度算法

    说明 该并非实现真正的处理机调度,只是通过算法模拟这两种调度算法的过程. 运行过程如下: 输入进程个数 输入各个进程的到达事件 输入各个进程的要求服务事件 选择一种调度算法 程序给出调度结果:各进程的 ...

  6. Linux 常见的进程调度算法

    1.在介绍进程调度之前,先对进程的状态的概念应该有所了解,下面是关于进程状态的一些基本概念:进程的状态分为三种,分别为: 1).运行态:该状态表明进程在实际占用CPU 2).就绪态: 该状态下进程可以 ...

  7. 操作系统常用调度算法(转载https://www.cnblogs.com/kxdblog/p/4798401.html)

    操作系统常用调度算法   在操作系统中存在多种调度算法,其中有的调度算法适用于作业调度,有的调度算法适用于进程调度,有的调度算法两者都适用.下面介绍几种常用的调度算法. 先来先服务(FCFS)调度算法 ...

  8. 操作系统学习笔记(五)--CPU调度

    由于第四章线程的介绍没有上传视频,故之后看书来补. 最近开始学习操作系统原理这门课程,特将学习笔记整理成技术博客的形式发表,希望能给大家的操作系统学习带来帮助.同时盼望大家能对文章评论,大家一起多多交 ...

  9. 0422 Step2-FCFS调度

    一.目的和要求 1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行, ...

随机推荐

  1. C++面试常见问题——01预处理与宏定义

    C++面试常见问题--------01预编译和宏的使用 C++预处理器 预处理器是一些指令,它将指示编译器在实际编译之前需要完成的预处理.预处理必须要在对程序进行词法与语义分析.代码生成与优化等通常的 ...

  2. 洛谷 三月月赛 B

    搞出每一位与前一位的差,然后区间修改只是会影响区间的端点,所以只修改一下端点的值就好. %%%高一神犇线段树 #include<bits/stdc++.h> #define N 10000 ...

  3. python面试题整理(一)

    python基础:1.列表生成式和生成器表达式有什么区别 我说的是首先写法不一样,列表生成式用[],生成器表达式用(),其次列表生成是一次性生成一个完整的列表,生成器表达式返回的是一个一个的值,占用内 ...

  4. 132-PHP子类和父类同名函数的调用

    <?php class father{ //定义father类 public function cook(){ return '烹饪'; } } class son extends father ...

  5. tcp协议与dup协议知识总结

    在工作之余用xmind总结了一些UDP协议与TCP协议的知识点,如果有需要可以通过下方的留言,分享xmind文件和xmind软件.

  6. UVA - 1611 Crane(起重机)(贪心)

    题意:输入一个1~n(1<=n<=10000)的排列,用不超过9^6次操作把它变成升序.每次操作都可以选一个长度为偶数的连续区间,交换前一半和后一半. 提示:2n次操作就足够了. 分析:从 ...

  7. C++ opencv 数字识别

    #include "cv.h" #include "highgui.h" #include "cxcore.h" #include < ...

  8. Ganglia 安装 No package 'ck' found

    安装ConcurrecyKit,下载地址:https://github.com/concurrencykit/ck   编译安装即可 下面是一个歪果仁的解决办法,不过我没用上 I was buildi ...

  9. 量化投资_Multicharts数组操作函数_append()追加函数(自定义)

    1. Multicharts中关于数组的操作比较麻烦,而且当中所谓的动态数组的定义并不是像其他语言那种的概念.因此要对数组进行元素“”追加“”的话,需要重新更改数组的索引,然后再最后一个位置添加val ...

  10. consul生产实战

    pwd:/home/appadmin wget https://releases.hashicorp.com/consul/1.6.1/consul_1.6.1_linux_amd64.zip unz ...