处理机调度

2023-05-16

调度算法:

第一类就绪队列怎么排
第二类是每一次执行时间的长短的控制
第三类关于多种算法如何综合到一起

先来先服务算法

按着到就绪队列里的先后顺序来排队的在找就绪进程的时候也是按照这个先后顺序来。
   按先来后到没有考虑到进程的特征
缺点:
    1、平均等待时间波动非常大
    2、资源的利用效率比较低
        CPU密集型的进程会导致I/O设备闲置时,I/O密集型的进程也处于等待。

短进程优先

那它们是按照作业执行时间的长短来进行排队的。
考虑到进程的执行时间
选择执行时间最短的进程占用CPU进入运行状态
选择最短的时间,执行时间执行的时候才会准确的知道,所以要判断预期的执行时间

短剩余时间优先:
一个新的进程它预期的执行时间比当前正在执行的进程剩下那个时间还要短,那这时候允许它抢先
优点:
    它具有一个最优平均周转时间的特征
缺点:
按照由短到长来排的,那这么长的就会一直得不到CPU的资源就会导致饥饿。
需要预知执行时间,但是要知道未来是很麻烦的

1、 问用户
2、用过去预测未来是执行时间的预估利用历史信息来预测预估未来的执行时间

高响应比优先算法

它考虑的是进程在就绪队列里的等待时间,依据等待时间的长短来考虑它排的这个队的情况
前面只考虑到进程执行时间的因素,高响应比优先是按照响应比R的值来排序
R = (W+S)/S
W是等待时间S是预估的执行时间
等的时间越长R因为它在分子,R会越来越大
等的时间越长它的优先级越高
在一定程度上就可以避免短进程优先里的长进程等待时间长的这种情况而导致出现饥饿
优点:
    1、不允许强占
    2、关注的是进程的等待时间 
    3、可以避免无限期的等待

时间片轮转算法

让各个进程轮流占用一个基本的时间片
在先来先服务的基础上,执行时间的最大长度限制
最长不能执行超过一个时间片在这之前 可以由于等待或者结束而让出CPU使用权

时间片:约定一个进时间片:程调度的基本时间单位是处理机资源分配的基本单位

它的基本工作原理
进程时间片结束的时候会有时钟中断,这时按照先来先服务算法切换到下一个就绪进程
缺点:
       时间片轮转算法由于靠时钟中断,强行把正在执行的进程结束掉了,
    有额外的上下文切换的开销

时间片设置
    两个极端的情况
        时间片很大大到可以任何一个进程都在一个时间片内能完成那这时候变成一个先来先服务了
        而对于时间片短,大量时间是在做切换,上下文切换有很大的开销的.
    在系统通常情况下,10毫秒左右一个时间片这个时间片上下文切换的开销呢是在百分之一左右

多级反馈队列

把就绪队列排成多个子队列
不同的子队列里,可以有不同的算法并且可以在多个队列之间调整一个进程所排的队列

比如:
    前台 那是交互的应用要求时间片短
    后台,计算时间比较长的
2、每个队列自己的调度算法
    前台 用时间片轮转
    后台 用先来先服务
3、队列之间:
    固定优先级:
        先处理前台,然后处理后台
        可能导致饥饿
    时间片轮转 
        每个队列分得一定的时间配额
        保证它总的时间占一定比例
比如:
    前台占80% 后台占20%
    前台有作业的时候呢
    它可以很好的得到及时的响应
    后台也不至于完全处于饥饿的状态
在刚才的多级队列里,各个队列之间是没有交互的
多级反馈队列:
    队列之间可以相互移动
可以在不同队列之间做调整,优先级越高,时间片越小;优先级越低,时间片越大。

CPU密集型的进程,优先级会逐步降低并且时间片会分的很大,切换的这个开销相对来说变小
而对于I/O密集型的进程会停留在高优先级上因为每一次它算的时间都很短

公平共享调度算法

