2-2进程管理-处理机调度

2023-05-16

文章目录

  • 一.调度的层次
  • 二.进程调度的时机、切换与过程、调度方式
  • 三.调度器、闲逛进程
  • 四.调度算法的评价指标
  • 五.调度算法
    • (一)先来先服务SCFS
    • (二)短作业优先算法SJF
    • (三)高响应比优先HRRN
    • (四)时间片轮转调度算法RR
    • (五)优先级调度算法
    • (六)多级反馈队列调度算法
    • (七)多级队列调度

一.调度的层次

1.高级调度/作业调度:频率低

  • 无→创建态→就绪态
  • 外存→内存,面向作业

按照某种规则,从后备队列中选择合适的作业将其调入内存,并为其创建进程

2.中级调度/内存调度:提高内存利用率和系统吞吐量

  • 挂起态→就绪态(阻塞挂起→阻塞态)
  • 外存→内存(阻塞挂起在外存,阻塞态在内存),面向进程

按照某种规则,从挂起队列中选择合适的进程将其数据调回内存,并修改其状态为就绪态,挂在就绪队列上等待

  • 挂起态:将那些暂时不能运行的进程调至外存等待,把这时的进程状态称为挂起态。“挂起”和“阻塞”:两种状态都是暂时不能获得CPU的服务,但挂起态是将进程映像调到外存去了,而阻塞态下进程映像还在内存中。

在这里插入图片描述

3.低级调度/进程调度:高频,最基本

  • 就绪态→运行态
  • 内存→CPU

按照某种规则从就绪队列中选择一个进程为其分配处理机

总结
在这里插入图片描述

二.进程调度的时机、切换与过程、调度方式

1.需要进行进程调度与切换的情况:
(1)当前运行的进程主动放弃处理机
进程正常终止、运行过程中发生异常而终止、进程主动请求阻塞(如等待I/O)
(2)当前运行的进程被动放弃处理机
分给进程的时间片用完、有更紧急的事需要处理(如I/O中断)、有更高优先级的进程进入就绪队列

2.不能进行进程调度与切换的情况
(1)在处理中断的过程中。中断处理过程复杂,与硬件密切相关,很难做到在中断处理过程中进行进程切换。
(2)进程在操作系统内核程序临界区

  • 临界资源:一个时间段内只允许一个进程使用的资源。各进程需要互斥地访问临界资源。
  • 临界区
    临界区指的是一个访问共用资源的程序片段(访问临界区的那段代码),而这些共用资源又无法同时被多个线程访问的特性。当有线程进入临界区段时,其他线程或是进程必须等待

(3)在原子操作过程中(原语)。原子操作不可中断,要一气呵成(如修改PCB中进程状态标志,并把PCB放到相应队列)

3.进程调度的方式
(1)非剥夺调度方式/非抢占方式:只允许进程主动放弃处理机。在运行过程中即便有更紧迫的任务到达,当前进程依然会继续使用处理机,直到该进程终止或主动要求进入阻塞态。实现简单,系统开销小但是无法及时处理紧急任务,适合于早期的批处理系统。
(2)剥夺调度方式/抢占方式:当一个进程正在处理机上执行时,如果有一个更重要或更紧迫的进程需要使用处理机,则立即暂停正在执行的进程,将处理机分配给更重要紧迫的那个进程。可以优先处理更紧急的进程,也可实现让各进程按时间片轮流执行的功能(通过时钟中断)。适合于分时操作系统、实时操作系统

  • 进程调度和进程切换
    (1)(狭义的)进程调度:从就绪队列中选择一个要运行的进程
    (2)进程切换:一个进程让出处理机,由另一个进程占用处理机的过程(完成了对原来运行进程各种数据的保存、对新的进程各种数据的恢复)

总结:
1.一个线程是否可被时钟中断抢占?如果是,请说明在什么情况下可被抢占(被动放弃)
是。分给进程的时间片用完、有更紧急的事情需要处理(如I/O中断)、有更高优先级的进程进入就绪队列

2.在非抢占调度方式中,什么情况下正在运行的进程会放弃CPU?(主动放弃)
进程正常终止、运行过程中发生异常而终止、主动阻塞(如等待I/O)

