操作系统处理器调度

1 背景

1.1 上下文切换:

  • 切换CPU的当前任务, 从一个进程/线程到另一个
  • 保存当前进程/线程在PCB/TCB中的执行上下文(CPU状态)
  • 读取下一个进程/线程的上下文

1.2 CPU调度:

  • 从就绪队列中挑选一个进程/线程作为CPU将要运行的下一个进程/线程
  • 调度程序: 挑选进程/线程的内核函数(通过一些调度策略)
  • 什么时候进行调度?

1.3 内核运行调度程序的条件(满足一条即可):

  • 一个进程从运行状态切换到等待状态
  • 一个进程被终结了

1.4 抢占式调度

大部分时候应用程序在运行的过程中是以用户态进程的形式存在的, 一旦启动了一个进程之后, 就会存在两种情况, 可抢占和不可抢占:

不可抢占:

  • 调度程序必须等待事件结束

可以抢占:

  • 调度程序在中断被相应后执行
  • 当前的进程从运行切换到就绪, 或者一个进程从等待切换到就绪
  • 当前运行的进程可以被换出

是否可以抢占: 当一个用户进程执行系统调用, 如果系统调用在内核中不会导致这个进程处于等待状态, 这个调用正常返回会返回到发起这个系统调用的进程继续执行, 即不会在内核中发生抢占现象, 称为内核的不可抢占. 如果系统调用期间, 内核切换到了别的进程执行,  那么返回到用户态会返回到另一个用户进程, 称为内核的可抢占.

2 调度原则

2.1 调度策略

2.2 程序执行模型

程序在CPU突发和I/O中交替:

  • 每个调度决定都是关于在下一个CPU突发时将哪个工作交给CPU
  • 在时间分片机制下, 线程可能在结束当前CPU突发前被迫放弃CPU

2.3 比较调度算法的准则

  • CPU使用率: CPU处于忙状态所占时间的百分比
  • 吞吐量: 在单位时间内完成的进程数量
  • 周转时间: 一个进程从初始化到结束
  • 等待时间: 进程在就绪队列中的总时间
  • 响应时间: 从一个请求被提交到产生第一次响应所花费的总时间

评价快慢的一些指标:

  • 传输文件时的高带宽
  • 玩游戏时的低延迟
  • 这两个因素是独立的

2.4 吞吐量VS延迟

调度算法的目标:

  • 减少响应时间: 从而及时处理用户的输出并且尽快将输出提供给用户
  • 减少平均响应时间的波动: 在交互系统中, 可预测性比高差异低平均更重要
  • 增加吞吐量, 体现在两个方面: 1. 减少开销(操作系统开销, 上下文切换). 2. 系统资源的高效利用(CPU, I/O设备)
  • 减少等待时间: 减少每个进程的等待时间.

低延迟调度增加了交互式表现, 如果移动了鼠标, 但是屏幕中的光标却没动, 体验就会很差. 但是操作系统需要保证吞吐量不受影响, 想要结束长时间的编程, 所以操作系统必须不时进行调整, 即使存在许多交互任务. 吞吐量是操作系统的计算带宽, 响应时间是操作系统的计算延迟.

2.5 公平的目标

调度算法需要确立一个公平的目标, 不过这个怎么定义呢? 比如保证每个进程占用相同的CPU时间, 但是这样的话一个用户比其他用户运行更多进程怎么办. 比如保证每个进程都等待相同的时间, 公平通常会增加平均响应时间.

3 调度算法

3.1 FCFS

FCFS: 先来先服务, 即如果进程在执行中阻塞, 队列中的下一个进程会得到CPU

举例:

假设有三个任务P1, P2, P3, 执行时间分别是12, 3, 3. 

  • 首先, 当任务到达顺序为P1, P2, P3时, 如图:

  • 当任务到达顺序为P2, P3, P1时, 如图:

FCFS特点:

优点:

简单

缺点:

  • 平均等待时间波动较大
  • 花费时间少的任务可能排在花费时间长的任务后面
  • 可能导致I/O和CPU之间的重叠处理(CPU密集型进程会导致I/O设备闲置时, I/O密集型进程也在等待)

