OS复习笔记ch9-1

单处理器调度

调度类型

  1. 主要类型
    image.png
    长程调度:决定将哪个进程放入进程池中
    中程调度:决定将哪些进程部分或者全部放入内存中
    短程调度:决定哪个空闲进程上处理机
    I/O调度:决定哪个进程的I/O请求被可用的I/O设备处理

  2. 处理器调度和进程状态变化
    调度的主要目的是不断安排进程在处理器上执行
    image.png

  • 长程调度主要是创建作业: 新建→就绪(批处理作业会比较明显)
  • 中程调度主要是全部或者部分内存空间换进换出: 阻塞/挂起→就绪
  • 短程调度主要是选择进程获得处理器运行: 就绪→运行

层次越往下发生的频率越高(一般时间片在几十到上百ms,短程调度会非常频繁)

  1. 队列图
    image.png
    从某种意义上,调度是管理队列以最小化排队延迟和优化性能的问题。现在的个人计算机以交互式为主(interactive user),需要立刻创建任务并响应,一般都不是批处理任务,所以本章的重点在于短程调度(低级/微观)。

了解一些短程调度的条件:当发生可能导致当前进程阻塞或可能提供机会抢占当前正在运行的进程以支持另一个进程的事件时调用

  • 时钟中断:时间片到了,需要进程切换
  • I/O 中断:进程发出I/O请求需要从运行→阻塞,进程发生切换
  • 系统调用:例如exec(),进程执行过程中执行其他程序,需要进程切换
  • 信号:例如Ctrl+C,发送kill信号杀死当前进程

调度准则

  • 定量分析
    了解一下周转时间、响应时间、截止时间等概念,主要用于评价调度算法的性能
    image.png
    由于考虑系统开销的时间所以Tr = Ts + sometime。所以Tw不小于1
    响应时间多指进程第一次被调度,获得处理器的时间。而交互式的响应时间一般是在2s以内。

  • 定性分析
    主要是对于公平性进行分析(有无死锁和饥饿等)
    image.png

优先级

在就绪队列按照优先级排列,进程调度按照优先级调度
Unix使用位图实现常数级的速度找到队列的第一个可调度对象。位图(Bitmap)是一种特殊的数据结构,它使用位(Bit)序列来表示信息。

  1. 静态优先级
    创建进程的同时确定,一般为一个整数。会根据进程类型,资源需求和用户要求变化。

一般给与I/O进程更高优先权,防止CPU型进程获取CPU时间过长,使得所有资源可以均衡利用,进程调度也可以更加公平。

  1. 动态优先级
    image.png

  2. 选择函数
    image.png

这里有三个参考指标w(等待时间)、e(执行时间)、s(所需要的时间)

调度策略

两种方式

调度策略主要分为两种方式:抢占式和非抢占式调度
非抢占式调度:运行态进程一直执行直到终止或阻塞
抢占式调度:运行态进程在执行的过程中可以被剥夺处理机,强制进程切换

抢占原则

  • 优先权原则
  • 短作业/进程优先原则
  • 时间片原则
    折中方式:
  • 内核不允许抢占
  • 其他可以抢占

算法思路

我们先假设一个进程队列
image.png
第一列是进程名,第二列是进程的到达时间,第三列是需要占用的CPU时间

(1)FCFS(先来先服务)
image.png
顾名思义,FCFS就是先到的进程先服务,服务完了继续下一个,按照先来后到的顺序。
先来先到是一种基础调度策略,我们在很多的算法中都有所涉及,但是性能不是很好。

image.png
在这个例子中,由于A进程一开始占用了大量的CPU时间,导致了B和C等待的时间过长,所以平均周转时间很大。
image.png

长进程/作业占据CPU的时间过长,短作业处于劣势(一直等待,即护航效应)
同理CPU型进程长时间占据CPU,导致I/O型进程很难进行完,容易导致饥饿。

(2)时间片轮转(round robin)

  • 基于抢占式的调度策略
  • 时钟中断定期产生
  • 中断发生就需要回到就绪队列,然后等待调度

如图示的进程到来和执行时间

image.png
时间片调度策略还是基于先来先服务,也就是优先选择在队列中队首的进程执行
跟FCFS不同的是,进程的时间片到了就要下处理机,放到就绪队列末尾,选择队首的进程继续执行。
不过要注意一下:可能在同一时刻,刚好上一个进程执行完了,并且有一个新的进程要进来,这时把刚执行完的放到最后,新来的排倒数第二。

