进程(线程)调度及调度的九种算法。

2023-05-16

2.1. 进程调度

进积(线程)调度即处理机调度。一般在大型批 处理系统中配有作业调度,而其他系统中,通常无须配置作业调度;而在采用虚拟存储管理的操作系统中,中级调度被页面调入策略、页面置换策略和页面清除策略所取代,因此,计算机系统然中使用最频繁、算法最复杂的是进程(线程)调度。进程(线程)调度的任务是控制、协调进程(线程)对CPU的竞争,按照一定的调度算法,使某一就绪进程获得CPU的控制权,转换成运行状态。

2.1.1 概述

1.进程(线程)调度的主要功能

        记录系统中所有进程(线程)的执行状况;根据一定的调度算法,从就绪队列中选出一个进程来,准备把CPU分配给他;把CPU分配给进程(线程),即把选中的进程的进程控制块内有关的现场信息,如程序状态字、通用寄存器等内容送入处理器相应的寄存器中,从而让它占用CPU运行。

2. 进程(线程)调度的时机

执行进程调度一般是在下述情况下发生的:

  • 正在执行的进程(线程)运行完毕。
  • 正在执行的进程(线程)调用阻塞原语将自己阻塞起来进人等待状态。        
  • 正在执行的进程(线程)调用了阻塞原语操作,并且因为资源不足而被阻塞,或调用了唤醒原语操作激活了等待资源的进程(线程)。
  • 时间片用完。
    以上都是在CPU为不可抢占方式下的引起进程调度的原因。在CPU方式是可抢占方式时,还有下面的原因:
  • 就绪队列中的某个进程(线程)的优先级高于当前运行进程(线程)的优先级时,引发进程(线程)调度。所谓可占方式,即就绪队列中一有且有优先级高于 当前运行进程(线程)优先级的进程(线程)存在时,便文期进行调度,转让CPU。而不可抢占方式,即一但把CPU分配给一个进程(线程),它就一直占用CPU,直到该进程(线程)自己因调用原语操作或等待I/O而进入阻塞状态,或时间片用完时才让出CPU,重新执行进程(线程)调度。

2.1.2 进程(线程)调度算法

       进程(线程)调度算法解决以何种次序对各就绪进程(《线程)进行处理机的分配以及按何种时间比例让进程(线程)占用处理机。

1. 先来先服务

        在所有调度算法中,最简单的是非抢占式的先先来先服务(Firis-Come Fist-Severed,FCFS)算法。使用该算法,进程按照它们请求CPU的顺序使用CPU。基本上,有一个就绪进程的单一队列。早上,当第一个作业从外部进人系统,就立即开始并允许运行它所期望的时间。不会中断该作业,因为它需要很长的时间运行。当其他作业进人时,它们就被安排到队列的尾部。当正在运行的进程被阻塞时,队列中的第一个进 程就接着运行。当被阻塞的进程变为就绪时,就像一个新来到的作业样,排到队列的末尾。

      这个算法的主要优点是易于理解并且便于在程序中运用。在这个算法中,一个单链表记录了所有就绪进程。要选取一个进程运行,只要从该队列的头部移走一个进程即可;要添加一个新的作业或阻塞一个进程,只要把该作业或进程附加在相应队列的末尾即可。  

2. 最短作业优先

         现在来看一种适用于运行时可以预知的另一个非抢占式的批处理调度算法。当输人队列中有若干个同等重要的作业被启动时,调度程序应使用最短作业优先(Shortest Job First,SJF)算法。

3. 最短剩余时间优先

           最短作业优先的抢占式版本是最短剩余时间优先( Shortest Remaining Time Next,SRTN)算法。使用这个算法,调度程序总是选择其剩余运行时间最短的那个进程运行。有关的运行时间必须提前掌握。当一个新的作业到达时,其整个时间同当前进程的剩余时间做比较。如果新的进程比当前运行进程需要更少的时间,当前进程就被挂起,而运行新的进程。这种方式可以使新的短作业获得良好的服务。