它强调的是按照进程占用的资源的情况来进行调度保证我们每一个进程占用的资源呢是相对公平的,强调的是资源访问的公平。
1、用户和进程分组
2、保证不重要的用户组不能垄断资源
3、没有使用完的资源那就按比例分
4、没有达到资源使用率目标的组获得更高的优先级

总结:

   多级反馈队列提供一套机制使得我多种算法可以集成到一起,在实际系统里用到的算法基本上是这种综合的算法
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

处理机调度 的相关文章

  • 在vscode中使用Git

    用了git最方便的就是比如在公司写了很多代码后回到家打开vscode只需要点击一下pull就能全部同步过来 是不是很方便 毕竟之前我都是拿u盘拷贝回家或者存到云盘再下载下来 我这里用的是国内的码云托管的代码 xff0c xff0c gith
  • vscode同步设置&扩展插件

    首先安装同步插件 xff1a Settings Sync 第二步 xff1a 进入你的github如图 xff1a 打开设置选项 xff1a 新建一个token xff1a 如图 xff1a 记住这个token值 转到vscode 按shi
  • mysql 常用语句使用

    1 查询语句 SELECT FROM table 2 更改语句 UPDATE table SET name 61 39 123456 39 WHERE id 61 100 3 插入语句 INSERT INTO table VALUES 1
  • STM32学习第七天--串口调试助手没弄懂

    啊啊 啊 今天真的好沮丧 调代码足足调了一晚上 xff0c 不知道什么原因工程就是错 xff0c 最后好不容易啊 xff0c 在主函数加了个 include 34 stm32f10x lib h 34 就好使了 xff0c 真不知道为什么
  • swoole 相关

    安装虚拟机 VMware Workstation Pro 安装CentOS CentOS 7 x86 64 Minimal 1708 iso 安装FinalShell 教程地址 安装lnmp 教程地址 服务状态管理命令 1 安装lnmp 2
  • ffmpeg编程:读取摄像头信息,保存为裸yuv420p、yuyv422视频流

    1 源码下载 xff1a https download csdn net download dijkstar 10898462 2 编程环境使用Windows下的QT5 11 minGW32 xff0c 源码中已经放好了fmpeg的bin
  • C中__FILE__ __LINE__的用法

    include lt stdio h gt void main void printf 34 File s Successfully reached line d n 34 FILE LINE Other statements here l
  • ubuntu中添加和删除源

    添加PPA源的命令为 xff1a br sudo add apt repository ppa user ppa name 添加好更新一下 xff1a sudo apt get update 删除命令格式则为 xff1a br sudo a
  • jetson nano 部署yoloV3,yoloV4,yoloV3-tiny,yoloV4-tiny

    系统 ubuntu nbsp nbsp 自带cuda10 0 nbsp 1 下载与安装darknet git clone https github com AlexeyAB darknet cd darknet 2 以下步骤我都在直接进入c
  • 对比first-fit/best-fit/worst-fit/slab以及buddy这几种算法的特点

    以下均为自己对这些算法的理解 xff1a fitst fit算法 First fit算法 xff1a 连续物理内存分配算法的一种 xff0c 将空闲内存块按照地址从小到大的方式连起来 xff0c 具体实现时使用了双向链表的方式 当分配内存时
  • MIT6_0001F16_Pset2

    MIT6 0001F16 Pset2 完成Hangman Game的编写 xff0c 就是一个猜词游戏 span class token comment Problem Set 2 hangman py span span class to
  • 利用python进行数据分析 pdf

    利用python进行数据分析 链接 xff1a https pan baidu com s 1mFg7kB0WG6edKnhumMbbJg 提取码 xff1a 6kos 如果带来帮助 xff0c 可点赞或关注博主 xff01
  • 数据库系统概念第六版 第六章练习题6.11

    6 11 考虑下图所示的关系数据库 xff0c 主码加了下划线 给出关系代数表达式来表达下列的每一个查询 xff1a a 找出First Bank Corporation的所有员工姓名 b 找出First Bank Corporation所
  • 数据库实验4 SQL语言-SELECT查询操作

    数据库实验4 SQL语言 SELECT查询操作 1 首先按照第三章的jxgl数据库的模板创建jxgl数据库并插入数据 xff1a 创建数据库jxgl create database jxgl 创建相应的表 xff1a 创建student表
  • Docker安装RabbitMQ,RabbitMQ Management使用

    上一篇文章介绍了RabbitMQ的一些基本概念 xff0c 如果没看过没了解 xff0c 推荐先去了解一下 xff1a 下面我们一起来安装一下RabbitMQ并且访问一下它的Management吧 我这边是使用了Docker容器来安装和启动
  • 数据库系统概念第六版 第七章练习题 15 22

    数据库第七章理论习题 7 15 为医院构造一个包含一组病人和一组医生的E R图 为每个病人关联一组不同的检查和化验记录 说明 xff1a 医生和病人间存在联系 xff0c 同时病人有特有的检查和化验记录 xff0c 病人有病床 xff0c
  • 操作系统设计思想--主奴思想

    操作系统设计思想 主奴思想 对于操作系统而言 xff0c 如何稳定可靠运行无疑是最重要的 目前的方案均为将用户进程和其他用户进程 将用户进程和操作系统进行分离 实现操作系统可以管理用户进程 xff0c 但用户进程不能侵入内核 xff0c 同
  • 从零开始学GO ---- 错误处理

    从零开始学GO 错误处理 Go 语言通过内置的错误接口提供了非常简单的错误处理机制 error类型接口 在这个接口类型的声明中只包含了一个方法Error Error方法不接受任何参数 xff0c 但是会返回一个string类型的结果 它的作
  • 从零开始学GO ---- 接口

    从零开始学GO 接口 接口是一个编程规范 xff0c 一组方法签名的集合 Go的接口是非侵入式的设置 xff0c 一个具体类型实现接口不需要在语法上显式地声明 xff0c 只要具体类型的方法集是接口方法集的超集 xff0c 就代表该类型实现
  • Golang通过反射对结构体进行赋值和其他操作

    Golang通过反射对结构体进行赋值和其他操作 通过反射可以方便快捷地访问Golang的结构体字段 xff0c 并进行赋值或其他操作 当两个结构体内容相同但名字不同时 xff0c 如何快捷地进行赋值 xff1f 或者内容有交集 xff0c

