[操作系统笔记]处理机调度

news2024/11/13 9:04:36

在这里插入图片描述

调度算法

名称英文作业调度进程调度说明特点
先来先服务First-come first-served, FCFS适用适用按作业到达先后顺序(即优先考虑等待时间最长的)非抢占式
短作业优先short job first, SJF适用适用作业越短(即运行时间越短)优先级越高非抢占式(有抢占式)
优先级调度算法priority-scheduling algorithm, PSA适用适用优先级由作业紧迫程度决定抢占式和非抢占式两种
高响应比优先调度算法Highest Response Ratio Next, HRRN适用优先级动态改变且与时间关联,响应比的计算增加系统开销非抢占式
时间片轮转Round Robin, RR适用就绪队列的进程每次运行一个时间片抢占式
多级反馈队列调度算法multi level feedback queue, MLFQ适用多个优先级队列,每个队列采用FCFS,优先级高的队列空了再从低的队列调度抢占式

*SJF算法有抢占式版本,后文可见


基于公平性角度考虑还有保证调度算法公平分享调度算法

保证调度算法的目标是:保证对于n个进程,每个进程都获得1/n的处理机时间

平分享调度算法是针对用户而言的。若用户1有4个进程而用户二有1个,如果按RR调度,用户1则占用了80%的处理机时间,而用户2才占用20%。该算法的目的是确保用户1和用户2占用的处理机时间一样,而不是进程。


系统采用调度算法未必只有一个,可以结合使用

例如MLFQ就可以为每个队列使用FCFS

各算法详细说明

FCFS(最简单的非抢占式调度算法)

对短作业不利,对长作业有利

这里的是否有利的衡量标准是带权周转时间。只考虑等待时间意味着对长作业有利,只考虑运行时间则对短作业有利,

这个思路就是一个队列,队首是下一次要执行的,而要后加入的进入队尾。

具有Convoy 效应,又作护航效应:所有其他进程都等待一个大进程释放CPU资源。

SJF(具有抢占式版本SRTF)

可能存在饥饿问题(长进程得不到处理),具有抢占和非抢占两种方式

常用于长程调度

优点是在所有调度算法中平均等待时间最短,缺点是实际不可行(因为不知道执行时间),当然,可以用先前的估算。


Shortest Remaining Time First (SRTF)是SJF的抢占式版本,其中处理器被分配给最接近完成的作业。 但开销也更多。

PSA

为了照顾紧迫型进程,应采用PSA

貌似也有人管这个叫PR

可以模拟其他调度算法

HRRN

响应比的额外计算增加开销,但是避免了长作业饥饿的问题

优先权 = 等待时间 + 要求服务时间 要求服务时间 = 响应时间 要求服务时间 优先权=\frac{等待时间+要求服务时间}{要求服务时间}=\frac{响应时间}{要求服务时间} 优先权=要求服务时间等待时间+要求服务时间=要求服务时间响应时间

RR

分时系统一般采用RR

时间片太大,意味着每个进程都能在一轮执行完毕,则退化为FCFS。

上下文切换开销大。

新创建的进程被添加到就绪队列的末尾(有点像FCFS)

某种程度上算是FCFS的抢占式版本

MLFQ

只有当前一级别队列空时,才去调度后一级别队列

较低优先级队列中的进程可能会由于一些短进程占用所有 CPU 时间而遭受饥饿。

上述问题可以通过定期提高所有进程的优先级并将它们全部放入最高优先级队列中解决。

关键知识点

抢占与非抢占区别

抢占意味着可以被中断,非抢占意味着只要执行了就一定能执行完。

非抢占式开销小,实现简单。

在抢占式调度中,调度程序可根据某种原则暂停某个正在执行的进程,将已分配给它的CPU重新分配给另一进程。这种方式比较复杂,系统开销大。进程切换频繁,但是可防止单一进程长时间独占CPU。