这里的q = 1表示时间片为1,时间片小能快速响应进程的服务,但是切换的开销比较大
相反q = 4能减小进程切换的系统开销,但反应速度下降

对于I/O型进程,会因为频繁阻塞而重新就绪然后运行,在执行过程中非常不利,有学者就提出来VRR算法

image.png

使用一个AUX队列(优先级高于普通的就绪队列中的进程),提高公平性

(3)最短时间进程优先(SPN/SJF)
基于短作业优先策略,选预计执行时间最短的进程
image.png
image.png

image.png

  • 如图,改善平均周转时间和平均带权周转时间;
  • 难以准确估计进程执行时间,影响调度性能;
  • 有利于短进程,对长进程非常不利,可能饥饿(短进程源源不断到达,长进程不断靠后)

(4)最短剩余时间优先(SRT)
回顾我们之前发生死锁的解决方案,就是要及时撤销一个没有执行多少时间,剩余执行时间最长的进程,减少对于进程自身损失。
抢占式调度算法:当有新进程到来时,SRT根据每个进程的剩余时间多少选择进程剩余执行时间最短的运行,偏向于短进程。
image.png

在10s的时候,B和D都是剩余5个时间片,OS会优先调度B,因为TLB和cache中可能会有B的痕迹,可以更加高效的执行。

(5)最高响应比优先(HRRN)

  • R = (W + S)/ S,W表示wait等待时间,而S表示service是服务时间
  • 基于非抢占式策略(Nonpreemptive policy)
  • FCFS和SPN的折中:需估计处理时间
    image.png
    如图所示,A先来先执行,然后是B执行完,此次是C、D、E都来了,此时就要计算R值
    t = 9:RC=1+5/4
    RD=1+3/5
    RE=1+1/2
    选择最高响应比的C执行
    t = 13:RD=1+7/5
    RE=1+5/2
    选择最高响应比的E执行

HRRN算法一般不会产生饥饿,可以把R看成是进程的某种优先级

(6)优先级调度
优先级调度算法又称优先权调度算法,该算法既可以用于作业调度,也可以用于进程调度,该算法中的优先级用于描述作业运行的紧迫程度。

在作业调度中,优先级调度算法每次从后备作业队列中选择优先级最髙的一个或几个作业,将它们调入内存,分配必要的资源,创建进程并放入就绪队列。在进程调度中,优先级调度算法每次从就绪队列中选择优先级最高的进程,将处理机分配给它,使之投入运行。

假设有四个作业的单道系统,它们的提交、运行时间如下表所示(时间单位:小时,以十进制进行计算,当前时刻是8.0)。若采用基于优先权的抢占式调度算法(优先数越小优先级越高),试回答:作业应以怎样的顺序调度?给出分析过程,并计算平均带权周转时间。
image.png


A先来先执行,执行到8.5s的时候B来了,比较两者优先级,B的优先级更低所以A继续执行。
9.0s的时候C到来,由于C的优先级更高,所以A下处理机,C上处理机执行。以此类推,得到如下的时间表:

作业号到达时间运行时间优先数开始时间完成时间周转时间带权周转时间
A8.02.048.010.22.21.1
B8.50.5611.211.73.26.4
C9.00.229.09.20.21
D9.51.0510.211.21.71.7

如上表所示,调度顺序为A→C→D→B,平均带权周转时间为2.55小时。
实际上,优先权调度可能会不公平,较低优先级的作业可能会长时间等待,导致饥饿问题。在上述调度顺序中,作业B的到达时间比较早,执行时间也较短,但是由于优先级低最后一个执行,导致带权周转时间最大。

(7)多级反馈队列算法(MLFQ)–了解即可

问题背景:如何估计处理时间,很难让终端用户来预估每一个进程的执行时间。
核心思想:基于进程运行的过去信息来预估之后的大致运行时间,目前的OS都是基于MLFQ的优化和完善