3.什么时候不能进行进程调度
在处理中断的过程中、进程在操作系统内核程序临界区中、原子操作过程中(原语)

三.调度器、闲逛进程

1.什么事件会触发“调度程序”?
创建新进程、进程退出、运行进程阻塞、I/O中断发生(可能唤醒某些阻塞进程)。非抢占式调度策略,只有运行进程阻塞或退出才触发调度程序工作;抢占式调度策略,每个时钟中断或k个时钟中断会触发调度程序工作
2.不支持内核级线程的操作系统,调度程序的处理对象是进程;支持内核级线程的操作系统,调度程序的处理对象是内核线程
3.闲逛进程:没有其他就绪进程时,运行闲逛进程。
特性:优先级最低、可以是0地址指令,占一个完整的指令周期(指令周期末尾例行检查中断)、能耗低

四.调度算法的评价指标

1.CUP利用率:指CPU“忙碌”的时间占总时间的比例。
CUP利用率=忙碌时间/总时间

2.系统吞吐量:单位时间内完成作业的数量
系统吞吐量=总完成作业数/总时间

3.周转时间:从作业被提交给系统开始,到作业完成为止的这段时间间隔。包括作业在外存后备队列上等待作业调度(高级调度)的时间、进程在就绪队列上等待进程调度(低级调度)的时间(就绪态)、进程在CPU上执行的时间(运行态)、进程等待I/O操作完成的时间(阻塞态)

作业周转时间=作业完成时间-作业提交时间

平均周转时间=各作业周转时间之和/作业数

带权周转时间=作业周转时间/作业实际运行的时间

平均带权周转时间=各作业带权周转时间之和/作业数

  • 带权周转时间和周转时间越小越好

4.等待时间:指进程/作业处于等待处理机状态时间之和。等待时间越长,用户满意度越低。

等待时间=周转时间-运行时间-I/O操作时间=(完成时间-到达时间)-运行时间-I/O操作时间

平均等待时间=各作业等待时间之和/作业数

  • 对于进程来说,等待时间就是指进程建立后等待被服务的时间之和,在等待I/O完成的期间其实进程也是在被服务的,所以不计入等待时间。
  • 对于作业来说,不仅要考虑建立进程后的等待时间,还要加上作业在外存后备队列中等待的时间。

5.响应时间:从用户提交请求到首次产生响应所用的时间。

五.调度算法

(一)先来先服务SCFS

先来的先分配处理机,不会导致饥饿,非抢占式的算法

针对:作业调度、进程调度
优点:算法简单、对长作业有利、有利于CPU繁忙型作业(计算型)
缺点:效率低、不利于短作业、不利于I/O繁忙型作业

(二)短作业优先算法SJF

优先选择当前已到达的且预计运行时间最短的进程,会产生“饥饿”现象。SJF(短作业优先)和SPF(短进程优先)是非抢占式的算法。但是也有抢占式的版本——最短剩余时间优先算法(SRTN)

针对:进程调度。(短进程优先用SPF)
优点:平均等待时间、平均周转时间较短(SRTN最短)
缺点:对长作业不利,造成饥饿现象,没有考虑作业的紧迫性,用户可能可以缩短作业预估时间,使得无法做到短作业优先

(三)高响应比优先HRRN

不会导致饥饿,非抢占式的算法
响应比=(等待时间+要求服务时间)/要求服务时间=1+等待时间/要求服务时间

针对:作业调度、进程调度

①等待时间相同情况下,要求服务时间越短响应比越大,有利于短作业进程
②要求服务时间相同,作业响应比由其等待时间决定,等待时间越长响应比越高,实现先来先服务
③对于长作业,作业的响应比可以随等待时间的增加而提高,等待时间足够长时,其响应比可以升到很高,从而获得处理机

以上三类算法一般适用于早期批处理系统

(四)时间片轮转调度算法RR

不会导致饥饿,抢占式算法。
使用与分时系统,使用时间片,就绪进程按照到达先后排成队列,依次在时间片内占用处理机,时间片到达时就释放处理机。时间片选择很重要,过大就变成了先来先服务,过短又变成了短作业优先。