主要原则有:

  1. 优先权原则
  2. 短进程优先原则
  3. 时间片原则

在非抢占式调度方式中,引起进程调度的原因有:

  1. 正在执行的进程执行完毕,或因发生某事件而使其无法执行
  2. 正在执行的进程因提出I/O请求而暂停执行
  3. 进程通信/同步过程执行了某种原语(如block)

非抢占式调度方式是进程主动让出,而抢占式由调度程序去操作它让出

各类“时间”

就绪队列里的是进程,不是作业

到达时间(Arrival Time):进程进入就绪队列的时间

运行时间(Burst Time/Execution time/Running time):进程在 CPU 上执行所需的时间,在执行进程之前无法预先知道该进程的运行时间。

周转时间(Turn Around Time):进程从提交到运行结束的全部时间(进程花费的总时间)

等待时间(Waiting Time):进程等待调度(没有运行)的时间片总和(等待获取CPU的时间)

响应时间(Response Time):从进程提交到首次运行的时间段(首次运行不意味着运行完毕)

带权周转时间:周转时间/执行时间


响应时间<=等待时间

周转时间=等待时间+运行时间

周转时间=完成时间-等待时间

两道时间计算题解析

假设一个系统中有3个进程,到达时间依次为0,1,3。运行时间依次为3、5和2。若按照时间片轮转(时间片为2)调度算法调度CPU,那么各进程的平均周转时间为:____

6

在这里插入图片描述

其中竖着的黑线意思是到达时间,不难看出(7+3+9)/3≈6.3≈6

另外该图亦体现出RR很重要的一点:当时间片未用完且仅进程结束,时间片也会终止,进行下一轮


假设一个系统中有5个进程,它们到达的时间依次为0、1、2、3和4,运行时间依次为2、3、2、4和1,优先数分别为3、4、2、1、5。若按照非抢占优先数调度算法(优先数小则优先级高)调度CPU,那么各进程的平均周转时间为:____

5.4

先明确一点:非抢占式,也就是每个进程只要运行就能一次运行完,不会被中断。

在这里插入图片描述
(2+10+2+5+8)/5=5.4

短程调度和长程调度之差异

短程调度:频率高、速度快、开销小
长程调度:频率低、速度慢、开销大

*长程调度主要用于多道批处理系统,分时和实时系统不设置这个

CPU调度时机

从运行转到等待(非抢占式)

从运行转到就绪(抢占式)

从等待转到就绪(抢占式)

终止运行(非抢占式)

调度层次

名字又作又作调度对象
高级调度长程调度作业调度作业
中级调度内存调度进程
低级调度短程调度进程调度进程(或内核级线程)

中程调度将进程在内存和外存间换进换出(暂时不能用的进程调入外存,即挂起),以提高内存利用率。

习题

下列进度调度算法中,( )可能出现进程长期得不到运行的情况。

A、静态优先数算法

B、抢占式短作业优先算法

C、时间片轮转调度算法

D、先来先服务算法

A


抢占式CPU调度可能发生在一个进程()时。

A、从运行转到就绪

B、从运行转到等待

C、从运行转到终止

D、新建进程

A

其实意思是,从运行态,发生了抢占之后,会到哪个状态,显然是就绪态。


当系统中( )时,将不会引起系统执行进程调度原语。

A、一个新进程被创建

B、在非抢占调度中,进程A正在运行而进程B恰好被唤醒

C、当前进程执行了P操作

D、分时系统中的时间片用完

B

当然,对于A,如果当前系统的是抢占式,新进程优先级又是最高的,那其实A也不对,当然,答案给的是B。二来新进程被创建,如果是创建->静止就绪,那么被安置在外存,不参与调度(汤晓丹计算机操作系统第四版P43页上方)

B的唤醒,只是说它在就绪队列排好队了,但是不涉及调度