基于优先级的抢占式和时间片的策略,优化的规则如下

  1. Rule 1: If Priority(A) > Priority(B), A runs (B doesn’t).
  2. Rule 2: If Priority(A) = Priority(B), A & B run in round-robin fashion using the time slice (quantum length) of the given queue.
  3. Rule 3: When a job enters the system, it is placed at the highest priority (the topmost queue).
  4. Rule 4: Once a job uses up its time allotment at a given level (regardless of how many times it has given up the CPU), its priority is reduced (it moves down one queue).(解决I/O型进程的问题)
  5. Rule 5: After some time period S, move all the jobs in the system to the topmost queue.(解决饥饿问题)
    image.png

优点:

  • 为提高系统吞吐量和缩短平均周转时间而照顾短进程
  • 为获得较好的I/O设备利用率和缩短响应时间而照顾I/O型进程
  • 不必估计进程的执行时间,动态调节

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

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

相关文章

HTML中的<img>标签使用指南

在HTML中&#xff0c;<img>标签用于嵌入图片。它是一个自闭合标签&#xff0c;意味着它没有结束标签。<img>标签的属性可以控制图片的显示方式和来源。以下是<img>标签的使用和属性的详细介绍。 <img>标签的基本用法 基本的<img>标签只需要src…

jupyter notebook中使用不同的anaconda环境及常用conda命令

conda命令 在jupyter notebook中使用不同的anaconda环境其他常用conda命令 在jupyter notebook中使用不同的anaconda环境 创建环境 myenvname 需替换为自己的环境名称 conda create --name myenvname python3.7激活环境 conda activate myenvname 在该环境中安装Jupyter N…

java8 树类型转换