3.2 SPN(SJF) SRT

SPN(SJF) SRT: 短进程优先(短作业优先), 短剩余时间优先, 选择下一个最短的进程, 按照预测的完成时间来将任务入队.

可以是可抢占的或者不可抢占的:

  • 可抢占, 又叫Shortest-Remaining-Time(SRT: 最短剩余时间), 执行程序可打断, 并根据剩余执行时间重新确定优先级
  • 不可抢占, 执行程序不可打断

这种方法的平均等待时间是最小的.

缺点:

  • 可能导致饥饿
  • 连续的短任务流会使长任务饥饿
  • 短任务可用时的任何长任务的CPU时间都会增加平均等待时间
  • 需要预知未来(预测等待时间算法)
  • 怎么预估下一个CPU突发的持续时间
  • 简单的解决方法: 询问用户
  • 如果用户欺骗就杀死进程
  • 如果用户不知道怎么办

3.3 HRRN

HRRN: 最高响应比优先, 在SPN调度的基础上改进, 不可抢占, 关注进程等待了多长时间, 防止无限期推迟

相应比:

R = (w + s) / s

  • w: waiting time: 等待时间
  • s: service time: 执行时间

3.4 Round Robin

Round Robin: 轮循, 使用时间切片和抢占来轮流执行任务, 在叫作量子, 或者时间切片的离散单元中分配处理器, 时间片结束时, 切换到下一个准备好的进程.

特点:

  • 花销: 额外的上下文切换
  • 时间量子太大的话: 等待时间就会过长, 极限情况退化成FCFS
  • 时间量子太小的话: 反映迅速, 但是...吞吐量由于大量的上下文切换开销受到影响

目标:

  • 选择一个合适的时间量子
  • 经验规则: 维持上下文切换开销处于1%以内

3.5 Multilevel Feedback Queue

Multilevel Feedback Queue: 多级反馈队列, 优先级队列中的轮循

  • 就绪队列被划分成独立的队列(比如: 前台/交互, 后台/批处理)
  • 每个队列拥有自己的调度策略(比如: 前台RR, 后台FCFS),
  • 调度必须在队列间进行

但是进程的执行过程进程的特点会发生变化, 根据这个问题可以有如下设计:

  • 一个进程可以在不同的队列中移动
  • 例如: n级优先级 - 优先级调度在所有级别中, RR在每个级别中:
  • 时间量子大小随优先级级别增加而增加
  • 如果任务在当前的时间量子中没有完成, 则降到下一个优先级

3.6 Fair Share Scheduling

Fair Share Scheduling: 公平共享调度

FSS控制用户对系统资源的访问

  • 一些用户组比其他用户组更重要
  • 保证不重要的组无法垄断资源
  • 未使用的资源按照每个组所分配的资源的比例来分配
  • 没有打到资源使用率目标的组获得更高的优先级

3.7 调度算法评价

  • 确定性建模: 确定一个工作量, 然后计算每个算法的表现
  • 队列模型: 用来处理随机工作负责的数学方法
  • 实现/模拟:
  • 建立一个允许算法运行实际数据的系统
  • 最灵活/具有一般性

4 实时调度

4.1 实时系统

定义:

正确性依赖于其时间和功能两方面的一种操作系统.

性能指标:

  • 时间约束的及时性(deadlines)
  • 速度和平均性能相对不重要

主要特性:

时间约束的可预测性

分类:

  • 强实时系统: 需要在保证的时间内完成重要的任务, 必须完成
  • 弱实时系统: 要求重要的进程优先级更高, 尽量完成, 并非必须