针对:进程调度。进程才能被分配时间片

时间片影响因素:系统响应时间,就绪队列中的进程数目和系统的处理能力

注:①A时间片用完,若进程A仍未执行完,此时有新进程B到达。新进程B进入就绪队列,A再进就绪队列
②若时间片为2,C只用1就完成了运行,则C主动让出处理机,就绪队列的队头元素上处理机

优点:公平、响应快,适用于分时操作系统;
缺点:由于高频率的进程切换,因此有一定开销;不区分任务的紧急程度。

(五)优先级调度算法

产生“饥饿”现象,有抢占式的,也有非抢占式的

分类:
①剥夺型:立即停止当前运行进程,将处理机分配给更高优先级进程
②非剥夺型:等待当前进程运行完成,然后将处理机分配给更高优先级进程

优先级分类:
静态优先级:进程创建后无法对优先级进行修改
动态优先级:可以根据进程运行状态,对进程优先级进行动态调整

优先级设置原则:
系统进程>用户进程
交互型进程>非交互型进程
I/O进程>计算型进程(CPU繁忙型)
前台进程>后台进程

针对:作业调度、进程调度

优点:用优先级区分紧急程度、重要程度,适用于实时操作系统。可灵活地调整对各种作业/进程的偏好程度。
缺点:若源源不断地有高优先级进程到来,则可能导致饥饿

(六)多级反馈队列调度算法

抢占式算法,可能饥饿

①设置多个就绪队列,为每个队列设置不同的优先级,优先级依次递减。
②每个队列中的时间片各不相同,时间片依次递增。
③每个队列按照先来先服务原则进行进程排队,若规定时间片内没有完成,就将进程放入下一级队列。
④只有到高级队列为空的时候,低等级队列才能开始调度。

优点:
①终端型作业用户:短作业优先
②短批处理作业用户:周转时间较短
③长批处理作业用户:前面几个队列得到部分执行,不会长期得不到处理

针对:进程调度

  • 为什么多级反馈队列调度算法能较好地满足各类用户的需要?
    多级反馈队列调度算法能较好地满足各种类型用户的需要。对终端型用户而言,由于他们提交的作业大多属于交互型作业,作业通常比较短小,系统只要能使这些作业在第1级队列所规定的时间片内完成,便可使终端型作业用户感到满意;对于短批处理作业用户而言,它们的作业开始时像终端型作业一样,若仅在第1级队列中执行一个时间片即可完成,便可获得与终端型作业一样的响应时间,对于稍长的作业,通常也只需要在第2级队列和第3级队列中各执行一个时间片即可完成,其周转时间仍然较短;对于长批处理作业用户而言,它的长作业将依次在第1,2,…n级队列中运行,然后按时间片轮转方式运行,用户不用担心其作业长期得不到处理。

以上三类算法适用于交互式系统

(七)多级队列调度

队列之间可采取固定优先级,或时间片划分
①固定优先级:高优先级空时低优先级进程才能被调度
②时间片划分:如三个队列分配时间50%、40%、10%
③各队列可采用不同的调度策略,如:系统进程队列采用优先级调度,交互式队列采用RR,批处理队列采用FCFS

在这里插入图片描述

  • 为什么要进行处理机调度?
    若没有处理机调度,意味着要等到当前运行的进程执行完成后,下一个进程才能执行,而实际情况中,进程时常需要等待一些外部设备的输入,而外部设备的速度与处理机相比是非常缓慢的,若让处理机总是等待外部设备,则对处理机的资源是极大的浪费,从而提高处理机的利用率。用一句话说就是为了合理地处理计算机的软/硬件资源。

  • 调度算法有哪几种?结合第1章学习的分时操作系统和实时操作系统,思考有没有哪种调度算法比较适合这两种操作系统的。
    (1)先来先服务算法、短作业优先算法、优先级调度算法、高响应比优先算法、时间片轮转调度算法、多级反馈队列调度算法
    (2)先来先服务算法和短作业优先算法无法保证及时的接收和处理问题,因此无法保证在规定时间内响应每个用户的需求,也同样无法达到实时操作系统的及时性要求。优先级调度算法按照任务的优先级进行调度,对于更紧急的任务给予更高的优先级,适合实时操作系统
    (3)高响应比优先调度算法、时间片轮转调度算法、多级反馈队列调度算法都能保证每个任务在一定时间内分配到时间片,并轮流占用CPU,适合分时操作系统

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