/*** 创建树** param list 列表* param parentRoot 父根* return {link List}<{link TreeLabelDto}>*/ public static List<TreeLabelDto> createTree(List<TreeLabelDto> list, String parentRoot) {Map<String, List<TreeLabelDto>> roo…

springboot原理篇-springboot

springboot原理篇-springboot&#xff08;三&#xff09; 一、起步依赖 虽然我是直接学习springboot的&#xff0c;没有经历过使用spring开发&#xff0c;但是鉴于我还学习了c,对依赖这方面真的一言难尽&#xff01;springboot起步依赖解决依赖问题我实在是羡慕&#xff01; 直…

第 18章 安全架构设计理论与实践

安全架构是架构面向安全性方向上的一种细分&#xff0c;可关注三个安全方面&#xff0c;即产品安全架构、安全技术体系架构和审计架构&#xff0c;这三个方面可组成三道安全防线。本章主要分析安全威胁、介绍安全模型&#xff0c;在此基础上&#xff0c;就系统、信息、网络和数…

mac m芯片安装win11遇坑

mac m芯片安装win11遇坑 1、下载arm架构镜像 磁力链接&#xff1a; magnet:?xturn:btih:e8c15208116083660709eac9aee124e025c01447&dnSW_DVD9_Win_Pro_11_22H2_64ARM_ChnSimp_Pro_Ent_EDU_N_MLF_X23-12755.ISO&xl57198960642、使用VMWare Fusion安装&#xff0c;启…

element Steps 步骤条无法设置单击事件

原因&#xff1a;vue封装click方法阻止了element组件的原DOM事件 解决方案 为 click方法 添加修饰符 native&#xff0c;click.native <el-steps :active"1"><el-step title"步骤 1" description"这是一段很长很长很长的描述性文字" cl…

从0开始理解DevOps

目录 一、DevOps背景 二、DevOps介绍 DevOps 组成 三、Jenkins Jenkins 工作流程 四、云原生与DevOps 相信你一定听过 DevOps 这个词&#xff0c;那它到底是什么呢&#xff1f;为什么越来越多的互联网企业都在追随使用它&#xff1f;它与云原生有什么关系&#xff1f;本文将…

VRChat 2024年裁员原因与背景深度分析

VRChat&#xff0c;作为2022年元宇宙/VR社交领域的巨头&#xff0c;近期在2024年宣布裁员计划&#xff0c;其背后原因和背景值得业界尤其是仍在纯元宇宙虚拟空间创业的同仁们重点关注。 一、创始人决策失误 根据CEO的邮件披露&#xff0c;VRChat的创始人因缺乏经验和过度自信…

Java 桥接模式(Bridge Pattern)是设计模式中的一种结构型设计模式,桥接模式的核心思想是将抽象与实现解耦

桥接模式&#xff08;Bridge Pattern&#xff09;是一种结构型设计模式&#xff0c;它将抽象部分与它的实现部分分离&#xff0c;使它们都可以独立地变化。桥接模式的核心思想是将抽象与实现解耦&#xff0c;使得它们可以独立扩展。 在桥接模式中&#xff0c;通常包含以下四个…

八股两场合集

Java 语言有哪些特点?(基本概念) JVM vs JDK vs JRE Java为什么半编译半解释语言 continuexxx的区别 finalxxxx的区别(finalize不熟悉) 成变和成变的区别 重载和重写有什么区别 字符型常量与字符串常量区别(卡顿,2字节) 深拷贝与浅拷贝的区别,引用拷贝了解吗(不了解引…

MySQL之优化服务器设置(四)

优化服务器设置 InnoDB的IO配置 双写缓冲(Doublewrite Buffer) InnoDB用双写缓冲来避免页没写完整所导致的数据损坏。当一个磁盘写操作不能完整地完成时&#xff0c;不完整的页写入就可能发生&#xff0c;16KB的页可能只有一部分被写到磁盘上。有多种多样的原因(崩溃、Bug&am…

【纯干货级教程】深度学习根据loss曲线进行分析调参

相信很多刚刚接触目标检测系列算法小伙伴跑深度学习算法时会有许多困惑&#xff0c;比如训练得出的loss曲线有什么意义&#xff1f;训练的一些参数要如何设置选择&#xff1f;选择哪个算法模型作为baseline、选择哪个参数量/复杂度/深度的模型进行训练最为合适&#xff1f; 本…

生成和链接动态库

生成和链接动态库 在Linux和windows中的动态库是不一样的 linux 的动态库不需要设置导入导出符号&#xff0c;以.os为后缀windows中需要设置导入和导出符号.lib&#xff0c;以及动态库的后缀是dll 1、windows环境 1、创建动态库 项目结构 CMakeLists.txt cmake_minimum_re…

如何使用 pip 卸载所有已安装的 Python 包?

在开发过程中,我们可能会安装许多 Python 包,有时需要彻底清理环境,以便从头开始或者解决冲突问题。下面将介绍如何使用 pip 命令卸载所有已安装的 Python 包。 一、列出所有已安装的包 首先,需要列出当前环境中所有已安装的包。使用以下命令: pip freeze这将输出所有已…

使用Ventoy 替代Win_To_Go更好的随身系统

Ventoy支持在物理机上直接启动安装了 Linux/Windows 系统的 磁盘映像文件 。 系统是在真实物理机上运行&#xff0c;并不是在虚拟机里运行&#xff0c;没有性能损失。支持 Legacy BIOS 和 UEFI 模式。支持从任意磁盘启动磁盘映像。 Windows 支持固定大小以及动态扩展类型的 VH…

设计模式-代理模式Proxy(结构型)

代理模式&#xff08;Proxy&#xff09; 代理模式是一种结构型模式&#xff0c;它可以通过一个类代理另一个类的功能。代理类持有被代理类的引用地址&#xff0c;负责将请求转发给代理类&#xff0c;并且可以在转发前后做一些处理 图解 角色 抽象主题&#xff08;Subject&…

ActiViz中的拾取函数介绍

文章目录 1. 拾取函数概述2. 拾取函数的类型3. 拾取函数的工作流程4. 点拾取函数(vtkPointPicker)5. 单元拾取函数(vtkCellPicker)6. 世界坐标拾取函数(vtkWorldPointPicker)7. 近场拾取函数(vtkPropPicker)8. 拾取函数的工作流程9. 点拾取函数(vtkPointPicker)详解1…

光功率计传感器

光探测仪表: 激光功率计探头按照不同的原理和材料分为热电堆型、光电二极管型以及包含两种传感器的综合探头, 激光能量计则有热释电传感器和热电堆传感器探头 热释电效应传感器: 热释电传感器的工作原理主要是基于热释电效应。当物体处于不同温度时,会发射出不同强度的红…

gcn+tcn+transformer入侵检测

gcn gcn_out self.gcn(A_hat, D_hat, X) 的公式实际上是图卷积网络&#xff08;GCN&#xff09;层的核心操作。具体来说&#xff0c;这一步的计算基于图卷积的基本公式&#xff1a; H ( l 1 ) σ ( D ^ − 1 / 2 A ^ D ^ − 1 / 2 H ( l ) W ( l ) ) H^{(l1)} \sigma\left…