一些术语:

  • 任务(工作单元): 一次计算, 一次文件读取, 一次信息传递等等
  • 属性: 取得进展所需要的资源, 实时参数
  • 周期任务
  • 任务有规律的重复
  • 周期p = inter-release time (0 < p)
  • 执行周期e = 最大执行时间(0 < e < p)
  • 使用率U = e / p
  • 硬时限
  • 如果错过了最后期限, 可能会发生灾难性或非常严重的后果
  • 必须验证: 在最坏的情况下是否也能满足时限
  • 保证确定性
  • 软时限 
  • 理想情况下, 时限应该被最大满足. 如果有时限没有被满足, 那么就相应地降低要求
  • 尽最大努力去满足 

满足实时性要求的调度算法设计:

  • 决定实时任务执行的顺序
  • 静态优先级调度
  • 动态优先级调度 

4.2 可调度性

4.3 单调速率(RM)调度

  • 最佳静态优先级调度
  • 通过周期安排优先级
  • 周期越短优先级越高
  • 执行周期最短的任务

4.4 截止日期最早优先(EDF)

  • 最佳的动态优先级调度
  • Deadline越早优先级越高
  • 执行Deadline最早的任务

5 多处理器调度

多处理器的CPU调度更加复杂

  • 多个相同的单处理器组成一个多处理器
  • 优点: 负载共享

对称多处理器(SMP)

  • 每个处理器运行自己的调度程序
  • 需要在调度程序中同步

6 优先级反转

可以发生在任何基于优先级的可抢占的调度机制中, 当系统内的环境强制使高优先级任务等待低优先级任务时发生.

发生原因(图示):

  1. 假设此时操作系统中有三个优先级不同的进程, 低优先级进程P_{low}, 高优先级进程P_{high}和中优先级进程P_{mid}. 在t_{1}时刻P_{low}先开始运行(此时优先级较高的另外两个进程还没开始运行):
  2. P_{low}t_{2}时刻开始访问某个共享资源R:
  3. t_{3}时刻, P_{low}未对R访问完毕时, P_{high}开始跑了, 于是P_{low}被抢占:
  4. t_{4}时刻P_{high}需要访问此时被P_{low}占用的R, 由于P_{low}被抢占, 所以其占用的R还没有释放, 所以P_{high}开始等待R的释放而被挂起, 从而P_{low}继续执行(此时正在使用R):
  5. t_{5}时刻P_{low}还未使用完R之前, P_{mid}开始执行, 这样P_{low}又被抢占, 于是开始执行P_{mid}:
  6. 直到t_{6}时刻P_{mid}执行完毕, 然后继续执行P_{low}, P_{low}继续访问R:
  7. t_{7}时刻P_{low}使用完R之后, 释放了R, 然后P_{high}开始使用R, 直至P_{high}执行完毕:

优先级反转的持续时间取决于其他不相关任务的不可预测的行为, 如以上例子, P_{high}的执行时间被P_{low}以及P_{mid}影响.

解决办法:

  • 低优先级任务继承高优先级任务的优先级依赖于他们共享的资源. 如以上例子, P_{high}在访问R时由于此时R正在被P_{low}所占用, 所以P_{low}的优先级会动态得到提升至和P_{high}相同(因为RP_{low}占用的原因), 使得P_{low}不被P_{mid}抢占.
  • 优先级天花板
  • 优先级天花板: "资源"的优先级和"所有可以锁定该资源的任务中优先级最高的那个任务"的优先级相同, 如以上例子, R的优先级跟P_{high}的优先级相同.
  • 除非优先级高于系统中所有被锁定的资源的优先级上线, 否则任务尝试执行临界区的时候会被阻塞. 如以上例子, P_{low}占用R执行时, 除非再来一个进程的优先级高于此时资源的优先级, 也就是R的优先级, 也就是P_{high}的优先级, 其可以抢占CPU执行, 否则就会被阻塞, 也就是P_{mid}过来时会被阻塞.
  • 持有最高优先级上限信号量的任务, 会继承被该锁所阻塞的任务的优先级.

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

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

相关文章

c# 操作redisclient 设置过期时间_C# Redis分布式锁单节点