P操作是:当进程在等待资源的时候执行p操作,将信号量减1,如果执行减1后的信号量大于等于0,则该进程则进入执行环节,否则会继续等待。

参考与一些有学习价值的网页

geekforgeeks

[易百教程]操作系统教程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2323.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot异常:Process finished with exit code 0 | Tomcat服务没有启动 | 无法通过浏览器访问

错误信息 启动springBoot项目后&#xff0c;打印信息如下 意思是&#xff1a;我该执行的程序已执行完毕&#xff0c;并正常退出。 希望提示&#xff1a;打印Tomcat已在8080端口启动&#xff0c;可以通过浏览器访问&#xff0c;如果是这个问题&#xff0c;继续向下浏览&#xf…

标准库类型string和vector

一、命名空间 std::cinstd就是命名空间&#xff0c; 这个的含义是 &#xff1a;编译器应该从操作符左侧的名字所示的作用域std中去寻找cin。 另一种方式就是在开头显式进行说明&#xff1a; using std::cin;这样一来后续就不用再去在每条语句中显式说明了。 需要注意的是&…

微信小程序实战 wx.showNavigationBarLoading(),下拉动画配置无效

文章目录前情提要原因分析实战解析最后前情提要 下拉刷新一定是移动端常用操作&#xff0c;微信小程序官方集成了下拉刷新监听函数onPullDownRefresh(),以及显示下拉动画apiwx.showNavigationBarLoading(),但是我们在初次接触这个api发现&#xff0c;调用该函数动画不显示&…

头歌-信息安全技术-Spectre侧信道攻击过程验证

头歌-信息安全技术-Spectre侧信道攻击过程验证一、第1关&#xff1a;Cache vs Memory1、编程要求2、评测代码二、第2关&#xff1a;基于FlushReload的侧信道实现1、编程要求2、评测代码三、第3关&#xff1a;Spectre预测执行1、编程要求2、评测代码四、第4关&#xff1a;Spectr…

【Unity】关于升级到2021.3.12之后URP编译错误的问题

前几天&#xff0c;我一时兴起&#xff0c;把Unity从2021.3.11 LTS 升级到 2021.3.12 LTS&#xff0c;本来以为不会有啥区别&#xff0c;然后意想不到的是&#xff0c;居然出现了编译错误&#xff1a; 我一开始以为这个就是我的工程设置有问题&#xff0c;然后我就就新…

前端面试之Vue专题

目录 前言 MVVM模式 Vue的响应式原理 路由守卫 前言 网上有许多前端八股文&#xff0c;但是缺少便于理解的说明和案例&#xff0c;需要自行查阅资料。这篇文章我就按照面试的高频题来记录自己的理解和实操。 MVVM模式 一、三者含义 M是Model&#xff0c;数据模型&#xf…

非项目活动的时间怎么跟踪?

会计、审计、合规和专业服务企业通常需要跟踪花费在项目和非项目上的时间以进行报告。员工可以使用8Manage工时表这样的工具来获取与项目和非项目任务相关的工作时间&#xff0c;并记录管理时间。 非项目时间类别确定在项目工作之外发生的不同类型的活动。你可以在工时表解决方…

【网络篇】第六篇——网络套接字编程(二)(UDP详解)

基于UDP协议的套接字程序 服务端 服务端创建套接字 服务的绑定 字符串IP VS 整数IP 运行服务器 客户端 客户端创建套接字 客户端绑定 启动客户端 本地测试 INADDR_ANY 简易的回声服务器 网络测试 基于UDP协议的套接字程序 服务端 服务端创建套接字 我们把服务…

重学Android基础系列篇(三):架构动态编程技术原理

前言 本系列文章主要是汇总了一下大佬们的技术文章&#xff0c;属于Android基础部分&#xff0c;作为一名合格的安卓开发工程师&#xff0c;咱们肯定要熟练掌握java和android&#xff0c;本期就来说说这些~ [非商业用途,如有侵权,请告知我,我会删除] DD一下&#xff1a; And…

