㈠ 什么rm调度算法
一个任务的响应时间(response time)是指一个任务请求, 这个任务实际完成的时间跨度. 在静态调度中, 任务的临界时刻(critical instant)这个概念被首先提出来. 它被定义为一个特定的时刻, 如果在这个时刻有这个任务的请求, 那么这个任务就会需要最大的响应时间. 由此得出 定理1: 一个任务的临界时间就是比这个任务优先级高的所有任务同时发出请求的时刻. 定理1的价值在于它找到了一个证明一个调度算法能否调度任一任务集充分必要条件, 那就是所有任务同时请求执行的时的情况下每个任务仍能满足各自的期限, 那么这个任务集就可以被这个调度算法调度. 有了这个推论, 我们就可以证明RM调度的最优性了. 定理2: 如果一个任务集能够被静态调度, 那么RMS算法就能够调度这个任务集. 从这个意义上说, RMS是最优的静态调度算法. 这个定理的证明方法就是有名的交换法. 证明思路如下: 假设一个任务集S采用其他静态优先级算法可以调度,那么总有这样两个优先级相邻的任务i和j, 有Ti>Tj,而Pi≤Pj.把Ti和Tj的优先级Pi和Pj互换,明显可以看出这时S仍然可以调度, 因为在所有任务同时请求的情况下, 交换这两个任务不会影响其它任务的完成时间, 同时这两个任务都可以在各自期限内完成. 按照这样的方法,其他任何静态优先级调度最终都可以转换成RM调度. RMS已被证明是静态最优调度算法, 开销小, 灵活性好, 是实时调度的基础性理论。即使系统瞬时过载, 也完全可预测哪些任务丢失时限。缺点是处理机利用率较低, 最坏的情况下,当n→∞时, 不超过ln2 (≈ 70%)。另外, RMS是充分但非必要条件。而在一般情况下,对于随机的任务集大约只有88%. 70%或者88%的处理器利用率对于许多实时应用来说是一个严重的限制,动态调度算法如最早截止期最先(earliest deadline first,EDF)或者最少空闲时间最先(least laxity first,LLF)已经被证明是最优的,并且能够实现100% 的处理器利用率. 具有资源同步约束的RMS调度 当实时任务间共享资源时, 可能出现低优先级任务不可预测地阻塞高优先级任务执行的情况, 叫优先级倒置。这时RMS 算法不能保证任务集的调度, 必须使用有关协议控制优先级的倒置时间。常用的协议有优先级顶级协议和堆资源协议, 使用这些协议可使优先级的倒置时间最多为一个资源临界段的执行时间, 并且不会发生死锁。 基于RMS 的非周期任务的调度 实时系统中的非周期任务可采用延迟服务器算法或随机服务器算法进行调度。它们的最大特点是可在周期任务的实时调度环境下处理随机请求。两者的基本思想是将非周期任务转化成周期任务, 再利用RMS算法进行调度。前者用一个或几个专用的周期任务执行所有非周期任务, 这种周期任务叫非周期任务服务器。根据周期大小,服务器有固定优先级, 服务器的执行时间被称为预算, 它在每个服务器周期Ts 的起点补充。只要服务器有充足的预算, 就可在其周期内为非周期任务服务。该算法实现简单, 但可调度性分析较难, 有时会出现抖动, 可能发生一个非周期任务在相邻两个服务器周期中连续执行2倍预算的现象, 与RMS理论不符, 需要适当修改RMS算法。随机服务器算法与延迟服务器算法相似, 但预算不是在每个周期起点补充, 而是在预算消耗Ts时间之后再补充。该算法与RMS分析算法一致, 但实现复杂。 EDF最早截止时间优先算法(EDF)也称为截止时间驱动调度算法(DDS),是一种动态调度算法。EDF指在调度时,任务的优先级更具任务的截止时间动态分配。截止时间越短,优先级越高。EDF有如下定理: 定理2:如果一个任务集按EDF算法调度,当且仅当U<=1。 EDF的特点(1) 任务模型: 与RMS 调度相同。 (2) 优先级分配方法: 动态分配, 距要求时限所剩时间越短优先级越高。 理论上,EDF和LLF算法都是单处理器下的最优调度算法。但是由于EDF和LLF在每个调度时刻都要计算任务的deadline或者空闲时间,并根据计算结果改变任务优先级,因此开销大、不易实现,其应用受到一定限制。多处理器实时调度
㈡ 进程调度的实时系统
最简单最直观的进程调度策略是基于优先级的调度,多数实时系统采用基于优先级的调度,每个进程根据它重要程度的不同被赋予不同的优先级,调度器在每次调度时,总选择优先级最高的进程开始执行.
首先要考虑的问题是如何分配优先级,对于进程优先级的分配可以采用静态和动态两种方式,静态优先级调度算法:这种调度算法给那些系统中得到运行的所有进程都静态地分配一个优先级.静态优先级的分配可以根据应用的属性来进行,比如进程的周期,用户优先级,或者其它的预先确定的策略.单调率算法(RM)调度算法是一种典型的静态优先级调度算法,它根据进程的执行周期的长短来决定调度优先级,那些具有小的执行周期的进程具有较高的优先级.动态优先级调度算法:这种调度算法根据进程的资源需求来动态地分配进程的优先级,其目的就是在资源分配和调度时有更大的灵活性.在实时系统中,最早期限优先算法(EDF)算法是使用最多的一种动态优先级调度算法,该算法给就绪队列中的各个进程根据它们的截止期限(Deadline)来分配优先级,具有最近的截止期限的进程具有最高的优先级.
分配好优先级之后下一个要考虑的问题是何时让高优先级进程掌握CPU的使用权,这取决于操作系统的内核,有不可抢占式和可抢占式两种.
不可抢占式内核要求每个进程自我放弃CPU的所有权,各个进程彼此合作共享一个CPU.异步事件还是由中断服务来处理.中断服务可以使一个高优先级的进程由挂起状态变为就绪状态.但中断服务以后控制权还是回到原来被中断了的那个进程,直到该进程主动放弃CPU的使用权时,那个高优先级的进程才能获得CPU的使用权.这就出现了响应时间的问题,高优先级的进程已经进入了就绪状态但不能执行,这样进程的响应时间变得不再确定这与实时系统的要求不符,因此一般的实时操作系统都要求是可抢占式的内核,当一个运行着的进程使一个比它优先级高的进程进入了就绪态,当前进程的CPU使用权就被剥夺了,或者说被挂起了,那个高优先级的进程立刻得到了CPU的控制权,如果是中断服务子程序使一个高优先级的进程进入就绪态,中断完成时,中断了的进程被挂起,优先级高的那个进程开始运行.在这种内核设置下,多个进程可能处于并发的状态,这就出现了多个进程共享资源的情况,因此我们需要设置信号量来保证临界资源的正确使用,任何一个想使用临界资源的进程在进入临界区之前必须拥有使用临界资源的信号量,否则不可以执行临界区代码.
这样基于优先级的可抢占式进程调度策略就基本架构完成,但此时仍然有系统崩溃的危险,假设系统中有3个进程,分别为p1,p2和p3. p1的优先权高于p2,而p2的优先权高于p3.恰在此时p1和p2 因某种原因被阻塞,这时候系统调度p3执行.p3执行一段时间后,p1被唤醒.由于采取的是PBP的调度策略,因此p1抢占 p3的CPU, p1执行.p1执行一段时间后要进入临界区,但此时p3占有此临界资源的信号量.因此p1被阻塞,处于等待状态,等待p3 释放此信号量.经过这么一段时间后,p2此时此刻处于就绪状态.因此系统调度p2执行.如果p3在p2的执行期间一直没有能够被调度执行的话,那p1和p3将一直等到p2执行完后才能执行,p1更要等到p3释放它所把持的信号量才能执行;而这段时间完全有可能超出p1的Deadline,使得p1崩溃.我们看到在这个过程中,由于临界资源的使用问题使得优先级低的进程先于优先级高的进程先执行,这就出现了优先级反转的问题,从而造成了系统崩溃,对于这个问题可以采用优先级继承的办法来进行解决.在优先级继承方案中,当高优先级进程在等待低优先级的进程占有的信号量时,让低优先级进程继承高优先级进程的优先级,即把低优先级进程的优先权提高到高优先级进程的优先级;当低优先级进程释放高优先级进程等待的信号量时,立即把其优先权降低到原来的优先权.采用这种方法可以有效地解决上面所述的优先权反转的问题.当高优先级进程p1想要进入临界区时,由于低优先级进程p3占有这个临界资源的信号量,导致p1被阻塞.这时候,系统把p3的优先权升到p1的优先权,此时优先权处于p1和p3之间的进程p2,即使处于就绪状态也不可以被调度执行,因为此时p3的优先权已经高于p2,所以p3此时被调度执行.当p3释放p1需要的信号量时,系统立即把p3的优先权降到原来的高度,来保证p1和p2正常有序执行,有许多实时系统是采用这种方法来防止优先级反转的,如VXWORKS. 对于那些具有稳定,已知输入的简单系统,可以使用时间驱动的调度算法,它能够为数据处理提供很好的预测性.这种调度算法本质上是一种设计时就确定下来的离线的静态调度方法.在系统的设计阶段,在明确系统中所有的处理情况下,对于各个进程的开始,切换,以及结束时间等就事先做出明确的安排和设计.这种调度算法适合于那些很小的嵌入式系统,自控系统,传感器等应用环境.这种调度算法的优点是进程的执行有很好的可预测性,但最大的缺点是缺乏灵活性,并且会出现有进程需要被执行而 CPU 却保持空闲的情况.
对于不同要求下的实时系统可以采用不同的进程调度策略来进行设计,也可以将这些方法进行综合之后得到更适合的调度策略.
㈢ linux调度算法的核心思想是什么
第一部分:实时调度算法
什么是实时系统,POSIX 1003.b作了这样的定义:是指系统可以在有限响应时间内提供所需的服务级别。较可取被定义为由Donald乔利士的的:一个实时系统的程序的逻辑正确性不仅取决于计算的准确度,而且还对结果,如果系统时间的限制不能满足将是一个系统错误发生。
基于实时系统的实时性要求的不同,可分为软实时和硬实时两种。硬实时系统是指系统必须确保,在最坏情况下的服务时间,截止日期为事件的响应时间是在任何情况下,必须满足。如航天飞船的控制是这样一个系统的现实。所有其他实时系统的特点,可以称为软实时系统。如果清除,软实时系统是那些从统计学的角度来看,一个任务(在下面的讨论中,我们将有任务和过程不作出区分),以确保系统的处理时间,可以得到事件可以处理的最后期限到来之前,违反的最后期限,并不会带来一个致命的错误,如实时多媒体系统是一种软实时系统。
一台电脑系统的CPU和其他资源进行有效的调度和管理,以提供实时操作系统的支持。的多任务的实时系统中,资源的调度和管理更复杂的。下面讨论本文将从各种实时任务调度算法的分类的角度来看,普通的Linux操作系统进程调度和各种实时Linux系统,然后研究,以支持实时特点,普通的Linux系统的改进。实时领域的一些问题,并总结了各种实时Linux的Linux操作系统,归根到底是如何解决这些问题。
CPU的实时调度算法的分类
多种实时操作系统的实时调度算法可以分为以下三类Wang99] [Gopalan01]:基于优先级调度算法(优先级驱动调度PD),基于在共享的CPU使用率调度算法(分享驱动调度SD)的比例,以及基于时间的进程调度算法(时间驱动调度TD),下面这三种调度算法逐一介绍。
1.1
/>基于优先级的调度算法,基于优先级的调度算法,每个进程被分配一个优先级,每次的进程调度程序,调度程序总是具有最高的调度优先级的任务执行。根据不同的优先级分配方法,基于优先级的调度算法可以分为以下两种类型的Krishna01] [Wang99]:静态优先级调度算法
该算法得到这些系统中运行的所有进程都静态分配一个优先级。静态优先级分配的属性的应用程序,如任务循环中的用户优先级,或其他预先确定的政策。 RM(速率单调)的调度算法是一个典型的静态优先级的调度算法,根据执行的任务的调度优先级的周期的长度确定,那些具有小的执行周期的任务的优先级较高。
动态优先级调度算法:
该算法基于任务的资源需求动态地分配任务的优先级,资源分配和调度的目的更大的灵活性。非实时系统,这种算法有很多,如短作业优先级调度算法。任务的实时调度算法,EDF算法是使用最广泛的动态优先级调度算法,该算法根据他们的截止日期(截止日期)分配优先级的就绪队列中的每个任务,最近期限具有最高的优先级。
1.2
基于优先级调度算法的调度算法是简单而有效的,但这种算法的基础上按比例份额是一个硬实时调度,许多的情况下,不适合使用此算法:例如,软实时应用,如实时多媒体会议系统。对于软实时应用程序,共享资源调度算法(SD算法)的比例使用是更合适的。
比例共享调度算法是指对CPU使用率的比例共享调度算法,其基本思路是按照一定的权重(比率),需要一组调度安排任务,以使它们的权重成比例的执行时间。
要实现比例共享调度算法[Nieh01]有两种方法:第一种方法是调整的准备过程中出现的调度队列队第一频率,并安排一线队的过程中,执行第二种方法是连续调度进程就绪队列中投产,但根据调整分配一个进程的运行时间片分配的权重。
比例共享调度算法可以分为以下类别:循环赛,公平份额,公平排队,的彩票调度方法,(彩票)。
比例共享调度算法的一个问题是,它并没有定义任何优先的概念,所有的任务都根据其应用的CPU资源的比例共享系统过载时,执行的所有任务将较慢比例。因此,为了确保该系统的实时过程中获得一定量的CPU处理时间,一般采用的是动态权重的调整过程。
1.3。基于时间进程调度算法的调度算法
对于那些具有稳定,简单的系统已知输入,您可以使用时间驱动(驱动时间时间:TD)数据处理,它可以提供一个良好的预测。这种调度算法本质上是一个设计定型的离线静态调度方法。在系统的设计阶段,所有处理的情况下,在明确的制度,每个任务切换的开始和结束的时间提前做出了明确的安排和设计。该算法是适用于小型嵌入式系统,自动化控制系统,传感器和其他应用环境。
该算法的优势是良好的可预测性任务的执行,但最大的缺点是缺乏灵活性,而且会有一个任务需要执行,而CPU保持空闲。
一般的Linux系统CPU调度
一般的Linux系统支持实时和非实时两种进程,实时进程与普通进程方面具有绝对的优先权。相应地,实时进程调度策略SCHED_FIFO或SCHED_RR,普通进程SCHED_OTHER调度策略。
每个任务调度算法的实现在Linux四种调度参数,它们是rt_priority优先政策(尼斯),计数器。调度进程调度的基础上,这四个参数。
SCHED_OTHER调度策略,调度程序总是会选择优先级+计数器的值进程调度的执行。从逻辑分析存在SCHED_OTHER调度策略调度处理来执行,其特征在于,所述优先级是一个固定的调度周期(历元),在每个调度周期内的过程中的优先级,计数器的值的大小的影响这一刻已经确定变量值的过程中被创建时,它代表了进程的优先级,也代表数量的时间片,通过该方法可以得到在每个调度周期内,计数器是一个动态值,它反映了当前调度周期的过程中,剩余的时间片。在每个调度周期的开始,分配给优先级值计数器,那么每一次进程被调度运行计数器的值?减少。当计数器的值是零,这个过程已经运行的时间片调度期内,不再参与调度周期进程调度。当所有的进程都用完了时间片调度期结束,然后一遍又一遍。此外,可以看出在Linux系统中的调度周期是不固定的,它的量是动态变化的,例如,在运行的进程的数目和它们的优先级值?可以影响一个划时代的长度。有一点值得注意的是,在2.4内核中,首要任务是不错的替换两个类似的作用。
按比例分担的调度策略调度策略SCHED_OTHER可见的性质,它的这种设计方法,以确保进程调度的公平性 - 一个低优先级进程,在每个时代也将得到他们的份额那些CPU的执行时间,此外,它也提供了不同的进程的优先级,进程执行时间可以得到更多的具有高优先级值。
对于实时的过程中,他们使用基于实时优先级rt_priority的优先级调度策略,但相同的实时优先级的进程调度方法是根据不同的调度策略,
BR /> SCHED_FIFO:不同的进程,根据静态优先级排队,然后在相同的优先级队列,先准备好运行的第一谁调度和运行的进程不会被终止,直到发生以下情况:1。高优先级的进程篡夺了CPU;自己的资源请求受阻;自己主动放弃CPU(呼叫SCHED_YIELD);
SCHED_RR是这样的:这个调度策略SCHED_FIFO与上述完全相同,除了时间片分配给每个进程,正在实施的过程中,给执行时间片,时间片的长度可以通过sched_rr_get_interval调用
由于Linux系统本身是一个桌面导向的系统,因此,它是用于在实时应用中的一些问题:/> /> Linux系统调度单位是10ms,所以它不能提供精确的定时中断; p>当一个进程调用系统调用进入内核模式运行,它不能被抢占;
Linux内核实现大量采用了封闭中断操作损失;
由于使用虚拟内存技术,当发生页面错误时,从硬盘中读取的数据交换的需要,但硬盘读取和写入的存储位置的随机性,将导致随机读取和写入时间,这在某些情况下,会影响实时任务期限;
虽然Linux的进程调度器还支持实时优先级,但由于缺乏有效的实时任务调度机制和调度算法;其网络子协议处理和其它设备的中断处理,调度伴有相应的过程和自己的有没有明确的调度机制;
各种实时Linux系统
Home>的的
3.1 RT-Linux和RTAI
RT-Linux是新墨西哥大学的研究(新墨西哥州技术学院)[RTLinuxWeb] [Barabanov97。其基本思路是,在Linux系统上的硬实时支持,它实现了一个微内核实时操作系统(也被称为RT-Linux的实时子系统),而普通的Linux系统作为一个低优先级任务在操作系统中运行。在正常的Linux系统的另一个任务可以沟通,通过FIFO和实时任务。 RT-Linux的框架如图1所示:
图1 RT-Linux的结构
RT-Linux的关键技术是软件模拟硬件中断控制器。当Linux系统不时阻止CPU中断,实时定量RT-Linux的子系统的请求拦截,爱不释手,而事实上并没有真正阻止硬件中断,从而避免了由于中断造成的封由系统在一段时间内没有响应,从而在改进的实时。当传递给Linux内核的RT-Linux的一个硬件中断到达截取的中断,并确定是否有一个实时子系统中断例程来处理或处理。此外,的最小定时的精度在正常的Linux系统是确定系统的实时时钟的频率,Linux的系统时钟被设置到时钟中断每秒100,所以在Linux的系统定时的精度10毫秒,即时钟周期10ms时,RT-Linux的实时时钟设置为单触发状态,可以提供更多的十几微秒调度粒度。
RT-Linux实时子系统的任务调度优先级驱动算法,RM,EDF等,也可用于其他调度算法。
RT-Linux的专有系统,重型工作,的确是一个不错的选择,但他只提供了CPU资源的调度和实时系统和Linux系统的关系不是非常密切,因此开发人员可以充分利用已在Linux系统中,如协议栈实现的功能。 RT-Linux的工业控制等实时任务简单和硬实时要求的环境,但大量的工作需要做,如果你想应用的多媒体处理。
意大利实时应用程序接口(RTAI)来自RT-Linux的,它是在设计和RT-Linux的思想相同。这是原来的设计中,为了解决问题,RT-Linux的不同版本的Linux之间很难很难移植,RTAI在Linux上定义的实时硬件抽象层,这个抽象层接口提供实时任务Linux系统的相互作用,这可以增加一点可以Linux内核源代码到Linux内核的实时支持。
3.2。 KURT-Linux的
KURT-Linux的堪萨斯大学开发的,它可以提供实时微秒精度[KurtWeb] [斯里尼瓦桑]。与RT-Linux的单独实现一个实时内核,KURT-Linux是常用的Linux系统的基础上实现的,这也是第一个基于Linux的实时系统可以使用普通的Linux系统调用。
KURT-Linux系统分为三种状态:正常状态,实时状态和混合状态,在正常状态下,它使用普通的Linux实时运行状态实时调度策略任务,实时和非实时任务的混合状态,可以执行实时状态可以被用来为实时的要求更加严格。
为了提高Linux系统的实时特性,有必要提高精度的时钟系统的支持。但是,如果只是简单地增加时钟频率将导致调度负载的增加,从而严重降低系统的性能。为了解决这个矛盾,KURT-Linux中使用的时钟精度的方法[UTIMEWeb]提高Linux系统UTIME,时钟芯片设置为单次触发状态(单拍模式),也就是每个时钟芯片设置超时,然后再次超时事件发生时,在时钟中断的处理程序所需的时钟芯片设置一个超时。其基本思想是一个精确的时间意味着我们需要的时钟中断发生时,我们需要一个更精确的时间,以达到这样的精度,但并不一定需要系统时钟频率。它采用了CPU时钟计数器时间戳计数器(TSC)提供准确的CPU频率精度的时间。
KURT-Linux的实时任务调度,使用静态CPU的实时调度算法,基于时间(TD)。实时任务需要实时事件发生在设计阶段就必须清楚列明。该算法可以实现更好的调度任务,对于那些谁周期。
KURT-Linux的相RT-Linux的优势之一是,你可以使用系统调用的Linux系统,它最初是专为硬实时支持,但因为它是简单的实现将使用一个简单的时间驱动调度取代Linux的调度,实时进程调度的影响等非实时任务,在某些情况下会发生实时任务的截止日期是脆弱的不符合的,也被称为严格的实时系统(快地实时)。基于KURT-Linux的应用程序:艺术(ATM参考交通系统),多媒体播放软件。 KURT-Linux的另一种方法,需要频繁的时钟芯片编程。
3.3。 RED-Linux的
RED-Linux是加州大学尔湾,实时Linux系统的发展[REDWeb] [Wang99],它将支持实时调度和Linux实现相同的操作系统内核。它支持三种类型的调度算法,即:时间驱动优先Dirven,分享驱动。
为了提高系统的调度粒度,RED-Linux的学习RT-Linux的软件模拟中断的管理机制,并增加频率的时钟中断。 RED-Linux的中断仿真程序只是简单地中断会在队列中排队一个硬件中断到来时,并没有进行实际的中断处理程序。
另外,为了解决Linux的内核模式的过程中不能被中断,RED-Linux的插入Linux内核抢占点原语的众多功能,使这一进程在内核模式下,也在一定程度上被抢占。通过这种方法提高了内核的实时特性。
RED-Linux的设计目标是提供常规调度框架可以支持多种调度算法,系统为每个任务增加几个属性,进程调度的基础上:
优先级:作业的优先级;
开始时间:工作的开始时间;
完成时间:工作的结束时间; BR p>预算:资源的数量在操作过程中要使用的工作;
调整值?这些属性和调度根据什么优先使用的这些属性值几乎所有的调度算法。在这种情况下,三种不同的调度算法无缝地一起耦合到一个统一的。