(给DotNet加星标&#xff0c;提升.Net技能)转自&#xff1a;热敷哥cnblogs.com/refuge/p/13774008.html为什么要用分布式锁?先上一张截图,这是在浏览别人的博客时看到的.在了解为什么要用分布式锁之前,我们应该知道到底什么是分布式锁.锁按照不同的维度,有多种分类.比如1、悲观…

计算机网络数据链路层检错编码 --- 循环冗余码CRC

实例说明 假如要发送的数据是1101 0110 11, 采用CRC校验, 生成多项式是10011, 那么最终发送的数据应该是? 发送端发送过程: 1. 最终发送的数据 要发送的数据 帧检验序列FCS(冗余码) 2. 利用生成多项式计算冗余码 计算冗余码的方法: 1. 加0, 要根据生成多项式中的阶为, 则…

计算机网络中数据链路层编码纠错编码 --- 海明码

1 概述 首先, 海明码是计算机网络中数据链路层的针对帧的位错提出的一种纠错编码方式. 海明码可以发现双比特错, 但纠正单比特错. 工作原理(简单解释): 牵一发动全身 2 工作流程 2.1 确定校验码位数r 海明不等式: 其中为冗余信息位数, 为信息位数 如果给定要发送的数据, …

计算机操作系统同步互斥

1 背景 在计算机系统里面, 多道程序设计是现代操作系统的重要特征, 且并行起到了很大的作用, 所以操作系统抽象出来了线程/进程的概念用来支持多道程序设计, 同时, 各个进程之间需要进行交互, CPU也需要进行调度来支持多进程. 多进程会涉及到共享资源访问的问题, 如果操作系统…

conda安装tensorflow-gpu简洁版_win10 tensorflow2.2 安装注意事项

学习新技术有两座大山&#xff0c;一座是安装配置环境&#xff0c;另一座是调试bug。对于想学习人工智能开发的人来说&#xff0c;安装配置tensorflow是必不可少的一步&#xff0c;这个过程对于初次接触的人来说&#xff0c;到处都是火坑。下面大家跟我一起&#xff0c;看看都会…

操作系统中死锁避免算法 --- 银行家算法

1. 背景 在银行系统中, 客户完成项目需要申请贷款的数量是有限的, 每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量, 在满足所有贷款要求并完成项目时, 客户应及时归还. 银行家在客户申请的贷款数量不超过自己拥有的最大值时, 都应尽量满足客户的需要. 在这样的描…

python字符串对齐_Python - 字符串对齐

字符串对齐 本文地址: http://blog.csdn.net/caroline_wendy/article/details/20463231 Python中, 字符串对齐, 使用ljust(), 左对齐;rjust(), 右对齐; center(), 中间对齐; 也可以修改第三个参数, 修改填充数据, 默认使用空格; 代码如下: # -*- coding: utf-8 -*- # #File: Te…

操作系统中的死锁问题

1 死锁问题概述 一组阻塞的进程持有一种资源等待获取另一个进程所占有的一个资源.例子: 系统有两个磁带驱动器, P1和P2各有一个, 都需要另外一个. 2 系统模型 资源类型: , , ..., 包括CPU cycles, memory space, I/O devices 每个资源类型有实例. 每个进程使用资源过程如下…

chrome控制台如何把vw显示成px_你可能不知道的chrome调试技巧

本文是对常用的chrome调试技巧进行总结整理&#xff0c;如果你没有深入了解过chrome调试工具&#xff0c;此处总有你不知道的惊喜&#xff01;从 Chrome 说起对于大部分人来说&#xff0c;Chrome 可能只是个浏览器&#xff0c;但是对于开发人员来说&#xff0c;它更是一个强大无…

gns3中两个路由器分别连接主机然后分析ip数据转发报文arp协议_ARP协议在同网段及跨网段下的工作原理...

前言&#xff1a;ARP协议是在链路层通讯中&#xff0c;已知目标IP地址,但是&#xff0c;仅有IP 地址是不够的&#xff0c;因为IP数据报必须封装成帧才能通过数据链路进行发送&#xff0c;而数据帧必须要有目的MAC地址&#xff0c;每一个网络设备在数据封装前都需要获取下一跳的…

操作系统文件系统

1 基本概念 1.1 文件系统和文件 1.1.1 简述 文件系统: 一种用于持久性存储的系统抽象 在存储器上: 组织, 控制, 导航, 访问和检索数据大多数计算机系统包含文件系统个人电脑, 服务器, 笔记本电脑ipod, Tivo/机顶盒, 手机/掌上电脑google可能是由一个文件系统构成的 文件: 文…

c++代码整洁之道pdf_别再问如何用python提取PDF内容了

作者&#xff1a;陈熹 来源&#xff1a;早起Python大家好&#xff0c;在之前的办公自动化系列文章中我们已经详细介绍了如何使用python批量处理PDF文件&#xff0c;包括合并、拆分、水印、加密等操作。今天我们再次回到PDF&#xff0c;详细讲解如何使用python从PDF提取指定的信…

查看文章影响因子的插件_Scholarscope--在新版PubMed中实现基于影响因子的文献筛选...

小编之前介绍过如何在Pubmed上直接显示杂志影响因子的方法&#xff0c;这个方法主要是依托Scholarscope插件&#xff0c;其实除了显示影响因子&#xff0c;这个插件还可以帮助大家根据影响因子筛选文献哦&#xff0c;操作也很简单&#xff0c;只要生成自定义过滤器即可&#xf…

leetcode32 --- longestValidParentheses

1 题目 给你一个只包含 ( 和 ) 的字符串&#xff0c;找出最长有效&#xff08;格式正确且连续&#xff09;括号子串的长度。 2 解法 2.1 动态规划方法 维护一个字符串长度的数组cur_max_len, 第i个元素代表以当前(或者)结束的最长有效括号的长度. 这样就会利用动态规划递推…

armitage识别不了漏洞_Shiro RememberMe 漏洞检测的探索之路

前言Shiro 是 Apache 旗下的一个用于权限管理的开源框架&#xff0c;提供开箱即用的身份验证、授权、密码套件和会话管理等功能。该框架在 2016 年报出了一个著名的漏洞——Shiro-550&#xff0c;即 RememberMe 反序列化漏洞。4年过去了&#xff0c;该漏洞不但没有沉没在漏洞的…

css响应式布局_用 CSS Grid 布局制作一个响应式柱状图

最新一段时间比较喜欢玩弄图表&#xff0c;出于好奇&#xff0c;我想找出比较好的用 CSS 制作图表的方案。开始学习网上开源图表库&#xff0c;它对我学习新的和不熟悉的前端技术很有帮助&#xff0c;比如这个&#xff1a;CSS Grid。今天和大家分享我学到的新知识&#xff1a;如…

vs code 插件_[VSCode插件开发] 由浅入深,带你了解如何打造百万级产品

去年&#xff0c;笔者有幸在微软技术暨生态大会上做了个演讲&#xff0c;主题是“从零开始开发一款属于你的 Visual Studio Code 插件”。演讲内容主要覆盖了VS Code插件开发的四个方面&#xff1a;设计、实现、推广和维护。作为一个开发者&#xff0c;我们往往会把大多数的时间…

leetcode45 --- jump

1 题目 给定一个非负整数数组&#xff0c;你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的目标是使用最少的跳跃次数到达数组的最后一个位置。 假设你总是可以到达数组的最后一个位置。 2 解法 2.1 从终点遍历的方法(时间复杂度)…

python怎么查看网页编码格式_怎么用python爬取网页文字?

用Python进行爬取网页文字的代码&#xff1a;#!/usr/bin/python# -*- coding: UTF-8 -*-import requestsimport re# 下载一个网页url htt用python进行爬取网页文字的代码&#xff1a;#!/usr/bin/python# -*- coding: UTF-8 -*-import requestsimport re# 下载一个网页url htt…

leetcode41 --- firstMissingPositive

1 题目 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 2 解法 最笨的方法是从1开始试, 看1在数组里面是否出现过, 2, 3, ....不过时间复杂度是. 2.1 hash 可以考虑…