4. 最高响应比优先算法

        在批处理系统中,最高响应比优先算法(Highest Response Rate First,HRRF)的性能是介于先来先服务和最短作业优先算法之间的折中算法。先来先服务算法在调度中最为公平,但是一且出现计算密集型的长作业则会对其他进程造成较长时间的等待;最短作业优先算法又偏好短作业,当短作业源源不断进人后备池时,长作业将会长时间滞留在后备池中,其运行将得不到保证,出现这种现象我们称为长作业处于“饥饿( starvation)”状态。

        如果能为每个作业引人响应比,情况就会有所改善。响应比的计算式为:

        响应比 Rp= (等待时间+预计运行时间)/预计运行时间=周转时间/预计运行时间

        每个作业随着在后备池等待时间的增长其响应比也不断增长,而且,预计运行时间越短的作业响应比增长越快。最高响应比优先算法在每次调度时选择响应比最高的作业投人运行,这种算法较好地适应了长短作业混合的系统,使得调度的性能指标趋于合理。

        最高响应比优先算法在一定程度上改善了调度的公平性和调度的效率,响应比在每次调度前进行计算,作业运行期间不计算。计算需要消耗系统的资源,存在一定的系统开销。  

5. 轮转法  

        轮转(Round-Robin,RR)算法最早来自分时系统。轮转法的基本思想是,将CPU的处理时间划分成一个个时间片,就绪队列中的诸进程轮流运行一个时间片。当时间片结束时,就强迫运行进程让出CPU,该进程进人就绪队列,等待下一-次调度。同时,进程调度又去选择就绪队列中的一个进程,分配给它一一个时间片,以投人运行。如此轮流调度,使得就绪队列中的所有进程在一个有限的时间T内都可以依次轮流获得一个时间片的处理机时间,从而满足了系统对用户分时响应的要求。

6. 最高优先级算法

        最高优先级(Highest Priority First,HPF)进程(线程)调度每次将处理机分配给具有最高优先级的就绪进程(线程)。进程(线程)的优先级由进程(线程)优先数决定。