2-2进程管理-处理机调度 的相关文章

  • 【VS2019】报错:E0349没有与这些操作数匹配的运算符

    报错 xff1a E0349没有与这些操作数匹配的运算符 调试程序遇到该错误 xff0c 特此记录 span class token macro property span class token directive keyword inc
  • 基于docker技术搭建hadoop与mapreduce分布式环境

    基于docker技术搭建hadoop与mapreduce分布式环境 一 安装doker 1 宿主环境确认 如果没有的话 安装lsb relaease工具 apt install lsb release 检查版本 lsb release a
  • GNU Radio3.8创建OOT的详细过程(进阶/C++)

    GNU Radio 学习使用 OOT 系列教程 xff1a GNU Radio3 8创建OOT的详细过程 基础 C 43 43 GNU Radio3 8创建OOT的详细过程 进阶 C 43 43 GNU Radio3 8创建OOT的详细过程
  • 基于docker构建spark运行环境

    基于docker构建spark运行环境 一 安装docker与docker compose 参考之前的实验进行docker和docker compose的安装 二 系统构架图 xff1a 三 安装相关镜像 使用docker hub查找我们需
  • HDFS基本操作

    HDFS基本操作 HDFS的基本命令格式 hdfs dfs cmd lt args gt 注意 xff1a 需要事先将HADOOP HOME bin目录配置进入环境变量 列出当前目录下的文件 hdfs dfs ls 在HDFS创建文件夹 h
  • 使用mllib完成mnist手写识别任务

    使用mllib完成mnist手写识别任务 小提示 xff0c 通过restart命令重启已经退出了的容器 sudo docker restart lt contain id gt 完成识别任务准备工作 从以下网站下载数据集 MNIST手写数
  • npm install 报错 Error: EPERM: operation not permitted, rename

    报错的解决方案 原因1 xff1a 权限不足原因2 xff1a 缓存出错方法1方法2 原因3 xff1a npm版本不够原因4 xff1a 网络不稳定方法1方法2 原因5 xff1a 杀毒软件问题方法1方法2 其他 xff1a 待补充 原因
  • 马原复习知识点背诵-《马克思主义基本原理概论》

    马概复习重点 绪论 1 什么是马克思主义 1 从创造者 继承者的角度讲 马克思主义是由马克思恩格 斯创立的 而由其后各个时代 各个民族的马克思主义者 不断丰富和发展的观点和学说的体系 2 从阶级属性讲 马克思主义是无产阶级争取自身解放和整
  • 深度学习 | 三个概念:Epoch, Batch, Iteration

    转自 xff1a https www jianshu com p 22c50ded4cf7 写在前面 xff1a 在训练神经网络的时候 xff0c 我们难免会看到Batch Epoch和Iteration这几个概念 曾对这几个概念感到模糊
  • OpenStack — Nova

    文章目录 NovaNova架构Nava组件nova apinova computenova conductornova schedulernova novncproxy 创建虚拟机流程 Nova Nova是OpenStack最核心的服务模块
  • 使用Object.key和delete来将对象中值为空的属性删除。

    有些时候 xff0c 我们在接口传值时 xff0c 不需要把值为空的属性传过去 xff0c 即可使用该方法来快速的删除属性 span class token comment 深拷贝对象 xff0c 避免影响页面显示 span span cl
  • docker启动关闭删除所有的容器命令

    1 启动所有容器 docker start docker ps a awk 39 print 1 39 tail n 43 2 2 关闭所有容器 docker stop docker ps a awk 39 print 1 39 tail
  • GNU Radio3.8创建OOT的详细过程(python)

    GNU Radio 学习使用 OOT 系列教程 xff1a GNU Radio3 8创建OOT的详细过程 基础 C 43 43 GNU Radio3 8创建OOT的详细过程 进阶 C 43 43 GNU Radio3 8创建OOT的详细过程
  • 面试必问:从输入URL到页面展示,这中间发生了什么?(详细易懂,条理好记)

    导航流程 xff1a 从输入URL到页面展示 xff0c 这中间发生了什么 xff1f 一 进程介绍 整个过程需要各个进程之间的配合 进程与线程是两个概念 xff0c 程序启动时 xff0c 操作系统为程序创建内存 xff0c 用以存放代码
  • MATLAB神经网络工具箱函数各种图的解释

    Neural Network 该部分展示了神经网络的结构 xff0c 从结构图中可以看出该网络有三个隐含层 xff0c 神经元个数分别为9个 8个 7个 Algorithms 该部分展示了该网络所使用的训练算法 xff0c 可以看出 Dat
  • gazebo加载world模型

    使用launch文件启动gazebo加载world模型 xff0c 或者说是将world模型加入gazebo仿真器中作为环境 first xff0c 我们应该告诉gazebo 要加载的world文件放在哪里 并通过arg标签 xff0c 设
  • px4无人机报avionics power low

    px4无人机报avionics power low xff0c 将无人机连接qgc中 xff0c 将CBRK SUPPLY参数设为最大值即可
  • QGC地面站PC桥接px4(QGC+wifi+机载计算机+px4)

    QGC地面站PC桥接px4 xff08 QGC 43 wifi 43 机载计算机 43 px4 xff09 1 在机载计算机上安装ubuntu2 安装ros3 机载计算机上安装mavros1安装mavros2 安装安装mavros相关的 g
  • 消除Gazebo模型抖动

    自己创建的模型导入到gazebo中往往会不停的跳动 xff0c 一般是由于转动惯量设置不正确导致的 xff0c 可以将转动惯量注释掉 如果注释点后还是有这种情况 xff0c 需要设置非零的min depth xff0c 模型通常会稳定 将其
  • px4报dangerously low battery! shutting system down.

    这两天用px4突然开始报dangerously low battery shutting system down xff0c 从px4 github项目上看到是因为telem接口中的tx和rx相连了 xff0c mavlink的消息从px4

