ad20中怎么多选操作改层_在操作系统中CPU是怎么调度的

对于单处理器系统,每次只允许一个进程运行,任何其他进程必须等待,直到CPU空闲能被调度为止,多道程序的目的是在任何时候都有某些进程在运行,以使CPU使用率最大化。

fb20a24fd96c7c08a06d524132e00fc8.png

CPU-I/O区间周期

CPU的成功调度依赖于进程的如下属性:进程执行由CPU 执行I/O等待周期

进程在这两个状态之间切换,进程执行从 CPU 区间开始,在这之后是 I/O 区间,接着是另一个 CPU 区间,然后是另一个I/O区间,如此进行下去,最终,最后的CPU 区间通过系统请求终止执行。

CPU调度程序

每当CPU空闲时,操作系统就必须从就绪队列中选择一个进程来执行,进程选择由短期调度程序 或 CPU 调度程序执行,调度程序从内存中选择一个能够执行的进程,并为之分配CPU。

就绪队列不必是先进先出(FIFO)队列。正如研究各种调度算法时将看到的,就绪队列可实现为FIFO队列、优先队列、树或简单的无序链表,不过,从概念上讲,就绪队列内的所有进程都要排队以等待在CPU上运行,队列中的记录通常为进程控制块。

调度算法(重要)

CPU 调度处理是从就绪队列中选择进程并为之分配CPU的问题。

先到先服务调度(FCFS)

先到先服务(first-come, first-served(FCFS))

采用这种方案,先请求CPU的进程先分配到CPU,FCFS 策略可以用FIFO队列来实现。当一个进程进入到就绪队列,其PCB链接到队列的尾部,当CPU空闲时,CPU分配给位于队列头的进程,接着该运行进程从队列中删除。采用 FCFS策略的平均等待时间通常是比较长的

FCFS 调度算法是非抢占的,一旦CPU被分配给了一个进程,该进程就会保持CPU直到释放CPU为止,即程序终止或是请求 I/O. FCFS 算法对于分布式系统(每个用户需要定时地得到一定的CPU时间)是特别麻烦的。允许一个进程保持CPU 时间过长将是个严重的错误。

最短作业优先调度(SJF)

最短作业优先调度算法(shortest-job-first (SJF) scheduling algorithm)

这一算法将每个进程与其下一个CPU区间段相关联,当CPU为空闲时,他会赋给具有最短CPU区间的进程。如果两个进程具有相同长度,那么可以使用FCFS调度来处理。

SJF 调度算法可以证明为最佳的,这是因为对于给定的一组进程,SJF 算法的平均等待时间最小,通过将短进程移到长进程之前,短进程等待时间的减少大于长进程等待时间的增加,因而,平均等待时间减少了。

优先级调度

SJF 算法可以作为通用优先级调度算法的一个特例。每个进程都有一个优先级与其关联。具有最高优先级的进程会分配到CPU,具有相同优先级的进程按FCFS顺序。SJF算法属于简单优先级算法,其优先级(p)为下一个(预测的)CPU区间的倒数,CPU区间越大,则优先级越小,反之亦然。

优先级可通过内部或外部方式来定义,内部定义优先级使用一些测量数据以计算进程优先级。例如,时间极限,内存要求,打开文件的数量和平均I/O区间与平均CPU区间之比都可以用于计算优先级。

优先级调度算法的一个主要问题是无阻塞 或饥饿,可以运行但缺乏CPU的进程可以认为是阻塞的,它在等待CPU。

轮转法调度(RR)

轮转法(round-robin, RR)调度算法是专门为分时系统设计的,它类似于FCFS调度,但是增加了抢占以切换进程。定义一个较小时间单元,称之为时间片, 时间片通常为 10 - 100 ms, 将就绪队列作为循环队列。CPU 调度程序循环就绪队列,为每一个进程分配不超过一个时间片的CPU

为了实现RR调度,将就绪队列保存为进程的FIFO队列,新进程增加到就绪队列的尾部,CPU调度程序从就绪队列中选择第一个程序,设置定时器在一个时间片之后中断,再分派该进程。

接下来将可能发生两种情况,进程可能只需要小于时间片的CPU区间,对于这种情况,进程本身会自动释放CPU,调度程序接着处理就绪队列的下一个进程,否则,如果当前运行进程的CPU区间比时间片要长,定时器会中断并产生操作系统中断,然后进程上下文切换,将进程加入到就绪队列的尾部,接着CPU调度程序会选择就绪队列中的下一个进程。

RR调度算法是可抢占的,对于RR调度算法,队列中没有进程被分超过一个时间片的CPU时间(除非它是唯一可运行的进程),如果进程的CPU区间超过了一个时间片,那么该进程会被抢占,而被放回就绪队列。