7. 多级反馈队列算法

        
在实际的计算机系统中,进程(线程)的调度模式往往是几种调度算法的结合。例如,可以以最高优先级算法作为主要的调度模式,但对于具有相同优先数的进程((线程)则按先进先出算法法处理。又如,可以将时间片轮转算法和最高优先级算法结合,对于具有相同优先数的进程(线程)按时间片轮转调度算法处理。多级队列反馈法就是综合了先进先出调度算法、时间片轮转算法和可抢占式最高优先级算法的一种进程(线程 )调度算法。

8. 最短进程优先

        对于批处理系统而言,由于最短作业优先常常伴随着最短响应时间,所以如果能够把它用于交互进程,那将是非常好的。交互进程通常遵循下列模式:等待命令,执行命令,等待命令,执行命令,如此反复。如果将每一条命令的执行看作一个独立的“作业”,则可以通过首先运行最短的作业来使用响应时间最短。这里唯一的问题是如何从当前可运行进程中找出最短的那一个进程。

9. 实时系统中的调度算法

        实时系统是一种时间起着主导作用的系统,即系统的正确性不仅取决于计算的逻辑结果,   而且还依赖于产生结果的时间。典型的,外部物理设备给计算机发送了一个信号,则计算机必须在一个确定的时间范围内恰当地做出反应。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

进程(线程)调度及调度的九种算法。 的相关文章

随机推荐

  • 爬虫-实现一个简易的网页采集器

    1 requests模块的基本使用 span class token triple quoted string string 34 34 34 爬虫 34 34 34 span span class token triple quoted
  • debian: nginx前后端负载均衡,日志显示真实ip

    简要 xff1a server listen 80 server name www yunjisuan com location proxy pass http www server pools proxy set header host
  • ROS学习记录:RLException: Invalid <param> tag: Cannot load command parameter [robot_description]: no such

    本人Ubuntu版本 xff1a 20 04 在运行基于gazebo的仿真的时候出现了这样的报错 xff1a 跟着报错去检查对应的xml文件时发现没有问题 xff0c 然后参考 Problem with xacro invalid lt p
  • 计算机网络期末复习之大题

    目录 信噪比 路由表的更新 路由转发 拥塞控制算法 CRC循环检验码 数据报分片 码分多址通信 地址聚合 子网划分 信噪比 C 61 B log2 1 43 SNR 单位 bps C比特率 xff0c B带宽 SNR信噪比 1 设有一个1M
  • uboot配置和编译过程详解-2.4.uboot和系统移植第4部分-朱有鹏-专题视频课程

    uboot配置和编译过程详解 2 4 uboot和系统移植第4部分 4163人已学习 课程介绍 本课程为uboot学习的第四部分 xff0c 主要目标是详细分析和介绍uboot的主makefile和配置脚本mkconfig 本部分学习的目的
  • 虚拟机Ubuntu18.04连不上网络问题

    要想知道虚拟机Ubuntu有没有网 xff0c 可在终端ping一下网络 xff0c 如在终端输入 ping baidu com 如果出现如下情况 xff0c 则没有连上 正常的情况是这样的 那么 xff0c 如果连不上该如何解决呢 xff
  • 前端可视化数据大屏(1)

    效果图 技术架构 xff1a datav xff0c vue2 xff0c echarts 我们一步一步的来实现一个简单的可视化数据大屏 xff0c 开始吧 xff01 xff01 1 xff0c vue脚手架搭建项目 太简单了 xff0c
  • Kmeans聚类(手写数字识别)

    Kmeans算法原理 xff1a 在给定K个初始聚类中心点的情况下 xff0c xff08 1 xff09 把数据中的每个样本分到离其最近的聚类中心所代表的类中 xff08 2 xff09 分类完后计算从新每个类的中心点 xff08 取平均
  • day11 TCP连接管理与UDP协议

    目录 编辑 连接的建立 三次握手 连接的释放 四次挥手 保活计时器 用户数据报协议 UDP 编辑 连接的建立 三次握手 TCP 建立连接的过程叫做握手 采用三报文握手 xff1a 在客户和服务器之间交换三个 TCP 报文段 xff0c 以防
  • 手动搭建服务器—Python

    目录 1 HTTP协议 2 HTTP请求头 3 IP地址的绑定 4 根据不同的请求返回不同的内容 5 面向对象的服务器封装 6 WSGI服务器 6 1 WSGI接口 6 2 WSGI不同路径返回不同内容 6 3 读取文件并加载返回给浏览器
  • C语言学习分享第一天

    对C语言的认识 xff1a C语言是一种高级语言 xff0c 由低级语言发展而来 xff0c 实际上计算机是不能直接识别高级语言的 xff0c 计算机能够识别的只有低级语言 xff08 其实就是机器语言 xff09 xff0c 机器语言全部
  • C语言学习第二天

    VS上的编译 xff1a ctrl 43 F7或者ctrl 43 Fn 43 F7 运行 xff1a ctrl 43 F5或者ctrl 43 Fn 43 F75 调试 xff1a ctrl 43 F10或者ctrl 43 Fn 43 F10
  • 引发了异常: 读取访问权限冲突。**pStu_Head** 是 0x55BAA6E0。

    问题 xff1a 这几天在研究一个图书馆信息管理系统的代码 xff0c 结果在第一步就出错 xff0c 一直报错 其中的 deroy list create函数 是为一个结构体指针申请内存空间 xff0c 并对其该结构体的成员变量进行赋值
  • xxx不在 sudoers 文件中。此事将被报告。

    出现此类问题是因为当前用户未被授予sudo权限 xff0c 可通过以下步骤添加sudo权限 1 xff0c 通过su命令切换到root用户 注 xff1a 输入密码的过程屏幕上不会有输出 2 xff0c 在终端输入 visudo xff0c
  • Centos系统中使用Firefix播放视频

    这几天想尝试在Linux系统中使用Firefix来看视频 xff0c 在网上找了很多方法 xff0c 什么安装flash xff0c 安装FFmpeg视频解码器的 xff0c 费了很多时间也没有成功 xff0c 最后终于找到方法了 xff0
  • uboot源码分析1-启动第一阶段-2.5.uboot和系统移植第5部分-朱有鹏-专题视频课程...

    uboot源码分析1 启动第一阶段 2 5 uboot和系统移植第5部分 6166人已学习 课程介绍 本课程为uboot学习的第5部分 xff0c 主要内容是uboot启动的第一阶段start S文件中的汇编初始化部分 学习本部分的主要目标
  • java关于对象比较---equals与hashCode详解

    目录 前言 一 equals方法 二 hashCode 1 什么是hashCode 2 hashCode的使用 1 相等值的hashCode一定相等 2 不同的值 hashCode也可能相等的情况 三 为什么hashCode和equals要
  • 状态码500问题

    1 从客户端解决500内部服务器错误是由服务器造成的 xff0c 但也可以从客户端尝试解决 步骤如下 xff1a 1 xff09 清除缓存 xff0c 并删除Cookie后 xff0c 重新启动浏览器 2 xff09 把它作为一个504的错
  • MapReduce详解

    目录 xff08 一 xff09 MapReduce的基本知识 xff08 二 xff09 MapReduce计算框架概述 xff08 三 xff09 MapReduce 具体计算过程 xff08 一 xff09 MapReduce的基本知
  • 进程(线程)调度及调度的九种算法。

    2 1 进程调度 进积 线程 调度即处理机调度 一般在大型批 处理系统中配有作业调度 xff0c 而其他系统中 xff0c 通常无须配置作业调度 xff1b 而在采用虚拟存储管理的操作系统中 xff0c 中级调度被页面调入策略 页面置换策略