随机推荐

  • 如何使用github来下载你需要使用的ros资源

    使用ros系统 xff0c 需要用到许多数据包 xff0c 有些时候你需要使用的ROS数据包并没有Debian包的形式 xff0c 这时你需要从数据源安装它 代码开发人员通常使用的有三种主流的版本控制系统 xff1a SVN xff0c G
  • VLC RTSP视频播放终极解决方案

    VLC播放RTSP视频流遇到的问题 摄像头是RTSP协议的 xff0c 需要在Android端实时显示摄像头视频流 xff0c 这里采用了开源的VLC播放器 xff0c 可能会有如下需求 xff1a 一 有截屏的需求 二 有屏幕录制的需求
  • docker push 实现过程

    这一篇文章分析一下docker push的过程 xff1b docker push是将本地的镜像上传到registry service的过程 xff1b 根据前几篇文章 xff0c 可以知道客户端的命令是在api client push g
  • FreeRTOS专题六:支持多优先级

    在 FreeRTOS 中 xff0c 数字优先级越小 xff0c 逻辑优先级也越小 xff0c 这与RT Thread 和 C OS刚好相反 就绪列表 pxReadyTasksLists configMAX PRIORITIES 是一个数组
  • 操作系统中的中断(详细介绍+图片理解)

    中断的概念 中断是指程序执行过程中 xff0c 遇到急需处理的事件时 xff0c 暂时中止CPU上现行程序的运行 xff0c 转去执行相应的事件处理程序 xff0c 待处理完成后再返回原程序被中断处或调度其他程序执行的过程操作系统是 中断驱
  • Android 如何杀死Service

    方法很简单就是用ActivityManager private void killeService List lt RunningAppProcessInfo gt infos TODO 自动生成的方法存根 ActivityManager
  • [自动驾驶]Build a Traffic Sign Recognition Program

    看 准确率98 的深度学习交通标志识别是如何做到的 xff1f 这篇文章的时候 xff0c 发现了udacity的自动驾驶课程 可惜要收费 xff0c 不过课程project在github上有 xff0c 那直接做project就好了 xf
  • 教你快速学习PID控制原理

    教你快速学习PID控制原理 写在前面 在这篇文章中我会通过举例的方式来让大家了解什么是PID控制 xff0c 这篇博客是让大家更加容易的理解PID控制 xff0c 如果大家想要跟深入的了解的话最好是自己上手去做一个关于PID控制的实物 xf
  • opencv HSV找颜色,找轮廓用最小旋转矩形框出

    include lt opencv2 opencv hpp gt include lt iostream gt include lt string gt using namespace cv using namespace std 输入图像
  • FreeRTOS学习笔记——FreeRTOS 任务基础知识

    RTOS 系统的核心就是任务管理 xff0c FreeRTOS 也不例外 xff0c 而且大多数学习RTOS 系统的工程师或者学生主要就是为了使用RTOS 的多任务处理功能 xff0c 初步上手RTOS 系统首先必须掌握的也是任务的创建 删
  • linux c char * char[]相互转换

    1 char 转char 可以直接赋值 char pp 20 61 34 helloworld 34 char p 61 pp 2 char 转char 主要有两种方法可以将char 转换为char 类型 xff0c 分别是 xff1a s
  • GDB改变程序的执行

    1 修改变量值 xff1a set var var name 61 num 最佳 print var name 61 num 2 跳转执行 gdb提供了乱序执行的功能 jump linespec linespec可以是文件的行号 xff0c
  • Linux缓冲区

    所有的磁盘I O都要进过内核的快缓冲区 xff08 内核缓冲区高速缓冲 xff09 xff0c 既然read和write都要被内核缓冲 xff0c 那么 不带缓冲的IO 指的是在用户的进程中对这两个函数不会进行缓冲 xff0c 每次read
  • git忽略本地的已经push过的提交

    先使用如下命令 xff1a span class hljs comment git span span class hljs comment rm span span class hljs literal span span class h
  • 计算机启动过程

    BIOS BIOS做了底层的一些初始化的工作 BIOS的初始化过程 xff1a 在计算机电源刚打开的时候 xff0c 首先会 xff1a 1 硬件自检 2 检查系统中的内存和显卡等关键部件的存在和工作状态 3 查找并执行显卡等接口卡BIOS
  • 系统调用

    系统调用 xff1a 操作系统对上提供服务的接口 通过软中断触发中断 INT和IRET指令用于系统调用 xff0c 系统调用时 xff0c 堆栈切换和特权级的切换 开销 1 引导机制 2 建立内核堆栈 3 验证参数 4 内核态映射到用户态的
  • ERVER CONSOLE DEBUG: onBackendConnect: gdb-server session closed

    Waiting for gdb server to start 2022 08 24T07 08 56 126Z SERVER CONSOLE DEBUG onBackendConnect gdb server session connec
  • Linux离线安装telnet命令

    参考 xff1a https www hangge com blog cache detail 2935 html 一 离线包下载 xff08 1 xff09 首先下载 telnet client 或 telnet 客户端软件包 xff0c
  • 嵌入式开发--CAN总线与高速光耦6N137

    嵌入式开发 CAN总线与高速光耦6N137 6N137简介 CAN总线应用时 xff0c 有时候需要加光耦隔离电路 xff0c 以免在雷击或遇到高压干扰时 xff0c 保护设备安全 常用的有光耦隔离和专用芯片隔离 本文介绍使用高速光耦6N1
  • 处理机调度

    调度算法 第一类就绪队列怎么排 第二类是每一次执行时间的长短的控制 第三类关于多种算法如何综合到一起 先来先服务算法 按着到就绪队列里的先后顺序来排队的在找就绪进程的时候也是按照这个先后顺序来 按先来后到没有考虑到进程的特征 缺点 xff1