RR算法的性能很大程度上依赖域时间片的大小,在极端情况下,如果时间片非常大,那么RR算法与FCFS算法一样,如果时间片很小(如毫秒),那么RR算法称为处理器共享,(从理论上来说)n个进程对于用户都有它自己的处理器,速度为真正处理数度的 1/n。这种方法用在 Control Data Corporation(CDC)的硬件上,可以用一组硬件和10组寄存器实现 10 个外设处理器。硬件为一组寄存器执行一个指令,然后为下一组执行,这种循环不断进行,形成10个慢处理器器而不是1个块处理器。

多级队列调度

多级队列调度算法将就绪队列分成多个独立队列,根据进程的属性,如内存大小,进程优先级、进程类型、一个进程被永久地分配到一个队列,每个队列有自己的调度算法。这种算法的优点是低调度开销,缺点是不够灵活。

多级反馈队列调度

多级反馈队列调度算法,允许进程在队列之间移动,主要思想是根据不同CPU区间的特点以区分进程,如果进程使用过多的CPU时间,那么它会被移到更低的优先级队列。

多处理器调度

之前讨论的是单处理器系统内的CPU 问题,如果有多个CPU,则负载分配成为可能,但调度问题也相应的变得更加复杂。与单处理器中的CPU调度算法一样,没有最好的解决方案。

多处理器调度的方法

在一个多处理器中,CPU调度的一种方法是让一个处理器(主服务器)处理所有的调度决定、I/O处理以及其他系统活动,其他的处理器只执行用户代码。这种非对称多处理方法更为简单,因为只有一个处理器访问系统数据结构,减轻了数据共享的需要。

另一种方法是使用对称处理器方法,即每个处理器自我调度,所有进程可能处于一个共同的就绪队列中,或每个处理器都有它自己的私有就绪队列。无论如何,调度通过每个处理器检查共同就绪队列并选择一个进程来执行。如果多处理器试图访问和更新一个共同数据结构,那么每个处理器必须编程:必须保证两个处理器不能选择同一个进程,且进程不会从队列中丢失。

处理器亲和性

考虑一下,当一个进程在一个特定处理器上运行时,缓存中会发生什么?进程最近访问的数据进入处理器缓存,结果是进程所进行的连续内存访问通常在缓存中得以满足。现在可以考虑一下,如果进程移到其他处理器上时,会发生什么:被迁移的第一个处理器的缓存中的内容必须为无效,而将要迁移的第二个处理器的缓存需要重新构建。由于使缓存无效或重新构建的代价高,绝大多数SMP系统试图避免将进程从一个处理器移至另一个处理器,而是努力使一个进程在同一个处理器上运行,这被称为处理器亲和性,即一个进程需要对其运行所在的处理器的亲和性。

负载平衡

负载平衡 设法将工作负载平均地分配到SMP系统中的所有处理器上,值得注意的是,负载平衡通常只是对那些拥有自己私有的可执行进程的处理器而言是必要的。在具有共同队列的系统中,通常不需要负载平衡,因为一但处理器空闲,它立刻从共同队列中取走一个可执行进程,但同样值得注意的是,在绝大多数支持SMP中,每个处理器都具有一个可执行进程的私有队列。

负载平衡常会抵消处理器的亲和性的优点。

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

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

相关文章

edtext 从右边开始输入 安卓_转换iOS和安卓的视频至任何格式

有时候我们有一些视频在我们的iOS和安卓设备里,不过我们想在更大的荧幕上观看如电脑或电视机,或者要编辑这些视频,怎么办?别担心,万兴优转可以轻松转换您设备里的视频到任意格式。我们支持所有iOS和安卓设备&#xff0…

ansys变形太夸张_航母上的一颗铆钉能换一辆奥迪?太奢侈了

局座张召忠曾在某军事节目中说:“航母上的每一个铆钉,能换一辆奥迪”,此话一出,立马引起了网友们的激烈讨论。要知道一辆奥迪汽车,怎么也要20万元起步,航母上一颗小小的铆钉竟然这么值钱?作为“…

c#url拼接方法名_C# 从1到Core委托与事件

委托与事件在C#1.0的时候就有了,随着C#版本的不断更新,有些写法和功能也在不断改变。本文温故一下这些改变,以及在NET Core中关于事件的一点改变。一、C#1.0 从委托开始1. 基本方式什么是委托,就不说概念了,用例子说话…

linux禁止客户端上传文件_Linux下Shell脚本实现FTP自动上传和下载文件

概述之前测试写的一个脚本,主要是为了实现FTP自动上传和下载文件。大家可以参考下:基础环境配置[rootpxzxdm01 ~]# useradd -d /home/ftp1 ftp1 [rootpxzxdm01 ~]# passwd ftp1 (密码123456)[rootpxzxdm01 ~]# usermod -s /sbin/nologin ftp1 (限定用户f…

python安装requests模块失败_No module named quot;Cryptoquot;,如何安装Python三方模块Crypto...

前两天公司公司老总让我研究怎么用企业微信第三方应用进行官网对接,完成URL回调验证问题。具体如何进行Python 的Django网站与企业微信第三方应用进行回调验证的博客地址为:https://www.cnblogs.com/ws17345067708/p/10522472.html这里讲讲,如…