随机推荐

  • realsense t265测试中的一些小问题

    realsense t265测试中出现的一些小问题 环境 xff1a Ubuntu18 04 内核 xff1a 5 4 官方教程 xff1a https github com IntelRealSense realsense ros 测试过
  • 查看T265配置信息及参数

    查看T265配置信息及参数 1 验证SDK安装成功 安装完sdk后 xff0c 终端里运行 realsense viewer 查看相机输出的图像和imu信息 xff0c 可以验证sdk是否安装成功 2 查看T265配置信息 rs enume
  • 修改vins-fusion中T265的相机模型文件

    修改vins fusion中T265的相机模型文件 在使用T265跑vins fusion的过程中 xff0c 首先需要设置相机相关的配置文件 xff0c 网上给出的相关测试教程都没有很明白的说明这一部分 xff0c 都将T265作为了ME
  • GNU Radio3.8:创建自定义的QPSK块(C++)

    GNU Radio 学习使用 OOT 系列教程 xff1a GNU Radio3 8创建OOT的详细过程 基础 C 43 43 GNU Radio3 8创建OOT的详细过程 进阶 C 43 43 GNU Radio3 8创建OOT的详细过程
  • NUC主机部署px4+T265

    NUC主机部署px4 43 T265 安装T265驱动及realsense ros安装mavros安装VIO测试 px4使用T265做视觉定位在官方指导手册上给出了相关的教程 xff0c 但有些细节部分比较蛋疼 xff0c 需要修改 xff
  • 安装evo出现import any qt binding错误

    安装evo出现error Failed to import any qt binding 需要测评无人机轨迹精度 xff0c 使用evo工具 xff0c 安装可以参考github上给出的流程 xff0c 我选的是从源文件安装 xff0c 在
  • rosbag2csv

    1 record bag rosbag record O topic name group 2 rosbag to csv rostopic echo b bag name bag p topic name gt csv name csv
  • ubuntu18.04使用anaconda3配置yolov5

    ubuntu18 04使用anaconda3配置yolov5 1 anaconda官网下载相关的sh文件 在sh文件所在的文件夹里打开终端 使用bash命令 运行sh文件安装anaconda 在安装的过程中首先有一个确定anaconda的安
  • 无人机仿真搭建:ROS,Gazebo,SITL,MAVROS,PX4

    写在前面 最近一直在搭建无人机仿真的环境 xff0c 系统都卸载安装了很多次才安装好 xff0c 所以写下这篇博客来记录一下 xff0c 万一以后还要再搭也可以有个参考 xff0c 也可以给大家做个参考 这个是结合我自己系统来安装的 xff
  • C++ 类的构造函数之冒号初始化语法

    在实现类的时候往往需要写一个构造函数用于初始化对象 xff0c 出去一般的函数语法之外 xff0c 还有一种冒号语法 比如 xff0c 下面两种构造函数的写法近似相同 xff1a 常规方法 class A private int index
  • educoder--MapReduce基础实战各关卡通关答案

    第1关 xff1a 成绩统计 任务描述 相关知识 什么是MapReduce 如何使用MapReduce进行运算 代码解释 编程要求 测试说明 任务描述 本关任务 xff1a 使用Map Reduce计算班级中年龄最大的学生 相关知识 为了完
  • Could NOT find ddynamic_reconfigure

    下载ddynamic reconfigure的package 链接https github com pal robotics ddynamic reconfigure tree kinetic devel 解压到catkin ws src空
  • 一位工作了10年的C++程序员总结出这些忠告

    1 可以考虑先学习C 大多数时候 xff0c 我们学习语言的目的 xff0c 不是为了成为一个语言专家 xff0c 而是希望成为一个解决问题的专家 做一个有用的程序员 xff0c 做一个赚钱的程序员 我们的价值 xff0c 将体现在客户价值
  • 新手程序员必学的代码编程技巧

    程序员往往渴望加入的是一支 30 的时间在写代码 xff0c 而70 的时间在喝着咖啡讨论着如何将产品做好 的团队 软件工作应该成为一项技术和艺术融合的高智力活动 xff0c 而项目经理应该是一个高度理解质量 范围和进度客观规律的明白人 x
  • 数学之美—细数 傅里叶变换 原理

    目录 一 傅里叶级数 xff08 Fourier Series FS xff09 的实数域表示 二 傅里叶级数 xff08 Fourier Series FS xff09 的复数域表示 三 傅里叶变换 xff08 FT xff09 的引出
  • C++小知识01 —— 0、‘0’、“0”、“\0”、‘\0’、NULL和nullptr

    可能对于才学完C 的初学者来说 这些概念都很简单 但是把它们放在一起 就真的真的给整不会了 其中最容易混淆的有单引号与双引号的用法 还有NULL与nullptr的用法 下面我会依次用代码文字结合的形式给大家讲解 0 这个就很简单 它就是数字
  • 如何解决Git代码冲突?

    本文主要用的是vscode工具 1 为什么会出现代码冲突问题呢 xff1f 可以理解为就是同一时间几个人更改同一个文件 xff0c git 不知道该听谁的 xff0c 所以就报冲突 xff0c 让开发者自己去选择 xff0c 选取到底用哪个
  • 算法优化工程师

    嵌入式算法移植优化 嵌入式算法移植优化 CUDA编程 嵌入式算法移植优化 CPU GPU TPU NPU都是什么 嵌入式算法移植优化 模型压缩与剪枝 嵌入式算法移植优化 pthread 嵌入式算法移植优化 SIMD编程 xff08 单指令流
  • Elasticsearch7.8.0启动报jdk版本错误

    因为7 8 0版本自带jdk12 xff0c 就可能会出现自己linux环境下的jdk版本较低 启动时老报错 xff0c 这时候就需要干掉当前jdk xff0c 然后启动elasticsearch xff0c 让他去匹配自带的jdk 使用命
  • 2-2进程管理-处理机调度

    文章目录 一 调度的层次二 进程调度的时机 切换与过程 调度方式三 调度器 闲逛进程四 调度算法的评价指标五 调度算法 xff08 一 xff09 先来先服务SCFS xff08 二 xff09 短作业优先算法SJF xff08 三 xff