1. 多核CPU调度有哪几种算法 比如单核的有优先级、先来先服务。那多核的有哪几种呢
一般多核任务调度算法有全局队列调度和局部队列调度。前者是指操作系统维护一个全局的任务等待队列,当系统中有一个CPU核心空闲时,操作系统就从全局任务等待队列中选取就绪任务开始在此核心上执行。这种方法的优点是CPU核心利用率较高。后者是指操作系统为每个CPU内核维护一个局部的任务等待队列,当系统中有一个CPU内核空闲时,便从该核心的任务等待队列中选取恰当的任务执行,这种方法的优点是任务基本上无需在多个CPU核心间切换,有利于提高CPU核心局部Cache命中率。目前多数多核CPU操作系统采用的是基于全局队列的任务调度算法。
2. SJF调度算法
SJF调度算法:最短作业优先算法SJF(Shortest Job First ),SJF算法以进入系统的作业所要求的CPU时间为标准,总选取估计计算时间最短的作业投入运行。
SJF 调度算法优缺点:算法易于实现。但效率不高,主要弱点是忽视了作业等待时间;会出现饥饿现象。SJF 调度算法可证明为最佳的,这是因为对于给定的一组进程, SJF 算法的平均等待时间最小。虽然 SJF 算法最佳,但是它不能在短期CPU 调度层次上加以实现。因为没有办法知道下一个 CPU 区间的长度。
SJF算法Gantt图:
进程 区间时间
PI 6
P2 8
P3 7
P4 3
进程 P1 的等待时间是 3 ms,进程P2的等待时间为 16 ms,进程P3的等待时间为 9ms,进程P4的等待时间为 0ms。因此,平均等待时间为(3 + 16 + 9 +0) / 4 = 7 ms。
3. 检测到CPU 饥饿.当前线程调度延迟X秒.求助
HMGR0152W信息报出说明这个进程中存在JVM线程调度延迟。
WebSphere Application Server高可用管理器组件中包含线程调度延迟检测逻辑,它会周期性的启动一个线程, 用这个线程去跟踪是否线程已经被分派,是否按照计划运行。默认情况下,延迟检测线程每30秒钟运行一次, 如果超过计划5秒钟没有运行就会在日志中记录一条HMGR0152W消息。这条消息显示了延迟的时间或者与该线程期望得到CPU和实际得到CPU的时间差。
HMGR0152W甚至可能在CPU资源可用的情况下报出。有很多原因可能导致这个调度线程不能以适时的方式获得CPU.下面是一些常见的原因:
1. 物理内存被过量使用并且产生了分页.
2. 进程的堆大小太小导致垃圾回收频繁或者过长阻塞了其他线程的执行.
3. 系统中运行着太多线程,负载过高可能导致CPU使用过高.
HMGR0152W警告信息试图告诉您出现了一个如果不及时修正可能导致不稳定的情况.您需要分析为什么调度线程发生了延迟,需要采取哪些措施.下面是一些常用的解决方法:
1. 增加物理内存防止分页.
2. 优化JVM堆内存配置,从而优化垃圾回收.
3. 降低系统的整体负载到一个可以接受的值.
如果HMGR0152W信息不是经常报出,并且从报出的消息看延迟很短(例如小于20秒), 通常不会有其他问题发生,这个时候这个消息可以被忽略.
高可用管理线程调度延迟检测可以通过配置下面两个定制属性中的一个来实现:
1. IBM_CS_THREAD_SCHED_DETECT_PERIOD 参数决定延迟检测线程多长时间运行一次.默认值是30秒.
2. IBM_CS_THREAD_SCHED_DETECT_ERROR 参数决定多长时间的延迟需要被用这个警告信息记录在日志中.
这些属性辖域在核心组上,您可以按照如下方法配置:
1. 在管理控制台中, 点击服务器 > 核心组 > 核心组设置, 然后选择核心组名字.
2. 在其它属性下, 点击定制属性 > 新建.
3. 输入属性名和值.
4. 保存配置.
5. 如果是网络部署环境, 请注意同步所有节点.
6. 重新启动所有的服务器是该配置在该服务器上生效.
虽然我们可以用上面两个属性增加线程调度检测时间, 但是不建议通过它们使HMGR0152W警告消息完全不再报出. 这个方法只是用于优化系统消除线程调度延迟.
4. 不会发生饥饿现象的调度算法
不会发生饥饿现象的调度算法,这叫什么话呀?我们中国人现在不都是衣食无忧了吗?怎么还会饥饿现象出现呢?你不是想到了什么时候的年代的事?
5. SJF是什么意思
是网络上的一个梗,指stg界最高毒奶。
SJF指射击游戏(Shooting game),游戏类型的一种,也是动作游戏的一种。射击游戏带有很明显的动作游戏特点,也没有纯然的射击游戏,因为射击必须要经过一种动作方式来呈现它的“射击”。
“毒奶”指反向加油、拖累队友。
详解:
奶,在电竞中作为名词时候,指使用于游戏治疗辅助职业;在电竞中作为动词时即指治疗的动作。
毒奶,顾名思义,有毒的奶,即起到治疗的反作用,害死队友的行为。
6. cpu调度的基本方式
我们知道,程序需要获得CPU的资源才能被调度和执行,那么当一个进程由于某种原因放弃CPU然后进入阻塞状态,下一个获得CPU资源去被调度执行的进程会是谁呢?下图中,进程1因为阻塞放弃CPU资源,此时,进程2刚IO操作结束,可以获得CPU资源去被调度,进程3的时间片轮转结束,也同样可以获得CPU资源去被调度,那么,此时的操作系统应该安排哪个进程去获得CPU资源呢?这就涉及到我们操作系统的CPU调度策略了。
根据生活中的例子,我们很容易想到以下两种策略CPU调度的直观想法:1.FIFO谁先进入,先调度谁,这是一种非常简单有效的方法,就好比我们去饭堂打饭,谁先到就给谁先打饭。但是这种策略会遇到一个问题:如果遇到一个很小的任务,但是它是最后进入的,那么必须得前面一大堆任务结束完后才能执行这个小小的任务,这样就感觉很不划算呀!因为我只是简简单单的一个小任务,但是从打开这个任务到结束这个任务要很久。这显然不符合我们的需求,因而我们会想到第2种策略,就是先调度小任务,后调度大任务。2.Priority很简单,就是任务短的优先执行,但是此时又有问题了,任务虽然短,但是它的执行时间不一定短,就好比在一个银行业务中,客户填写一个表,这是一个非常短的任务吧——就单单填个表,但是这个表很长很长,那么这个短任务它的执行时间就很长了,我们怎么知道这个短的任务将来会执行多长的时间呢?所以,这样的策略还是依然有问题。那么,面对诸多的场景,如何设计调度算法呢?首先,我们要明白我们的算法应该让什么更好呢?面对客户:银行调度算法的设计目标应该是用户满意;而面对进程:CPU调度的目标应该是进程满意。那怎么才能让进程满意呢?那就是时间了。进程希望尽早地结束任务,这就是周转时间(从任务到达到任务结束)要短,而且希望用户的操作能够尽快地被响应,这就是响应时间(从操作发生到响应)要短。而且系统内耗时间要少,吞吐量(任务的完成量)要大,系统需要把更多的时间用在任务的执行上,而不能老是去做无关紧要的事情,例如:频繁切换任务,切换栈,分配资源等事情。同时,系统还要去合理地调配任务。那么,CPU的调度策略如何做到合理呢?首先得明白系统中有以下的几种矛盾。1.吞吐量和响应时间之间有矛盾响应时间小=>切换次数多=>系统内耗大=>吞吐量小由于需要较短的响应时间,那么就得频繁地切换任务,这样系统的很多时间都花在切换任务上面了,系统的内耗大了,吞吐量就小了。2.前台任务和后台任务的关注点不同前台任务关注响应时间,后台任务关注周转时间。前台任务例如我们的word文档,我们打一个字,需要立马显示在文档中,这就是word文档这个任务关注的是响应时间;而后台任务中,例如我们的javac编译java代码,它的周转时间要小,即该任务从进入到结束所花的时间要小,即编译完成的时间要小。http://3.IO约束型任务和CPU约束型任务各有各的特点IO约束型任务就是使用CPU的时间较少,进行IO操作的时间较长,CPU约束型的任务就是使用CPU的时间较长。因此,要做到合理,需要折中、综合考虑以上的几种矛盾。由此,产生了一些CPU的调度算法,在下一节我们将重点讲述这些CPU调度算法。
关注小鲸融创,一起深度学习金融科技!
编辑于 2019-12-11 · 着作权归作者所有
赞同 1
评论
展开全部
7. 饥饿导致饿死和死锁有什么区别
哥,饥饿是什么?是进程无法得到资源,(cpu或者io资源或者别的什么资源),所以无法进行下去,称为饿死,比较常见的就是在优先级调度中,不停的有高优先级的进程创建,导致的无法分配cpu,从而饥饿。而按照《操作系统概念》当中介绍的,死锁必须具备以下四个条件 : 1, 自己占有资源并且等待其他进程的资源,2 两个进程相互等待对方占有的资源 3 资源不能被抢占 4资源不能共享。 换句话说,死锁是两个或者多个进程,相互等待对方占有的资源,而又不能释放自己的资源,所以这些进程都进入死锁状态了,进入死锁状态后,由于没有释放自己占有的资源,所以新的进程在请求这些资源的时候可能不能得到资源,于是就饥饿了。此时,cpu的占用率和吞吐量会降低,因为所有的进程都处于waiting状态,此时os会认为是因为多道程序处理时,并行度不够,所以会调入更多的进程,导致更多的进程陷入死锁,从而导致系统的性能大幅度下降,最终只能通过重启来解决(现代的os一般没有应用死锁解决方案,因为这样对性能的损失太大了)。不知道这样说你能不能明白。
8. 哪种调度算法会导致饥饿
一、处理机调度相关基本概念
1、调度方式和调度算法的若干准则
1)面向用户的准则:周转时间短(CPU执行用时Ts、周转时间T=Ts+Tw、带权周转时间W= T/Ts)、响应时间快、均衡性、截止时间的保证、优先权准则
2)面向系统的准则:系统吞吐量高、处理机利用率好、各类资源的平衡利用
3)批处理系统为照顾为数众多的短作业,应采用短作业优先的调度算法;分时系统为保证系统具有合理的响应时间,应采用轮转法进行调度
二、常用调度算法
1、先来先服务调度算法FCFS
(1)按照作业提交,或进程变为就绪状态的先后次序分派CPU;
(2)新作业只有当当前作业或进程执行完或阻塞才获得CPU运行
(3)被唤醒的作业或进程不立即恢复执行,通常等到当前作业或进程出让CPU。(所以,默认即是非抢占方式)
(4)有利于CPU繁忙型的作业,而不利于I/O繁忙的作业(进程)。
2、短作业(进程)优先调度算法SJF(非抢占)/SPF(抢占)
(1)平均周转时间、平均带权周转时间都有明显改善。SJF/SPF调度算法能有效的降低作业的平均等待时间,提高系统吞吐量。
(2)未考虑作业的紧迫程度,因而不能保证紧迫性作业(进程)的及时处理、对长作业的不利、作业(进程)的长短含主观因素,不一定能真正做到短作业优先。
3、高优先权优先调度算法HPF
(1)两种方式:非抢占式优先权算法、抢占式优先权算法(关键点:新作业产生时)
(2)类型:静态优先权:创建进程时确定,整个运行期间保持不变。动态优先权:创建进程时赋予的优先权可随进程的推进或随其等待时间的增加而改变。
(3)高响应比优先调度算法HRRN
HRRN为每个作业引入动态优先权,使作业的优先级随着等待时间的增加而以速率a提高:优先权 =(等待时间+要求服务时间)/要求服务时间= 响应时间 / 要求服务时间。
什么时候计算各进程的响应比优先权?(作业完成时、新作业产生时(抢占、非抢占)、时间片完成时、进程阻塞时)
9. 优先权调度是否会导致进程进入饥饿状态为什么
当一个进程正在运行时,系统可以基于某种原则,剥夺已分配给它的处理机,将之分配给其它进程。剥夺原则有:优先权原则、短进程优先原则、时间片原则。例如,有三个进程P1、P2、P3先后到达,它们分别需要20、4和2个单位时间运行完毕。假如它们就按P1、P2、P3的顺序执行,且不可剥夺,则三进程各自的周转时间分别为20、24、26个单位时间,平均周转时间是23.33个时间单位。假如用时间片原则的剥夺调度方式,可得到:可见:P1、P2、P3的周转时间分别为26、10、6个单位时间(假设时间片为2个单位时间),平均周转时间为14个单位时间。衡量进程调度性能的指标有:周转时间、响应时间、CPU-I/O执行期。
10. 《操作系统》—进程调度算法
抢占式调度算法可能导致高优先级的进程一直占用CPU,而那些低优先级的进程可能一直得不到CPU而饿死。