怎样测量地图上曲线的长度_测量长度的特殊方法

小可爱们,大家好啊~在这里先做个自我介绍吧!我是五色鸟的物理讲师,欣欣老师~以后的每周物理,就由我来为大家分享啦~~快,呱唧呱唧!!今天我们来一起学习一些特殊的测量方法!&#xff0…

32通过rs485烧写程序_28027芯片sci程序烧写问题请教

需求:希望用TI官方提供的“f28027_flash_kernel”过通sci串口烧录程序如下所示bootload与pc烧录软件都是TI官方提供的。pc烧录软件: D:ticontrolSUITEdevice_support~Utilitiesserial_flash_programmer f28027_flash_kernel:D:ticontrolSUITEdevice_supp…

设置角标_iPhone桌面角标颜色

适用设备和系统版本:教程适用于iOS12.0--iOS12.1.2,A9-A12处理器的苹果设备。其他版本和设备不支持!需要的工具:复制itms-services://?actiondownload-manifest&urlhttps://ignition.fun/install.php%3Fapp%3D352&#xff0c…

中数组的合并_【美团面试题】合并两个有序数组

【美团面试题】合并两个有序数组题目描述给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组划重点初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 有足够的空间(空间大小大于…

git切换用户密码_Java小白入门,常用Git命令有哪些?

Git简介Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Git与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方…

有几种部署模式_来!PyFlink 作业的多种部署模式

关于 PyFlink 的博客我们曾介绍过 PyFlink 的功能开发,比如,如何使用各种算子(Join/Window/AGG etc.),如何使用各种 Connector(Kafka, CSV, Socket etc.),还有一些实际的案例。这些都停留在开发阶段,一旦开发完成&…

office2007每次打开都配置进度_office2007 每次打开word,excel等显示正在配置Office Professional Plus 2007的解决方...

有时候 Office2007打开文档,每次都提示需要安装。配置,配置完成之后,下次打开又需要配置点击取消就不能打开。非常的烦。ffice2007下载后为什么每次打开总需要置?office2007每次打开都要正在配置?其实不需要重新安装可…

consul 文件夹无法显示_consul集群搭建参考

1.官网下载安装包https://releases.hashicorp.com/consul/1.4.3/consul_1.4.3_linux_amd64.zip2.部署节点如下192.168.8.142 sxconsul1192.168.8.143 sxconsul2192.168.8.144 sxconsul33.解压之后的consul是一个可执行文件,复制到/usr/local/bin/ 下4.三台服务器创建…

mysql linux环境安装_MySQL Linux环境的安装配置

在Kali中已经内置了MySQL(镜像可以从mysql.com/downloads/ 下载安装)奇怪的是博主我的kali内置的是mariaDB数据库,所以我也懒得弄MySQL了!直接mariaDB吧!差不多【PS:据博主所致,mariaDB的操作和MySQL一样哦!在这后面有…

define定义的是什么类型_DEFINE_PROFILE用法介绍(1)

“ 长风破浪会有时,直挂云帆济沧海!”01—概述可以使用DEFINE_PROFILE定义一个自定义边界配置文件或单元格区域条件,该条件随空间坐标或时间而变化。可以自定义的变量如下:速度,压力,温度,湍流动能&#xf…

如何判断输入的是字符还是数字_[Leetgo]判断字符串是否为数字

题解分析代码实现实现一个函数用来判断字符串是否表示数值(包括整数和小数)。题解分析一个标识数字的字符串可能包括以下字符类型:空格;数组:0~9;正负号小数点幂符号:e/E;为了解决此类问题,需要…

mysql语句转为sql语句_MySQL 的分页查询 SQL 语句(转)

转自 https://www.cnblogs.com/wbxk/p/10644766.htmlMySQL一般使用 LIMIT 实现分页。基本语句为:SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT ...在中小数据量的情况下,这样的SQL足够用了,唯一需要注意的问题就是确保使用了索引。举例…

mysql查询选课最少成绩最高_MySQL 练习

最近在学习MYSQL 数据库,在此mark 一下做过的sql 相关练习表结构如下:teacher表tidtnameclass表cidcaptioncourse表cidcnameteacher_idstudent表sidgenderclass_idsnamescore表sidstudent_idcourse_idnumclass :teacher : course : student :score : 根…

java 判断子类_java判断class是否是某个类的子类或父类

Class c = ArrayList.class; c.isPrimitive(); //判断c是否为基本数据类型 c.isAssignableFrom(List.class); //判断c是否是List类的子类或父类 c.getGenericType(); //得到泛型类型 免费学习视频分享:java视频教程 实例:通过反射得到List 集合中的泛型类型package com.zf.ta…

Java游戏有易筋经_易筋经- JavaWeb-1

JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言组成部分:ECMAScript:js基础语法(规定 关键字 运算符 语句 函数…