基于形状的匹配提纲

关键&#xff1a;形状&#xff0c;其实就是canny找出来的线条集合 1&#xff0c;canny线条 2&#xff0c;模板的线条&#xff08;基于canny&#xff09; 3&#xff0c;高斯金字塔&#xff0c;加速高斯法 4&#xff0c;没有旋转和尺度时&#xff0c;匹配一个有得分的结果&am…

Linux-vim使用

目录 基本vim的基本操作&#xff1a; 命令模式&#xff1a; 光标定位&#xff1a; $&#xff1a;光标定位到行右&#xff1a; ^&#xff1a;光标定位到左&#xff1a; shiftgG&#xff1a;光标定位到底部 gg&#xff1a;回到顶部 nshiftg表示跳转光标到第n行 文本复制相关…

输入学生的信息学号、姓名、语文成绩、数学成绩、英语成绩,计算总分、并按总分成绩排序,再写到另一个txt文件中(python)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 题目&#xff1a; 代码&#xff1a; 1.提前写入标题栏&#xff08;学号、姓名、语文、数学、英语、总分&#xff09; 2.再写入学生的信息 3.读取score2.txt文件 4.…

机器学习西瓜书学习记录-第五章 神经网络

第5章 神经网络 5.1神经元模型 神经网络中最基本的成分是神经元模型。 “M-P神经元模型”&#xff0c;又称“阈值逻辑单元” 在模型中&#xff0c;神经元接收到来自n个其他神经元传递过来的输入信号&#xff0c;这些输入信号通过带权重的连接进行传递&#xff0c;神经元接收到…

分分钟让你学会栈和队列

数据结构——栈和队列 &#x1f3d6;️专题&#xff1a;数据结构 &#x1f648;作者&#xff1a;暴躁小程序猿 ⛺简介&#xff1a;双非本科大二小菜鸟一枚&#xff0c;希望我的博客可以对大家有所帮助 文章目录数据结构——栈和队列前言一、什么是栈&#xff1f;二、栈的相关概…

计算机毕设(附源码)JAVA-SSM蓟县农家乐网站

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

算法竞赛进阶指南 搜索 0x26 广搜变形

双端队列BFS 在最基本的广度优先搜索中&#xff0c;每次沿着分支的扩展都记为“一步”&#xff0c;我们通过逐层搜索&#xff0c;解决了求从起始状态到每个状态的最少步数的问题。这其实等价于在一张边权均为1的图上执行广度优先遍历&#xff0c;求出每个点相对于起点的最短距…

程序员的数学好难学?一切从基础开始!

数学知识对编程很有用&#xff0c;但是很多写给程序员的数学书都比较难。我们为什么不从基础的数学知识开始学习呢&#xff1f; 程序员的数学基础 Python实战 1.本书的重点不在于如何解题&#xff0c;而在于帮助读者在计算机世界里如何利用数学解决算法问题&#xff0c;让程序…

WinForm应用实战开发指南 - 教你如何实现表头的全选操作?

WinForms分页控件&#xff0c;在很多场合都需要用到&#xff0c;由于整合较多的功能操作&#xff0c;使用起来效果更好&#xff0c;界面统一性也比较一致。其中的勾选操作&#xff0c;在有些场合下&#xff0c;也是比较有用的&#xff0c;因此提供该功能的整合。 PS&#xff1…

基于改进神经网络的风电功率预测(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑…

【K8S系列】Kubernetes 之kubectl 常用命令汇总

目录 一、kubetcl简单介绍 二、命令介绍 详细介绍&#xff1a; 三、部分命令详细介绍 3.1 create 3.2 get 3.3 describe 3.4 rolling-update 3.5 exec 3.6 log kubectl 是 Kubernetes 自带的客户端&#xff0c;可以用它来直接操作 Kubernetes 集群。 日常在使用 Kuber…