精华内容
下载资源
问答
  • 多级反馈队列

    千次阅读 2018-03-23 21:24:05
    多级反馈队列 在这一章中,我们将讨论开发其中一个最重要的问题。 众所周知的调度方法,称为多级反馈队列(MLFQ)。多级反馈队列(MLFQ)调度程序最初由Corbato等人描述,在1962年[C+62]系统中被称为兼容分时系统(CTSS)...

     多级反馈队列

     在这一章中,我们将讨论开发其中一个最重要的问题。 众所周知的调度方法,称为多级反馈队列(MLFQ)。多级反馈队列(MLFQ)调度程序最初由Corbato等人描述,在1962年[C+62]系统中被称为兼容分时系统(CTSS),这一工作,以及后来的Multics工作,导致ACM授予Corbato最高荣誉-图灵奖。在接下来的几年里,调度器一直被细化到您将在一些现代系统中遇到的实现。MLFQ试图解决的基本问题是双重的。首先,它希望优化周转时间,正如我们在前面的说明中所看到的,这是通过先运行较短的工作来完成的。不幸的是,操作系统通常不知道工作需要多长时间,确切地说,像SJF(或STCF)这样的算法需要的知识。第二,MLFQ希望使系统对交互式用户有响应(即:,用户坐在屏幕上,盯着屏幕,等待过程完成),从而最小化响应时间。不幸的是,像Round Robin这样的算法减少了响应时间,但是对于周转时间来说是很糟糕的。当系统运行时,调度程序如何学习?它正在运行的作业的特性,从而做出更好的调度决策。

    我们如何设计一个调度器,既能最小化交互工作的响应时间,又能减少对工作长度的先验知识,从而最小化周转时间。多级反馈队列是一个从过去学习预测未来的系统的优秀例子。这种方法在操作系统(以及计算机科学的许多其他地方,包括硬件分支预测器和缓存算法)中很常见。当工作有阶段的行为并且是可预测的时,这种方法就会起作用。当然,一个人必须小心使用这种技术,因为他们很容易出错,并驱使一个系统做出比完全没有知识更糟糕的决策。MLFQ:基本规则。为了构建这样的调度器,在本章中,我们将描述多级反馈队列背后的基本算法;虽然许多实施的MLFQs的细节不同[E95],但大多数方法都是相似的。在我们的处理中,MLFQ有许多不同的队列,每个队列都分配了不同的优先级。在任何给定的时间,一个准备运行的作业都在一个队列上。MLFQ使用优先级来决定在给定的时间内应该运行哪个作业:具有更高优先级的工作(即:,选择更高队列的作业)。
    当然,一个给定队列中可能有多个作业,因此具有相同的优先级。在这种情况下,我们只需要在这些作业中使用循环调度。因此,我们到达了MLFQ的前两个基本规则。

    因此,MLFQ调度的关键在于调度程序如何设置优先级。MLFQ并没有将每个工作的固定优先级放在首位,而是根据其观察到的行为来改变工作的优先级。例如,如果一个作业在等待键盘输入时重复地放弃了CPU,那么MLFQ将保持它的优先级高,因为这是一个交互过程的行为方式。相反,如果一份工作长期频繁地使用CPU, MLFQ将会降低它的优先级。这样,MLFQ将尝试在运行过程中了解进程,从而使用任务的历史来预测其未来的行为。
    如果我们要在给定的时刻发布一个队列的图片,我们可能会看到如下图(图8.1)。在图中,两个工作(A和B)处于最高优先级,而job C位于中间,而job D处于最低优先级。考虑到我们目前对MLFQ如何工作的了解,调度器只会在A和B之间交替使用时间片,因为它们是系统中最高优先级的工作;糟糕的工作C和D甚至都不会引起公愤。
    当然,仅仅显示一些队列的静态快照并不能真正让您了解MLFQ是如何工作的。我们需要明白的是工作优先级如何随时间变化。
    对于那些第一次读到这本书的人来说,这是一个惊喜,这正是我们下一步要做的。

    8.2尝试1:如何改变优先权

      我们现在必须决定MLFQ如何在工作的生命周期中改变工作的优先级(也就是它在哪个队列上)。要做到这一点,我们必须记住我们的工作负载:一种交互式作业,它是短期运 行的(并且可能经常放弃CPU),以及一些长期运行的CPU密集型作业,它们需要大量的CPU时间,但是响应时间并不重要。这是我们第一次尝试的优先级调整算法。

    规则3:当工作进入系统时,它被放置在最高优先级(最顶层队列)。规则4a:如果一个作业在运行时占用了整个时间片,那么它的优先级就会降低(即:,它向下移动一个队列)规则4b:如果一个工作在时间片结束之前放弃了CPU,它将保持在相同的优先级。

    示例1:单个长时间运行的作业。

    让我们来看一些例子。首先,我们将看看在系统中有长期运行的工作时会发生什么。图8.2显示了在三队列调度器中超时工作的情况。正如您在示例中看到的,作业以最高优先级(Q2)进入。在单个时间片10毫秒之后,调度器将工作的优先级降低1,因此任务是在Q1。在运行了一个时间片的Q1之后,工作最终被降低到系统(Q0)的最低优先级,在这个系统中它仍然存在。很简单,没有?


    例2:随之而来的是一份很短的工作。

    现在让我们来看一个更复杂的例子,并希望看到MLFQ如何尝试接近SJF。在本例中,有两个作业:A,这是一个长期运行的cpu密集型作业,而B是一个短期运行的交互式作业。假设A已经运行了一段时间,然后B到达。会发生什么呢?B的MLFQ近似SJF吗?图8.3绘制了该场景的结果。A(以黑色表示)在最低优先级队列中运行(就像任何长时间运行的cpu密集型作业一样)。B(以灰色显示)在T = 100时到达,因此是插入到最高队列中;由于它的运行时间很短(只有20毫秒),B在到达底部队列之前完成,在两个时间段内完成;然后继续运行(低优先级A)。


    从这个示例中,您可以理解该算法的主要目标之一。因为它不知道一份工作是一份短的工作还是一份长时间的工作,它首先假定它可能是一份短期的工作,因此给予工作高度优先。如果它实际上是一份短的工作,它将运行得很快并且完成。如果它不是一个短的工作,它将缓慢地向下移动队列,从而很快证明自己是一个长时间运行的类似批处理的过程。这样,MLFQ近似于SJF。

    例3:I/O呢?

    现在让我们来看一个带有一些I/O的例子。根据上面的规则4b状态,如果一个进程在使用它的时间片之前放弃了处理器,我们将它保持在相同的优先级。这个规则的意图很简单:例如,如果一个交互式作业正在做很多I/O(比如等待键盘或鼠标的用户输入),它将在它的时间片完成之前放弃CPU;在这种情况下,我们不希望对工作进行惩罚,从而使其保持在同一水平。图8.4显示了这个工作的一个示例,其中有一个交互式作业B(以灰色显示),在执行一个长时间运行的批处理作业a(以黑色表示)之前,需要CPU的CPU仅为1毫秒。


    我们当前的MLFQ问题。因此,我们有一个基本的MLFQ。它看起来做的很好,在长时间运行的工作之间共享CPU,并且允许短时间或I/ o密集型的交互式作业快速运行。

     不幸的是,我们迄今所开发的方法存在严重缺陷。你能想到什么吗?(这就是你停下来思考的地方)。首先,存在一个饥饿问题:如果系统中有太多的交互作业,它们将联合起来消耗所有的CPU时间,因此长时间运行的作业将永远不会收到任何CPU时间(它们会饿死)。即使在这种情况下,我们也想在这些工作上取得一些进展。首先,存在一个饥饿问题:如果系统中有太多的交互作业,它们将联合起来消耗所有的CPU时间,因此长时间运行的作业将永远不会收到任何CPU时间(它们会饿死)。即使在这种情况下,我们也想在这些工作上取得一些进展。第二,聪明的用户可以重写他们的程序来玩调度程序。游戏调度程序通常指的是做一些鬼鬼祟祟的事情来欺骗调度程序,让你得到比你应得的更多的资源。们所描述的算法容易受到以下攻击:在时间片结束之前,发出I/O操作(对一些您不关心的文件),从而放弃CPU;这样做可以让您保持在相同的队列中,从而获得较高的CPU时间百分比。如果做对了(例如,在放弃CPU之前运行99%的时间切片),那么工作几乎可以独占CPU。最后,一个程序可能会随着时间的推移而改变它的行为。什么是CPUbound可以过渡到一个互动性的阶段。用我们目前的方法,这样的工作是不幸运的,不像系统中的其他交互作业那样被对待。

    8.3尝试#2:优先级提升

    让我们试着改变规则,看看我们是否能避免饥饿的问题。我们能做些什么来保证cpu密集型的工作能够取得一些进展(即使这并不多?)这里的简单想法是周期性地提高系统中所有工作的优先级。有很多方法可以实现这一点,但是我们只做一些简单的事情:将它们全部放入最顶层的队列中;因此,一个新规则:Rule 5,在一段时间之后,将系统中的所有作业移到最顶层队列。

    我们的新规则立刻解决了两个问题:首先,保证进程不会饿死。坐在最上面的队列中。工作与其他高优先级的工作以循环式的方式共享CPU,从而最终得到服务。第二,如果一个cpu绑定的工作已经变成了交互式的,那么当它得到优先级提升后,调度器就会正确地处理它。让我们来看一个例子。在这个场景中,我们只展示了一个长时间运行的作业的行为,它与两个短期运行的交互式作业竞争CPU。图8.5(第6页)中显示了两个图。在左边,没有优先级提升,因此长时间运行的作业在两个短作业到达时就会被饿死;在右边,有一个优先级提高每50毫秒(这是可能的值太小,但这里使用的例子),因此我们至少保证长时间运行的工作取得了一些进展。每50毫秒被提升到最高优先级,从而定期运行。当然,时间周期的增加导致了一个明显的问题:应该设置什么。John Ousterhout,一个备受尊敬的系统研究人员(O11),过去常把这样的值称为voo-doo常量,因为它们似乎需要某种形式的黑魔法来正确地设置它们。不幸的是,S有这种味道。如果设定的太高,长时间的工作可能会饿死;太低,交互作业可能得不到适当的CPU份额。

    # 3:尝试更好的会计

    我们现在还有一个问题要解决:如何防止我们的调度程序的游戏?正如您可能已经猜到的,这里真正的罪魁祸首是规则4a和4b,它允许工作在时间片到期之前放弃CPU,从而保持优先级。我们应该怎么做。这里的解决方案是在MLFQ的每个级别上更好地计算CPU时间。调度程序应该保持跟踪,而不是忘记在给定的级别上使用多少时间片。一旦进程使用了它的分配,它将被降级到下一个优先队列。不论,它在一个长时间内使用时间片或许多小的片段并不重要。

    因此,我们将规则4a和4b重写为以下单一规则:规则4:一旦工作占用了给定级别的时间分配(不管它放弃了多少次CPU),它的优先级就降低了(即:它向下移动一个队列。让我们来看一个例子。图8.6(第7页)显示了当一个工作负载试图用旧的规则4a和4b(在左边)和新的反游戏规则4进行游戏时发生了什么。没有任何游戏的保护,一个进程可以在一个时间片结束前发出I/O,从而控制CPU时间。有了这样的保护,无论进程的I/O行为如何,它都会缓慢地向下移动队列,从而不能获得CPU的不公平份额。


    8.5优化MLFQ等问题

    其他一些问题也出现在MLFQ调度中。一个大问题是如何参数化这样的调度器。例如,应该有多少个队列。每个队列的时间片应该有多大?为了避免饥饿和解释行为的变化,应该优先提高优先级吗?对于这些问题没有简单的答案,因此只有对工作负载和调度器的后续调优的一些经验将导致一个令人满意的平衡。例如,大多数MLFQ变体允许在不同的队列中使用不同的时间片长度。高优先级队列通常是短时间片;毕竟,它们是由交互式作业组成的,因此它们之间的快速交互是有意义的(例如,10毫秒或更少的毫秒)。与此相反,低优先级队列包含的长时间运行的作业是cpu绑定的;因此,较长的时间片工作得很好(例如,100s)。在可能的情况下,避免使用voo-doo常量是一个好主意。不幸的是,就像上面的例子一样,这通常是困难的。人们可以尝试让系统学习一个好的价值,但这也不是简单的。常见的结果是:配置文件中充满了默认的参数值,经验丰富的管理员可以在不正确工作的情况下进行调整。正如您可以想象的那样,这些通常都是未修改的,因此我们希望这些缺省值在字段中运行良好。这个技巧是我们的老教授John Ousterhout带给你的,因此我们称之为Ousterhout s定律。Solaris MLFQ实现时间共享调度类,或者TS特别容易配置;它提供了一组表,确定过程的优先级如何在其整个生命周期中被改变,每个时间片是多长,以及如何经常提高工作的优先级[AD00]。管理员可以对这个表进行处理,以使调度程序以不同的方式运行。表的默认值是60个队列,从20毫秒(最高优先级)到几百毫秒(最低级)的时间片长度逐渐增加,每1秒左右就会增加优先级。其他MLFQ调度器不使用表或本章描述的精确规则;相反,他们使用数学公式来调整优先级。例如,FreeBSD调度器(版本4.3)使用一个公式来计算工作的当前优先级,基于该进程使用了多少CPU (LM+89);此外,随着时间的推移,使用会逐渐衰退,以不同的方式提供所需的优先级提升。请参阅Epema的论文,以获得对这种decay使用算法及其属性的优秀概述[E95]。

    最后,许多调度器还有一些您可能会遇到的其他特性。例如,一些调度器保留了操作系统工作的最高优先级;因此,典型的用户作业永远无法获得系统中最高的优先级。一些系统还允许一些用户建议来帮助设置优先级;例如,通过使用命令行实用工具,您可以增加或减少工作的优先级(某种程度上),从而增加或减少在任何给定时间运行的机会。请参阅手册页以获取更多信息。由于操作系统很少知道系统的每个进程的最佳状态,因此提供接口以允许用户或管理员向操作系统提供一些提示是非常有用的。我们经常把这样的建议称为建议,因为操作系统不一定要注意它,而是要考虑到建议,以便做出更好的决定。这些提示在操作系统的许多部分都很有用,包括调度器(例如,有nice)、内存管理器(如madvise)和文件系统(例如,通知预取和缓存[P+95])。MLFQ的有趣之处在于:它不是要求对工作性质的先验知识,而是观察工作的执行,并相应地优先考虑它。通过这种方式,它成功地实现了两个方面的优点:它可以提供出色的整体性能(类似于SJF/STCF),用于短期的交互式作业,并且是公平的,并为长期cpu密集型工作负载提供了进展。由于这个原因,许多系统,包括BSD UNIX衍生工具[LM+89, B86], Solaris [M06],以及Windows NT和后续的Windows操作系统[CS97]都采用了MLFQ的形式。

    展开全文
  • 多级反馈队列算法 Multilevel Feedback Queue, MFQ 基于可剥夺的动态优先级调度策略 当一个进程第一次进入系统时它被放置在优先级最高的就绪队列 当它第一次执行后并返回就绪状态时它被放置到次优先级的就绪队列中在...
  • 计算机操作系统多级反馈队列算法\多级反馈队列调度算法的相关算法。
  • 通常在使用多级队列调度算法时,进程进入系统时被永久地分配...相反,多级反馈队列(multievel feedback queue)调度算法允许进程在队列之间迁移。这种想法是,根据不同CPU执行的特点来区分进程。如果进程使用过多的C...

    通常在使用多级队列调度算法时,进程进入系统时被永久地分配到某个队列。例如,如果前台和后台进程分别具有单独队列,那么进程并不从一个队列移到另一个队列,这是因为进程不会改变前台或后台的性质。这种设置的优点是调度开销低,缺点是不够灵活。

    相反,多级反馈队列(multievel feedback queue)调度算法允许进程在队列之间迁移。这种想法是,根据不同CPU执行的特点来区分进程。如果进程使用过多的CPU时间,那么它会被移到更低的优先级队列。这种方案将I/O密集型和交互进程放在更高优先级队列上。 此外,在较低优先级队列中等待过长的进程会被移到更高优先级队列。这种形式的优化可阻止饥饿的发生。

    71f5188f353e7cfac03dc806ba547a0b.gif

    多级反馈队列

    例如,一个多级反馈队列的调度程序有三个队列,从02(如上图)。调度程序首先执行队列0内的所有进程。只有当队列0为空时,它才能执行队列1内的进程。类似地,只有队列01都为空时,队列2的进程才能执行。到达队列1的进程会抢占队列2的进程。同样,到达队列0的进程会抢占队列1的进程。

    每个进程在进入就绪队列后,就被添加到队列 0 内。队列 0 内的每个进程都有 8ms 的时间片。如果一个进程不能在这一时间片内完成,那么它就被移到队列1的尾部。如果队列0为空,队列 1 头部的进程会得到一个16ms 的时间片。如果它不能完成,那么将被抢占,并添加到队列2。只有当队列 01 为空时,队列 2 内的进程才可根据FCFS来运行。这种调度算法将给那些 CPU 执行不超过 8ms 的进程最高优先级。这类进程可以很快得到 CPU,完成 CPU 执行,并且处理下个 I/O 执行。
    所需超过 8ms 但不超过 24ms 的进程也会很快得以服务,但是它们的优先级要低一点。长进程会自动沉入队列2,队列01不用的CPU周期按 FCFS 顺序来服务。

    算法思想: 对其他调度算法的折中权衡。

    算法规则:

    a.设置多级就绪队列,各级队列优先级从高到低,时间片从小到大。

    b. 新进程到达时先进入第1级队列,按FCFS原则排队等待被分配时间片,若用完时间片进程还未结束,则进程进入下一级队列队尾。如果此时已经是在最下级的队列,则重新放回该队列队尾。

    c. 只有第k级队列为空时,才会为k+1级队头的进程分配时间片

    用于作业/进程调度: 用于进程调度

    是否可抢占? 抢占式算法

    优缺点: 对各类型进程相对公平(FCFS的优点);每个新到达的进程都可以很快就得到响应(RR优点);短进程只用较少的时间就可完成(SPF优点);不必实现估计进程的运行时间;可灵活地调整对各类进程的偏好程度,比如CPU密集型进程、I/O密集型进程(拓展:可以将因I/O而阻塞的进程重新放回原队列,这样I/O型进程就可以保持较高优先)

    是否会导致饥饿:

    通常,多级反馈队列调度程序可由下列参数来定义:

    1. 队列数量。
    2. 每个队列的调度算法。
    3. 用以确定何时升级到更高优先级队列的方法。
    4. 用以确定何时降级到更低优先级队列的方法。
    5. 用以确定进程在需要服务时将会进入哪个队列的方法。

    多级反馈队列调度程序的定义使其成为最通用的CPU调度算法。通过配置,它能适应所设计的特定系统。但是,由于需要一些方法来选择参数以定义最佳的调度程序,所以它也是最复杂的算法。

    展开全文
  • 多级反馈队列调度算法多级反馈队列调度算法多级反馈队列调度算法多级反馈队列调度算法多级反馈队列调度算法多级反馈队列调度算法多级反馈队列调度算法多级反馈队列调度算法
  • 多级反馈队列调度.cpp

    2021-03-04 14:50:35
    实现 CPU 调度算法多级反馈队列调度算法;
  • C语言实现多级反馈队列调度算法-计算机操作系统实验。C语言实现多级反馈队列调度算法-计算机操作系统实验。
  • 调度:多级反馈队列

    2021-01-22 05:52:44
    调度:多级反馈队列 目录调度:多级反馈队列1. MLFQ:基本规则8.2 尝试1:如何改变优先级3. 尝试2:提升优先级4. 尝试3:更好的计时方式5. MLFQ 调优及其他问题6. MLFQ:小结 多级反馈队列(Multi-level Feedback ...

    调度:多级反馈队列

    多级反馈队列(Multi-level Feedback Queue,MLFQ)

    • 优化周转时间
    • 降低响应时间

    问题:
    没有工作长度的先验(priori)知识,设计能同时减少响应时间和周转时间的调度程序。
    多级反馈队列
    多级反馈队列是从历史经验学习,并预测未来。

    1. MLFQ:基本规则

    MLFQ 中有许多独立的队列(queue),每个队列有不同的优先级(priority level)。任何时刻,一个工作只能存在于一个队列中。

    MLFQ 总是优先执行较高优先级的工作(即在较高级队列中的工作)。

    每个队列中可能会有多个工作,因此具有同样的优先级。在这种情况下,我们就对这些工作采用轮转调度。

    MLFQ根据观察到的行为调整任务的优先级。例如,如果一个工作不断放弃CPU 去等待键盘输入,这是交互型进程的可能行为,MLFQ 因此会让它保持高优先级。相反,如果一个工作长时间地占用 CPU,MLFQ 会降低其优先级。通过这种方式,MLFQ 在进程运行过程中学习其行为,从而利用工作的历史来预测它未来的行为。

    MLFQ 的两条基本规则:

    • 规则 1:如果 A 的优先级 > B 的优先级,运行 A(不运行 B)。
    • 规则 2:如果 A 的优先级 = B 的优先级,轮转运行 A 和 B。

    2. 尝试1:如何改变优先级

    在一个工作的生命周期中,MLFQ 如何改变其优先级?

    工作负载既有运行时间很短、频繁放弃 CPU 的交互型工作;也有需要很多 CPU 时间、响应时间却不重要的长时间计算密集型工作。

    优先级算法调整1

    • 规则 3:工作进入系统时,放在最高优先级(最上层队列)。
    • 规则 4a:工作用完整个时间片后,降低其优先级(移入下一个队列)。
    • 规则 4b:如果工作在其时间片以内主动释放 CPU,则优先级不变。

    说明:

    1. 如果不知道工作是短工作还是长工作,那么就在开始的时候假设其是短工作,并赋予最高优先级。如果确实是短工作,则很快会执行完毕,否则将被慢慢移入低优先级队列,而这时该工作也被认为是长工作了。通过这种方式,MLFQ 近似于 SJF。
    2. 假设交互型工作中有大量的 I/O 操作(比如等待用户的键盘或鼠标输入),它会在时间片用完之前放弃 CPU。在这种情况下,我们不想处罚它,只是保持它的优先级不变。

    存在的问题:

    1. 饥饿(starvation)问题。如果系统有“太多”交互型工作,就会不断占用
      CPU,导致长工作永远无法得到 CPU。
    2. 愚弄调度程序(game the scheduler)。
    3. 一个程序可能在不同时间表现不同。一个计算密集的进程可能在某段时间表现为一个交互型的进程。用目前的方法,它不会享受系统中其他交互型工作的待遇。

    3. 尝试2:提升优先级

    否避免饥饿问题,让 CPU 密集型工作也能取得一些进展。解决问题1, 3。

    一个简单的思路是周期性地提升(boost)所有工作的优先级。

    优先级算法调整2

    • 规则 5:经过一段时间 S,就将系统中所有工作重新加入最高优先级队列。

    时间段 S 如果设置得太高,长工作会饥饿;如果设置得太低,交互型工作又得不到合适的 CPU 时间比例。

    4. 尝试3:更好的计时方式

    为 MLFQ 的每层队列提供更完善的 CPU 计时方式(accounting),解决问题 2 。

    调度程序应该记录一个进程在某一层中消耗的总时间,而不是在调度时重新计时。只要进程用完了自己的配额,就将它降到低一优先级的队列中去。不论它是一次用完的,还是拆成很多次用完。重写规则 4a 和 4b 。

    优先级算法调整3

    • 规则 4:一旦工作用完了其在某一层中的时间配额(无论中间主动放弃了多少次CPU),就降低其优先级(移入低一级队列)。

    5. MLFQ 调优及其他问题

    如何配置一个调度程序:

    • 配置多少队列?
    • 每一层队列的时间片配置多大?
    • 该多久提升一次进程的优先级?(S)

    6. MLFQ:小结

    调度规则

    • 规则 1:如果 A 的优先级 > B 的优先级,运行 A(不运行 B)。
    • 规则 2:如果 A 的优先级 = B 的优先级,轮转运行 A 和 B。 规则 3:工作进入系统时,放在最高优先级(最上层队列)。
    • 规则 4:一旦工作用完了其在某一层中的时间配额(无论中间主动放弃了多少次CPU),就降低其优先级(移入低一级队列)。
    • 规则 5:经过一段时间 S,就将系统中所有工作重新加入最高优先级队列。

    MLFQ 不需要对工作的运行方式有先验知识,而是通过观察工作的运行来给出对应的优先级。通过这种方式,MLFQ 可以同时满足各种工作的需求:对于短时间运行的交互型工作,获得类似于 SJF/STCF 的很好的全局性能,同时对长时间运行的CPU 密集型负载也可以公平地、不断地稳步向前。

    展开全文
  • 多级队列:该算法将系统中的进程就绪队列从一个拆分为若干个...多级反馈队列:1)设置多个就绪队列。在系统中设置多个就绪队列,并未每个队列赋予不同的优先级。第一个队列的优先级最高,第二个次之,其余的优先级逐个

    多级队列:该算法将系统中的进程就绪队列从一个拆分为若干个,将不同类型或性质的进程固定分配在不同的就绪队列,不同的就绪队列采用不同的调度算法,一个就绪队列中的进程可以设置不同的优先级,不同的就绪队列本身也可以设置不同的优先级。
    多级队列调度算法由于设置多个就绪队列,因此对每个就绪队列就可以实施不同的调度算法,因此,系统针对不同用户进程的需求,很容易提供多种调度策略。

    多级反馈队列:1)设置多个就绪队列。在系统中设置多个就绪队列,并未每个队列赋予不同的优先级。第一个队列的优先级最高,第二个次之,其余的优先级逐个降低。该算法为不同的队列中的进程所赋予的执行时间片的大小也各不相同,在优先级愈高的队列中,其时间片就愈小。
    2)每个队列都采用FCFS算法。3)按队列优先级调度。

    展开全文
  • 多级反馈队列算法 c语言多级反馈队列算法 c语言多级反馈队列算法 c语言
  • 多级反馈队列调度C语言设计进程控制块PCB表结构,适用于多级反馈队列调度算法。PCB结构通常包括以下信息:进程名,进程优先数,轮转时间片,进程已占用的CPU时间,进程还需要的CPU时间,进程的状态,当前队列指针等...
  • 本文件是对操作系统进程多级反馈队列调度算法的设计与实现,算法以txt的形式输入输出,其中包含设计报告
  • 实验报告六磁盘调度算法班级:软技2班学号:201467003084姓名:刘道林一.实验内容:熟悉磁盘的结构以及磁盘的驱动调度算法的模拟,编程实现简单常用的磁盘驱动调度算法先来先服务(FIFO)、电梯调度算法、最短寻找...
  • 操作系统多级反馈队列模拟程序,用c语言编写完成,有完整的源代码及详细报告
  • 多级反馈队列 队列实现
  • 多级反馈队列调度

    2011-09-24 20:04:56
    多级反馈队列调度的源代码以及实验报告~~~~
  • 多级反馈队列简图

    千次阅读 2018-10-03 00:50:18
    图:多级反馈队列 除最后一层采用FCFS算法,最后一层采用RR算法。
  • 多级反馈队列进程调度GUI实现,使用Swing编写的一个可视化界面,支持进程的动态创建,进程调度过程可视化。
  • 多级反馈队列调度算法是一种CPU处理机调度算法,UNIX操作系统采取的便是这种调度算法。多级反馈队列调度算法即能使高优先级的作业得到响应又能使短作业(进程)迅速完成。(对比一下FCFS与高优先响应比调度算法的缺陷)...
  • 多级反馈队列实验的算法和文档,完全准确运行。供学习使用参考
  • 相关文章 总结 以上是编程之家为你收集整理的C语言实现多级反馈队列调度算法全部内容,希望文章能够帮你解决C语言实现多级反馈队列调度算法所遇到的程序开发问题。 如果觉得编程之家网站内容还不错,欢迎将编程之家...
  • 多级反馈队列调度算法可以如下原理: 1、设有N个队列(Q1,Q2…QN),其中各个队列对于处理机的优先级是不一样的,也就是说位于各个队列中的作业(进程)的优先级也是不一样的。一般来说,优先级Priority(Q1) > ...
  • 通过模拟多级反馈队列算法的调度过程,加深对处理机调度算法的理解。 实验内容 编写一个C语言程序,模拟多级反馈队列调度算法。 程序流程图 (见附件) 实验结果 经过实验,加深了我对多级反馈队列调度算法的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 558
精华内容 223
关键字:

多级反馈队列