精华内容
下载资源
问答
  • 什么是真正的实时操作系统

    万次阅读 多人点赞 2018-07-19 14:40:34
    做嵌入式系统开发一段时间了,做过用于手机平台的嵌入式Linux,也接触过用于交换机、媒体网关平台的VxWorks,实际应用后回过头来看理论,才发现自己理解的肤浅,也发现CSDN上好多同学们都对实时、嵌入式这些概念...

    做嵌入式系统开发有一段时间了,做过用于手机平台的嵌入式Linux,也接触过用于交换机、媒体网关平台的VxWorks,实际应用后回过头来看理论,才发现自己理解的肤浅,也发现CSDN上好多同学们都对实时、嵌入式这些概念似懂非懂,毕竟如果不做类似的产品,平时接触的机会很少,即使做嵌入式产品开发,基本也是只管调用Platform team封装好的API。所以在此总结一下这些概念,加深自己的理解,同时也给新手入门,欢迎大家拍砖,争取写个连载,本文先总结一下实时的概念,什么是真正的实时操作系统?

     

    1. 首先说一下实时的定义及要求:

     

    参见 Donal Gillies 在 Realtime Computing FAQ 中提出定义:实时系统指系统的计算正确性不仅取决于计算的逻辑正确性,还取决于产生结果的时间。如果未满足系统的时间约束,则认为系统失效。
    http://www.faqs.org/faqs/realtime-computing/faq/

     

    一个实时操作系统面对变化的负载(从最小到最坏的情况)时必须确定性地保证满足时间要求。请注意,必须要满足确定性,而不是要求速度足够快!例如,如果使用足够强大的CPU,Windows在CPU空闲时可以提供非常短的典型中断响应,但是,当某些后台任务正在运行时,有时候响应会变得非常漫长,以至于某一个简单的读取文件的任务会长时间无响应,甚至直接挂死。这是一个基本的问题:并不是Windows不够快或效率不够高,而是因为它不能提供确定性,所以,Windows不是一个实时操作系统

     

     

    根据实际应用,可以选择采用硬实时操作系统或软实时操作系统,硬实时当然比软实时好,但是,如果你的公司正在准备开发一款商用软件,那请你注意了,业界公认比较好的VxWorks(WindRiver开发),会花光你本来就很少的银子,而软实时的操作系统,如某些实时Linux,一般是开源免费的,我们公司本来的产品就是基于VxWorks的,现在业界都在Cost Reduction,为了响应号召,正在调研如何把平台换成免费的嵌入式实时Linux。同学们,如何选择,自己考虑吧:-)

     

     

    硬实时 - 代表产品 VxWorks

     

     

    举一个经常使用的实例,中高档汽车中使用的气囊。当报告车辆碰撞的传感器中断CPU后,操作系统应快速地分配展开气囊的任务,并且不允许任何其他非实时处理进行干扰,晚一秒钟展开气囊比没有气囊的情况更糟糕,这就是一个典型的必须使用硬实时的系统。

     

     

    硬实时系统指系统要有确保的最坏情况下的服务时间,即对于事件的响应时间的截止期限是无论如何都必须得到满足。

     

     

    软实时 - 代表产品 软实时Linux

     

     

    再举一个实例,IPTV数字电视机顶盒,需要实时的处理(解码)视频流,如果丢失了一个或几个视频帧,显然会造成视频的品质更差,但是只要做过简单的抖动处理的系统,丢失几个视频帧就不会对整个系统造成不可挽救的影响。

     

     

    软实时系统就是那些从统计的角度来说,一个任务能够得到有确保的处理时间,到达系统的事件也能够在截止期限到来之前得到处理,但违反截止期限并不会带来致命的错误。

    ---------------------------------------------

     

     

    请注意:讲到这里,想花点墨水区分一下实时和嵌入式的概念,因为笔者也长时间把这两者混为一谈。实时操作系统的概念上文已经讲的很清楚了,主要就是要能确定性的满足时间要求。嵌入式系统很难下一个定义,有兴趣的可以百科一下“嵌入式系统”,一般可以认为是板子或芯片上软硬件的总和,嵌入式系统一定要对实时任务有很强的支持能力,所以一般嵌入式系统都会采用实时操作系统,根据不同应用,选择采用硬实时或软实时。

    ---------------------------------------------

     

     

    2. 如何衡量一个实时操作系统的实时性能?

     

     

    主要有以下两个重要指标:

     

     

    指标1、中断响应时间(可屏蔽中断)

     

     

    计算机接收到中断信号到操作系统作出响应,并完成切换转入中断服务程序的时间。对于抢先式内核,要先调用一个特定的函数,该函数通知内核即将进行中断服务,使得内核可以跟踪中断的嵌套。抢先式内核的中断响应时间由下式给出:
    中断响应时间=关中断的最长时间+保护CPU 内部寄存器的时间+进入中断服务函数的执行时间+开始执行中断服务例程(ISR)的第一条指令时间

     

     

    请注意:中断响应时间是系统在最坏情况下响应中断的时间,某系统100次中有99次在50ms之内响应中断,只有一次响应中断的时间是250ms,只能认为中断响应时间是250ms。

     

     

    指标2、任务切换时间

     

     

    除为中断处理提供确定性外,实时处理也需要支持周期性间隔的任务调度。大量控制系统要求周期性采样与处理。某个特定任务必须按照固定的周期(p)执行,从而确保系统的稳定性。考虑一下汽车的防抱死系统(ABS)。控制系统对车辆的每个车轮的转速进行采样(每秒最多 20 次)并控制每个制动器的压力(防止它锁死)。为了保持控制系统的正常工作,传感器的采样与控制必须按照一定的周期间隔。这意味着必须抢占其他处理,以便 ABS 任务能按照期望的周期执行。

     

     

    当多任务内核决定运行另外的任务时,它把正在运行任务的当前状态(即CPU 寄存器中的全部内容)保存到任务自己的栈区之中。然后把下一个将要运行的任务的当前状态从该任务的栈中重新装入CPU 的寄存器,并开始下一个任务的运行。这个过程就称为任务切换。做任务切换所需要的时间取决于CPU 有多少寄存器要入栈。CPU 的寄存器越多,额外负荷就越重。

     

     

    系统实时性能重要指标的典型值
    -----------------------------------------------------
                      VxWorks    uC/OS-II        RT-Linux2.0  QNX6  
    硬件平台  MC68000  33MHz-486  60MHz-486   33MHz-486  
    任务切换  3.8us          < 9us            不详                12.57us  
    中断响应  < 3us          < 7.5us         25us                7.54us  
    -----------------------------------------------------

     

     

    参考文献:《4种实时操作系统实时性的分析对比》 - 百度一下可以搜到

     

     

    3. 实时操作系统的核心 - 任务调度(VxWorks)

     

     

    既然实时性对于实时操作系统如此重要,同学们,我们下面就来学习一下实现实时性的核心模块 - 任务调度。笔者所在的公司花了大把银子购买风河的VxWorks,但是为了实现自己的可控性,除了任务调度模块以外全部重写,包括内存管理、文件管理等其他核心模块,但唯独任务调度模块除外,这可是人家的压箱底法宝:-)

     

     

    构成应用软件系统的程序集合中,独立的、相互作用的程序单元,在其执行时称之为任务,从系统的角度来看,任务是竞争系统资源的最小运行单元。单个CPU 中,多任务机制制造了一个多个任务同时执行的假象。其实系统只是根据一个多任务调度算法,将内核插入到这些任务中执行。实时系统VxWorks的一个任务可有多种状态,但最基本的状态有以下四种:

     

     

    1) 就绪态(Ready):任务只等待系统分配CUP资源。
    2) 挂起态(Pend):任务需等待某些不可利用的资源而被阻塞。
    3) 休眠态(Sleep):如果系统不需要某一个任务工作,则这个任务处于休眠状态。
    4) 延迟态(Delay):任务被延迟时所处的状态。

     

     

    大家可以在网上搜一下VxWorks任务调度的相关文章,一般都会配状态机图。

    ----------------------------

     

     

    请注意:任务(task)、进程(process)、线程(thread)等概念相互联系又相互区别,因为不是本文的重点,这里不多解释,如果想详细了解推荐看一看“Windows Kernel Programming”。在VxWorks中,因为每个任务没有自己独立的虚拟内存空间,可以把任务理解为线程。 

    ----------------------------

     

    任务由系统内核调度运行一段固定长度的时间,称为时间片。调度是指为任务分配资源和时间,使系统满足特定的性能要求。调度算法的目的是在正常情况下,尽可能满足所有任务的时限:在峰值负载条件下,保证强实时任务满足时限。因为时限是区分实时系统和非实时系统的关键因素,因此调度算法是实时系统的基本问题。实时操作系统所具有的运行性能,如吞吐量的大小、周转时间的长短、相应的及时性和可预测性等在很大程度上都取决于实时调度。

     

     

    进程调度可采用下述两种方式:

     

     

    1. 非抢占方式。采用这种调度方式,一旦把处理机分配给某进程后,便让该进程一直执行,直到该进程完成或发生某事件而被阻塞,才再把处理机分配给其他进程,决不允许某进程抢占已经分配出去的处理机。显然它难于满足紧急任务的要求,实时系统中不宜采用这种调度方式。

     

     

    2. 抢占方式。允许调度程序根据某种原则,去停止某个正在执行的进程,将已分配给该进程的处理机,重新分配给另一进程。抢占的原则有:

    - 时间片原则。各进程按时间片运行,当一个时间片用完后,便停止该进程的执行而重新进行调度。

    - 优先权原则。当一个进程到来时,如果其优先级比正在执行的进程的优先级高,便停止正在执行的进程,将处理机分配给优先级高的进程,使之执行。实时系统中一般采用基于优先级的抢占式调度和轮转调度的进程调度和中程调度相结合的调度策略。因此既可具有较大的灵活性,又能获得极小的调度延迟。

     

     

    VxWorks的wind内核缺省调度机制为基于优先级的抢占式调度。采用这种机制时,系统把处理机分配给优先级最高的进程,使之执行。一旦出现了另一个优先级更高的进程时,进程调度程序剥夺当前任务的执行,将处理机分配给高优先级任务。而在相同优先级的多个任务之间,采用时间片轮转调度机制。采用这种机制时,当一个任务到达时,它被排在轮转队列的后面,等待分配给自己的时间片的到来,如果在时间片内没有结束,则再等待属于自己的时间片的到来,直到任务完成。

     

     

    - 优先级抢占式
        采用基于优先级的抢占式调度,系统中每个任务都有一个介于最高0到最低255之间的优先级。任一时刻,系统内核一旦发现一个优先级更高的任务转变为就绪态,内核就保存当前任务的上下文并把当前任务状态转换为阻塞态,同时切换到这个高优先级任务的上下文执行。
    - 轮转调度算法
        采用轮转调度算法,系统让处于就绪态的优先级相同的一组任务依次轮流执行预先确定长度的时间片。这是一种处理机平均分配的方法。如果不使用轮转调度算法,优先级相同的一组任务中第一个获得处理机的任务将不会被阻塞而独占处理机,如果没有阻塞或其他情况发生,它不会放弃处理机的使用权。
    - 抢占调度与轮转调度混合方式
        有时,基于优先级的抢占式调度可与轮转调度相结合。当优先级相同的一组任务依次轮流平均分配处理机时,若有高优先级的任务转变为就绪态则可抢占该组任务。直到再一次符合执行条件时,该组任务才可再次共享处理机。
        为了任务控制的灵活性,VxWorks内核还提供了动态优先级机制,任务的优先级在运行期间可动态地变化。同时,为了防止优先级反转,还具有优先级继承机制,通过使用互斥信号量可以防止高优先级的任务被迫等待一段不确定时间,直到一个低优先级任务完成。

     

     

    参考文献:《实时操作系统VxWorks的内核任务调度研究》 - 百度一下可以搜到

     

     

    4. Linux的任务调度

     

     

    通用Linux系统支持实时和非实时两种进程,实时进程相对于普通进程具有绝对的优先级。对应地,实时进程采用SCHED_FIFO或者SCHED_RR调度策略,普通的进程采用SCHED_OTHER调度策略。

    在调度算法的实现上,Linux中的每个任务有四个与调度相关的参数,它们是rt_priority、policy、priority(nice)、counter。调度程序根据这四个参数进行进程调度。

     

     

    在 SCHED_OTHER调度策略中,调度器总是选择那个priority+counter值最大的进程来调度执行。从逻辑上分析SCHED_OTHER 调度策略存在着调度周期(epoch),在每一个调度周期中,一个进程的priority和counter值的大小影响了当前时刻应该调度哪一个进程来执行,其中priority是一个固定不变的值,在进程创建时就已经确定,它代表了该进程的优先级,也代表这该进程在每一个调度周期中能够得到的时间片的多少;counter是一个动态变化的值,它反映了一个进程在当前的调度周期中还剩下的时间片。在每一个调度周期的开始,priority的值被赋给 counter,然后每次该进程被调度执行时,counter值都减少。当counter值为零时,该进程用完自己在本调度周期中的时间片,不再参与本调度周期的进程调度。当所有进程的时间片都用完时,一个调度周期结束,然后周而复始。另外可以看出Linux系统中的调度周期不是静态的,它是一个动态变化的量,比如处于可运行状态的进程的多少和它们priority值都可以影响一个epoch的长短。值得注意的一点是,在2.4以上的内核中,priority被nice所取代,但二者作用类似。

     

     

    可见SCHED_OTHER调度策略本质上是一种比例共享的调度策略,它的这种设计方法能够保证进程调度时的公平性--一个低优先级的进程在每一个epoch中也会得到自己应得的那些CPU执行时间,另外它也提供了不同进程的优先级区分,具有高priority值的进程能够获得更多的执行时间。对于实时进程来说,它们使用的是基于实时优先级rt_priority的优先级调度策略,但根据不同的调度策略,同一实时优先级的进程之间的调度方法有所不同:

     

     

    - SCHED_FIFO:不同的进程根据静态优先级进行排队,然后在同一优先级的队列中,谁先准备好运行就先调度谁,并且正在运行的进程不会被终止直到以下情况发生:1.被有更高优先级的进程所强占CPU;2.自己因为资源请求而阻塞;3.自己主动放弃CPU(调用sched_yield);

     

     

    - SCHED_RR:这种调度策略跟上面的SCHED_FIFO一模一样,除了它给每个进程分配一个时间片,时间片到了正在执行的进程就放弃执行;时间片的长度可以通过sched_rr_get_interval调用得到;

     

     

    由于Linux系统本身是一个面向桌面的系统,所以将它应用于实时应用中时存在如下的一些问题:

     

    - Linux系统中的调度单位为10ms,所以它不能够提供精确的定时; 
    - 当一个进程调用系统调用进入内核态运行时,它是不可被抢占的; 
    - Linux内核实现中使用了大量的封中断操作会造成中断的丢失; 
    - 由于使用虚拟内存技术,当发生页出错时,需要从硬盘中读取交换数据,但硬盘读写由于存储位置的随机性会导致随机的读写时间,这在某些情况下会影响一些实时任务的截止期限; 
    - 虽然Linux进程调度也支持实时优先级,但缺乏有效的实时任务的调度机制和调度算法;它的网络子系统的协议处理和其它设备的中断处理都没有与它对应的进程的调度关联起来,并且它们自身也没有明确的调度机制;

     

     

    参考文献:《基于Linux的实时系统》 - 百度一下可以搜到

     

     

    5. 实时Linux研究

     

     

    呼哧呼哧写了半天,终于到了重头戏,实时Linux研究。前文说过,风河的VxWorks虽然性能大大的好,但是要花很多银子,对于一般的软实时应用系统来说,还是用开源免费的实时Linux比较好。笔者所在的公司也正在研究将平台转为Linux。有许多种方法可以赋予普通Linux实时的能力:

     

     

    5.1 瘦内核(微内核)- Thin-Kernel

     

     

    瘦内核(或微内核)方法使用了第二个内核作为硬件与 Linux 内核间的抽象接口。非实时 Linux 内核在后台运行,作为瘦内核的一项低优先级任务托管全部非实时任务。实时任务直接在瘦内核上运行。瘦内核主要用于(除了托管实时任务外)中断管理。瘦内核截取中断以确保非实时内核无法抢占瘦内核的运行。这允许瘦内核提供硬实时支持。

    thin-kernel

     

     

     

    虽然瘦内核方法有自己的优势(硬实时支持与标准 Linux 内核共存),但这种方法也有缺点。实时任务和非实时任务是独立的,这造成了调试困难。而且,非实时任务并未得到 Linux 平台的完全支持(瘦内核执行称为瘦 的一个原因)。

     

     

    使用这种方法的例子有 RTLinux (现在由 Wind River Systems 专有),实时应用程序接口(RTAI)和 Xenomai。

     

     

    5.2 超微内核

     

     

    这里瘦内核方法依赖于包含任务管理的最小内核,而超微内核法对内核进行更进一步的缩减。通过这种方式,它不像是一个内核而更像是一个硬件抽象层(HAL)。超微内核为运行于更高级别的多个操作系统提供了硬件资源共享。因为超微内核对硬件进行了抽象,因此它可为更高级别的操作系统提供优先权,从而支持实时性。

    对硬件进行抽象的超微内核法

     

     

     

    注意,这种方法和运行多个操作系统的虚拟化方法有一些相似之处。使用这种方法的情况下,超微内核在实时和非实时内核中对硬件进行抽象。这与 hypervisor 从客户(guest)操作系统对裸机进行抽象的方式很相似。

     

     

    关于超微内核的示例是操作系统的 Adaptive Domain Environment for Operating Systems (ADEOS)。ADEOS 支持多个并发操作系统同步运行。当发生硬件事件后,ADEOS 对链中的每个操作系统进行查询以确定使用哪一个系统处理事件。

     

     

    5.3 资源内核(Resource-kernel)

     

     

    另一个实时架构是资源内核法。这种方法为内核增加一个模块,为各种资源提供预留(reservation)。这种机制保证了对时分复用(time- multiplexed)系统资源的访问(CPU、网络或磁盘带宽)。这些资源拥有多个预留参数,如循环周期、需要的处理时间(也就是完成处理所需的时间),以及截止时间。

    实现资源预留的资源内核法

     

     

     

    资源内核提供了一组应用程序编程接口(API),允许任务请求这些预留资源。然后资源内核可以合并这些请求,使用任务定义的约束定义一个调度,从而提供确定的访问(如果无法提供确定性则返回错误)。通过调度算法,如 Earliest-Deadline-First (EDF),内核可以处理动态的调度负载。

     

     

    资源内核法实现的一个示例是 CMU 公司的 Linux/RK,它把可移植的资源内核集成到 Linux 中作为一个可加载模块。这种实现演化成商用的 TimeSys Linux/RT 产品。

     

     

    5.4 标准的Linux内核最新版本2.6中加入了实时功能

     

     

    目前探讨的这些方法在架构上都很有趣,但是它们都在内核的外围运行。然而,如果对标准 Linux 内核进行必要的修改使其支持实时性,结果会怎么样呢?

     

     

    今天,在 2.6 内核中,通过对内核进行简单配置使其完全可抢占,您就可以得到软实时功能。在标准 2.6 Linux 内核中,当用户空间的进程执行内核调用时(通过系统调用),它便不能被抢占。这意味着如果低优先级进程进行了系统调用后,高优先级进程必须等到调用结束后才能访问 CPU。

     

     

    新的配置选项 CONFIG_PREEMPT 改变了这一内核行为,在高优先级任务可用的情况下(即使此进程正在进行系统调用),它允许进程被抢占。

    允许抢占的标准 2.6 Linux 内核

     

     

     

    但这种配置选项也是一种折衷。虽然此选项实现了软实时性能并且即使在负载条件下也可使操作系统顺利地运行,但这样做也付出了代价。代价就是略微减低了吞吐量以及内核性能,原因是 CONFIG_PREEMPT 选项增加了开销。这种选项对桌面和嵌入式系统而言是有用的,但并不是在任何场景下都有用(例如,服务器)。

     

     

    在 2.6 内核中另一项有用的配置选项是高精度定时器。这个新选项允许定时器以 1μs 的精度运行(如果底层硬件支持的话),并通过红黑树实现对定时器的高效管理。通过红黑树,可以使用大量的定时器而不会对定时器子系统(O(log n))的性能造成影响。

     

    只需要一点额外的工作,就可以通过 PREEMPT_RT 补丁实现硬实时。PREEMPT_RT 补丁提供了多项修改,可实现硬实时支持。其中一些修改包括重新实现一些内核锁定原语,从而实现完全可抢占,实现内核互斥的优先级继承,并把中断处理程序转换为内核线程以实现线程可抢占。

     

     

    参考文献:实时Linux架构剖析 - M. Tim Jones, 顾问工程师, Emulex Corp.
    http://www.ibm.com/developerworks/cn/linux/l-real-time-linux/#resources

     

     

    -------------------------------------------------------------------------

     

     

    本文就到此告一段落,结合自己的实际项目经验,总结了实时操作系统的概念,性能指标,任务调度方法,VxWorks和Linux的实时性对比,以及相应的介绍。供笔者自己学习,也供CSDN各位同学参考,大部分内容来自网络,不是一篇严谨的论文,如有纰漏还请指出,共同进步。

     

     

    转载请注明出处:http://blog.csdn.net/zhourui1982

    展开全文
  • 几种常见嵌入式实时操作系统简介

    千次阅读 2019-05-23 16:17:43
    是美国windriver公司于1983年设计开发的高性能、可扩展的实时操作系统,具有嵌入实时应用中最新一代的开发和执行环境,支持市场上几乎所有的处理器,以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空...

    1、vxworks

    是美国windriver公司于1983年设计开发的高性能、可扩展的实时操作系统,具有嵌入实时应用中最新一代的开发和执行环境,支持市场上几乎所有的处理器,以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演戏、弹道制导、飞机导航等。

    2、Nucleus 

    是美国accelerated technology incorporated公司研发的产品,是世界上最受欢迎的嵌入式操作系统之一,其特点是约95%的代码用ANSI C编写,因此非常便于移植并能够支持大多数类型的处理器,同时可提供网络、图形用户界面、文件系统等模块支持。

    3、QNX

    是加拿大QNX公司出品的一种商用的、遵从POSIX标准规范的类UNIX实时操作系统。QNX是最成功的微内核操作系统之一,在汽车领域得到了极为广泛的应用,如保时捷跑车的音乐和媒体控制系统和美国陆军无人驾驶Crusher坦克的控制系统,还有RIM公司的blackberry playbook平板电脑。具有独一无二的微内核实时平台,实时、稳定、可靠、运行速度极快。

    4、Windows CE 

    是美国microsoft公司推出的嵌入式操作系统,支持众多的硬件平台,其最主要特点是拥有与桌上型windows家族一致的程序开发界面,因此,桌面操作系统windows家族开发的程序可以直接在windows ce上运行,主要应用于PDA(个人数字助理)、平板电脑、智能手机等消费类电子产品。但嵌入式操作系统追求高效、节省,windows ce在这方便是笨拙的,它占用内存过大,应用程序庞大。

    5、RT-Linux

    是美国墨西哥理工学院开发的基于linux的嵌入式实时操作系统,是一款提供源代码、开放式自由软件。rt-linux使用了精巧的内核,并把标准的linux核心作为实时核心的一个进程,同用户的实时进程一起调度。这样对linux内核的改动非常小,并且可以充分利用Linux 下现有的丰富的软件资源。

    6、uc/oc-ii

    前身是uc/os,最早于1992年由美国嵌入式系统专家设计开发,目前uc/os-iii也已面世。uc/osii具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,最小内核可以编译至2KB。UC/OS-II已经移植到了几乎所有知名的CPU上,uc/os-ii也是在国内研究最为广泛的嵌入式实时操作系统之一。

    7、FreeRTOS

    是一个使用迷你内核的小型嵌入式实时操作系统。由于嵌入式实时操作系统需占用一定的系统资源(尤其是RAM资源),只有QNX、uc/os-ii、freeRTOS等少数实时操作系统能在小RAM单片机上运行。相对QNX、uc/os-ii等商业操作系统,FreeRTOS操作系统是完全开源的操作系统,具有代码公开、可移植、可裁剪、调度策略灵活的特点,可以方便地移植到各种单片机上运行。

    8、RT-Thread

    我国在对嵌入式实时操作系统的研发中也取得了一定的成果。由中国开源社区主导开发的RT-Thread,不仅包含一个实时操作系统内核,更有完整的应用生态体系,包含了与嵌入式实时操作系统相关的各个组件:TCP/IP协议栈,文件系统,Libc接口,图形用户界面等,具有相当大的发展潜力。

    9、MQX

    最早源于位于加拿大渥太华市的一家公司。MQX在加载了系统内核、中断管理系统、信号量、队列及存储管理系统等基本服务的情况下,仅占用6KB的ROM存储空间,硬件资源开销较小。MQX同UC/OS-II规模相近,但无论从用户体验上还是系统服务的丰富程度上都远超uc/os-ii。


    PSP主要面向处理器内核,实现包括上下文切换、硬件中断响应等操作系统核心功能的服务。使用相同处理器架构的不同芯片,其PSP的差异是不大的。

    BSP主要面向处理器内核以外的硬件设备模块及外围电路,为MQX系统软件提供设备驱动等扩展服务,其中比较典型的是由定时器中断周期产生系统滴答,作为系统提供时间服务的基础。


    展开全文
  • 什么是实时操作系统(RTOS)

    千次阅读 多人点赞 2020-09-03 11:27:04
    实时操作系统与一般的操作系统相比,最大的特色就是“实时性”,如果一个任务需要执行,实时操作系统会马上(在较短时间内)执行该任务,不会较长的延时。这种特性保证了各个任务的及时执行。 经常跟实时操作...

    实时操作系统(Real-time operating system, RTOS),又称即时操作系统,它会按照排序运行、管理系统资源,并为开发应用程序提供一致的基础。
    实时操作系统与一般的操作系统相比,最大的特色就是“实时性”,如果有一个任务需要执行,实时操作系统会马上(在较短时间内)执行该任务,不会有较长的延时。这种特性保证了各个任务的及时执行。

    经常跟实时操作系统一起讲的,还有嵌入式操作系统这个概念,但实际上这是完全不同的两种东西,虽然大多数实时操作系统都是嵌入式操作系统,但嵌入式操作系统并不全都是实时的。

    对于实时操作系统有一些常见的误区,比如:速度快,吞吐量大,代码精简,代码规模小等等。其实这些都不算是实时操作系统的特性,别的操作系统也可以做到。

    只有实时性”才是RTOS的最大特征,其它的都不算是。

    维基百科上关于实时性的定义:

    实时运算(Real-time computing)是计算机科学中对受到“实时约束”的计算机硬件和计算机软件系统的研究,实时约束像是从事件发生到系统回应之间的最长时间限制。实时程序必须保证在严格的时间限制内响应。

    实时操作系统中都要包含一个实时任务调度器,这个任务调度器与其它操作系统的最大不同是强调:严格按照优先级来分配CPU时间,并且时间片轮转不是实时调度器的一个必选项。

    提出实时操作系统的概念,可以至少解决两个问题:

    1. 早期的CPU任务切换的开销太大,实时调度器可以避免任务频繁切换导致CPU时间的浪费。
    2. 在一些特殊的应用场景中,必须要保证重要的任务优先被执行。

    在这样的背景下,实时操作系统就被设计出来了,典型的实时操作系统VxWorks,RT-Thread,uCOS,QNX,WinCE等。

    实时任务调度器是实时操作系统的一个必选项,但不代表只要设计出来一个实时调度器就足够了。事实上设计一个实时调度内核并不是一个多么复杂的任务,实时操作系统的特性是在整个操作系统的设计思路上都要时刻关注实时性

    这些设计思路包括:

    1. 实时的消息、事件处理机制。

    常规的操作系统中,消息队列都是按照FIFO(先进先出)的方式进行调度,如果有多个接受者,那么接受者也是按照FIFO的原则接受消息(数据),但实时操作系统会提供基于优先级的处理方式:两个任务优先级是分别是10和20,同时等待一个信号量,如果按照优先级方式处理,则优先级为10的任务会优先收到信号量。

    2. 提供内核级的优先级翻转处理方式

    实时操作系统调度器最经常遇到的问题就是优先级翻转,因此对于类似信号量一类的API,都能提供抑止优先级翻转的机制,防止操作系统死锁。

    3. 减少粗粒度的锁和长期关中断的使用

    这里的锁主要是指自旋锁(spinlock)一类会影响中断的锁,也包括任何关中断的操作。在Windows和Linux的驱动中,为了同步的需要,可能会长期关闭中断,这里的长期可能是毫秒到百微秒级。但实时操作系统通常不允许长期关中断

    对于非实时操作系统来说,如果收到一个外部中断,那么操作系统在处理中断的整个过程中可能会一直关中断。但实时操作系统的通常做法是把中断作为一个事件通告给另外一个任务,interrupt handler在处理完关键数据以后,立即打开中断,驱动的中断处理程序以一个高优先级任务的方式继续执行

    4. 系统级的服务也要保证实时性

    对于一些系统级的服务,比如文件系统操作:

    • 非实时系统会缓存用户请求,并不直接把数据写入设备,或者建立一系列的线程池,分发文件系统请求。
    • 但实时系统中允许高优先级的任务优先写入数据,在文件系统提供服务的整个过程中,高优先级的请求被优先处理,这种高优先级策略直到操作完成。

    这种设计实际上会牺牲性能,但实时系统强调的是整个系统层面的实时性,而不是某一个点(比如内核)的实时性,所以系统服务也要实时。

    由于应用场景的差异,会出现有些用户需要实时性的驱动,有些用户需要高性能的驱动,因此实时操作系统实际上要提供多种形式的配置以满足不同实时性需求的用户。

    5. 避免提供实时性不确定的API

    多数实时操作系统都不支持虚拟内存(page file/swap area),主要原因是缺页中断(page fault)会导致任务调度的不确定性增加。实时操作系统很多都支持分页,但很少会使用虚拟内存,因为一次缺页中断的开销十分巨大(通常都是毫秒级),波及的代码很多,导致用户程序执行的不确定性增加。

    实时操作系统的确定性是一个很重要的指标,在某些极端场景下,甚至会禁用动态内存分配(malloc/free),来保证系统不受到动态的任务变化的干扰。

    6. 提供针对实时系统调度的专用API

    比如ARINC 653标准中就针对任务调度等作出了一系列的规定,同时定义了特定的API接口和API行为,这些API不同于POSIX API,如果实时系统要在航空设备上使用,就可能需要满足ARINC 653的规范。

    7. 降低系统抖动

    由于关中断等原因,通常情况下,操作系统的调度器不会太精确的产生周期性的调度,比如x86早期的默认60的时钟周期(clock rate),抖动范围可能在15-17ms之间。但一个设计优秀的实时操作系统能把调度器的抖动降低到微秒甚至百纳秒一级,在像x86这种天生抖动就很大的架构上,降低系统抖动尤其重要。

    8. 针对实时性设计的SMP和虚拟化技术

    SMP(多核)场景的实时调度是很困难的,这里还涉及到任务核间迁移的开销。针对SMP场景,多数实时操作系统的设计都不算十分优秀,但比起普通操作系统来说,其实时性已经好很多了。

    同时实时操作系统的虚拟化能从hypervisor层面上提供虚拟机级别的实时调度,虚拟机上可以是另外一个实时系统,也可以是一个非实时系统。


    从以上的特点上看,前面提到的常见的错误认识:速度快,吞吐量大,代码精简,代码规模小,都不是实时操作系统的特征:

    非实时操作系统也可以很快,实时操作系统也可能很慢;
    通常来说实时操作系统的吞吐量会大一些,但非实时系统也可以做到吞吐量更大;
    实时操作系统一般都比非实时操作系统要小,但规模大的实时操作系统也是存在的;
    而且由于可能需要针对不同用户提供不同等级的实时服务,实时操作系统可能并不是那么精简的……

    由于设备性能的发展,原来很多实时性要求高的场景,已经切换到普通的操作系统了。Linux在嵌入式设备上的推广,使用实时操作系统的很多设备已经改用Linux了,因为硬件性能的提升会让系统延迟降低到一个用户可以接受的程度

    但在某些特定的场景下,比如工业自动化、机器人、航空航天、军工领域等,仍然对实时操作系统有需求,并且应该会长期存在。

    同时,由于实时操作系统的特性,它并不是一个应用场景广泛的系统,一些人认为学嵌入式就是学实时操作系统,这种认识其实是不正确的,现在嵌入式开发,不一定需要在实时操作系统下完成。

    展开全文
  • 聊一聊嵌入式中常用的实时操作系统(RTOS)

    万次阅读 多人点赞 2018-09-19 21:09:10
    嵌入式Linux系统 VS RTOS 一提到嵌入式的操作系统,自然绕不开嵌入式Linux操作系统。嵌入式linux 是将日益流行的Linux操作系统进行裁剪修改,使之能在... 然而即便如此,嵌入式Linux操作系统其难以弥补的缺...

    嵌入式Linux系统 VS RTOS

    一提到嵌入式的操作系统,自然绕不开嵌入式Linux操作系统。嵌入式linux 是将日益流行的Linux操作系统进行裁剪修改,使之能在嵌入式计算机系统上运行。它性能优异,软件移植容易,代码开放,有许多应用软件支持,应用产品开发周期短,新产品上市迅速,所以在不同行业,尤其是消费类电子产品中广泛使用。

      然而即便如此,嵌入式Linux操作系统也有其难以弥补的缺陷:

    - Linux操作系统有庞大的内核,对任何中断指令的响应都需要一个复杂的处理过程,对一些需要快速响应的场合显得有些力不从心。

    - 软硬件成本较高,需要功能强劲的MCU和外部资源,不适用于低成本的产品

    - 相对而言,配备嵌入式Linux会导致功耗较高,不适用于功耗要求严格应用场合

     

    因为上述提及的一些缺陷,所以在对实时性要求比较高,成本控制比较严格或者低功耗应用等场合,常常会使用实时操作系统RTOS。(注:原生Linux系统是分时操作系统,一些衍生的嵌入式Linux进行了优化和改进,也能做到很高的实时性,也可以认为是RTOS)。

    简单来说,实时操作系统(RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系 统作出快速响应,并控制所有实时任务协调一致运行的操作系统。主要特点如下:

    1)高精度计时系统

    计时精度是影响实时性的一个重要因素。在实时应用系统中,经常需要精确确定实时地操作某个设备或执行某个任务,或精确的计算一个时间函数。这些不仅依赖于一些硬件提供的时钟精度,也依赖于实时操作系统实现的高精度计时功能。

    2)多级中断机制

    一个实时应用系统通常需要处理多种外部信息或事件,但处理的紧迫程度有轻重缓急之分。有的必须立即作出反应,有的则可以延后处理。因此,需要建立多级中断嵌套处理机制,以确保对紧迫程度较高的实时事件进行及时响应和处理。

    3)实时调度机制

    实时操作系统不仅要及时响应实时事件中断,同时也要及时调度运行实时任务。

     

    RTOS使用现状

    一起来看一份某调查机构关于嵌入式操作系统的调研结果。(摘自2015全球嵌入式市场分析报告)

    调查用户分布

     

    操作系统占有率

     

    下一年度考虑使用的操作系统比例

    从调查结果可以看到市场占用率前两名分别为uc/OS(II + III 27%)和FreeRTOS(22%)。这两款RTOS即便在国内用的比较多。除此之外,从我了解的情况来说,国内也有不少人士使用Keil RTX,TI的DSP/BIOS。另外由国内人士自己开发的RT-Thread近几年也越来越多人使用。

     

    uc/OS

    俗话说得好,早起的鸟儿有虫吃。uc/OS能够在国内普及的很大一个原因是因为uc/OS比较早被介绍到中国,早在七八年前小编上大学期间,就有uc/OS的课程,教材用的是邵贝贝教授翻译的《嵌入式实时操作系统uC/OS-II》。这本书也让许多行业人士入了RTOS的门。另外uc/OS教材案例丰富,官网也有提供基于不同嵌入式芯片移植好的demo,交流论坛也有不少,大大降低了使用门槛。详细介绍就不贴上,相信大家再熟悉不过了。然而商业上使用uc/OS是需要付版权费的,而且费用不菲。所以虽然国内用的人很少,但是真正向Micrium公司购买版权的公司全中国估计不超过10个(至少2012年的时候,只有两家公司有购买版权)。官网链接: 

    https://www.micrium.com/

     

    FreeRTOS

    FreeRTOS欧美用得比较多,以前的公司有个与欧美同事合作项目,人家点名要求使用FreeRTOS。国内目前用得并不算太多,但是发展趋势不错。

    同uc/OS类似,FreeRTOS也是一个轻量级的实时操作系统内核,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要。官网的移植demo和教程现在也非常全面了,基本上的嵌入式芯片都已经覆盖,可以前往官网下载。相比uc/OS,FreeRTOS的主要优势在于:

    - 内核文件占用RAM,ROM的要求少一些(其实差异不大,但是对于片内资源较少的MCU也算是一种优势)

    - 支持协程,可以共享stack,进一步降低RAM的消耗

    - 支持有同等优先级的任务,可以使用时间片轮转的方式进行调度

    - 当然,最终要的是商业使用是免费的

     

    TI DSP/BIOS

    DSP/BIOS是TI公司特别为其TMS320C6000TM,TMS320C5000TM和TMS320C28xTM系列DSP平台(貌似现在已经支持更多TI的芯片)所设计开发的一个尺寸可裁剪的实时多任务操作系统内核,具有实时操作系统的诸多功能,如任务的调度管理、任务间的同步和通信、内存管理、实时时钟管理、中断服务管理、外设驱动程序管理等。如果你有使用上述DSP芯片,建议你使用这款RTOS。之前使用过一段时间,我觉得它最大的优势在于TI已经将DSP/BIOS集成到了CCS开发环境中了,你可以通过可视化界面去配置任务,中断,时钟,资源分配等,简单易上手。

     

    RT-Thread

    RT-Thread是一款来自中国的开源嵌入式实时操作系统,由国内一些专业开发人员从2006年开始开发、维护,除了类似FreeRTOS和UCOS的实时操作系统内核外,也包括一系列应用组件和驱动框架,如TCP/IP协议栈,虚拟文件系统,POSIX接口,图形用户界面,FreeModbus主从协议栈,CAN框架,动态模块等,因为系统稳定,功能丰富的特性被广泛用于新能源,电网,风机等高可靠性行业和设备上,已经被验证是一款高可靠的实时操作系统。

            RT-Thread实时操作系统遵循GPLv2+许可证,实时操作系统内核及所有开源组件可以免费在商业产品中使用,不需要公布应用源码,没有任何潜在商业风险。这款RTOS只在若干年前关注过,一直没亲自体验过,希望这款国人自己开发的RTOS能越走越远,真正开启下一代操作系统演化。官网链接:http://www.rt-thread.org/

     

    本期就这样了。觉得写得不错的话,欢迎关注本公众号。

     

    展开全文
  • 满足实时控制要求的嵌入式操作系统(RTOS)操作系统,以下介绍14种主流的RTOS,分别为μClinux、μC/OS-II、eCos、FreeRTOS、mbed OS、RTX、Vxworks、QNX、NuttX,而国产的嵌入式操作系统包括都江堰操作系统(djyos)...
  • RT-thread国产实时操作系统概述

    千次阅读 2016-07-04 14:22:46
    RT-Thread实时操作系统是一个分层的操作系统,它包括了: • 组件层components,这些是基于RT-Thread核心基础上的外围组件,把一些功能模块划分成独立的一个个组件模块,做到组件与组件之间的低耦合,组件内部的...
  • 图解实时操作系统和非实时操作系统的区别
  • 四种实时操作系统的分析比较

    千次阅读 2011-11-30 10:43:03
    四种实时操作系统的分析比较  easysea   本文对四种实时操作系统(RTOS)特性进行分析和比较。它们是:Lynx实时系统公司的LynxOS、QNX软件系统有限公司的QNX以及两种具有代表性的实时Linux--新墨西哥工学院的RT...
  • 对于实时操作系统(RTOS)和非实时操作系统,你能分别列举出来多少? 实时操作系统:uCOS/VxWorks/RTLinux 非实时操作系统:Linux/Windows/OSX 我也只能列举出来这么多了。 重点不在这里,重点在于他们之间的区别...
  • (1)批处理操作系统: 用户脱机使用计算机,作业时成批处理的,系统内多道程序并发执行,交互能力差。...(3)实时操作系统: 能对控制对象做出及时反映,可靠性高,响应及时,但资源利用率低。要求能实时处理外部事件 ...
  • 实时操作系统-RTLinux

    千次阅读 2013-05-15 20:23:20
    实时操作系统-RTlinux 摘要: 介绍了RTLinux的两个重点特点:硬实时性和完备性,及其在嵌入式系统应用中的一些重要功能,并结合实时处理的具体实例对其编程方法加以说明。  关键词:操作系统 实时处理 Linux ...
  • 在介绍这两个概念之前要先介绍一下操作系统内核中的“线程调度器” 这里就拿Linux内核来做举列 在Linux内核中一个scheduler线程调度器,特殊的算法来挑选线程,专门用来给运行在虚拟内存管理模式下的线程分配CPU...
  • 实时操作系统和通用操作系统区别

    千次阅读 2019-01-10 10:57:36
    1. 实时操作系统简介 什么是实时操作系统? 一般而言,操作系统的任务是管理计算机的硬件资源和应用程序。 实时操作系统会执行这些任务,但是运行时间精度和可靠度都极高。 在实际应用中,的系统失常代价高昂,...
  • 非常好的一本ucos-ii入门书籍,讲解的比较详细。
  • 操作系统类型有哪些_操作系统类型

    千次阅读 2020-07-27 10:01:58
    操作系统类型有哪些 操作系统类型 (Types of Operating Systems) Following are some of the most widely used types of Operating system. 以下是一些最广泛使用的操作系统类型。 Simple Batch System 简单...
  • 而作为一种实时操作系统(本文对实时操作系统特性的讨论仅限于强实时操作系统,下面提到的实时操作系统也均指强实时操 作系统),它与通用操作系统(如Windows、Unix、Linux等)相比很大的差别,下面我们将通过...
  • 分时操作系统与实时操作系统

    万次阅读 多人点赞 2017-09-05 22:16:33
    计算机操作系统从20世纪50年代中期第二代计算机的单道批处理系统到20世纪60年代中期第三代计算机的多道批处理系统(IBM公司研发的OS/360系统是第一个能运行多道程序的批处理系统),都主要致力于提高资源利用率和...
  • 几个国产操作系统简介

    千次阅读 2020-03-08 16:52:44
    1:aCoral是电子科技大学计算机学院嵌入式实时计算实验室开发的一款嵌入式多核实时操作系统,开源 ,支持多核 2:RT-Thread 国产嵌入式操作系统...国内的实时操作系统研究开发两种类型。 一类是中国自主开发的...
  • 国产操作系统有哪些

    千次阅读 2019-04-13 16:28:06
    国产操作系统多为以Linux为基础二次开发的操作系统。2014年4月8日起,美国微软公司停止了对Windows XP SP3操作系统提供服务支持,这引起了社会和广大用户的广泛关注和对信息安全的担忧。 工信部对此表示,将继续...
  • 常见的嵌入式操作系统有哪些

    千次阅读 2020-05-23 00:57:06
    VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),VxWorks具有以下优点。 · 实时性好。其系统本身的开销很小,进程调度、进程间通信、中断处理等系统公用程序精练而有效,...
  • 实时操作系统特点

    千次阅读 2018-10-09 22:11:09
    实时操作系统(Real-time operating system, RTOS)是说,任务切换和中断响应的时间必须保证在多少时间内(如5us内)完成。  分为硬实时和软实操作系统:  硬实时是说必须在多少时间内完成切换(如VxWorks, 我们...
  • 1.什么是实时操作系统实时操作系统(RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务...
  • 实时安卓操作系统(RTAndroid)

    千次阅读 2019-05-23 14:27:09
    实时安卓操作系统(RTAndroid)--下一代也就是适应人工智能,移动互联网,大数据和工业4.0等的时代的 嵌入式实时操作系统 由成都实安安信科技有限公司开发的实时安卓操作系统(RTAndroid)正式版1.1版,现在已经...
  • 批处理系统:用户把要计算的问题、数据和作业说明书一起交给操作员,操作员将一批算题输入到计算机,然后由操作系统来控制执行。特点:资源利用率高,系统吞吐量大;缺乏交互能力。设计思路:提出了一种自动从一个...
  • 理解实时操作系统与裸机的区别

    千次阅读 2019-05-19 14:06:50
    早期嵌入式开发没有嵌入式操作系统的概念 ,直接操作裸机,在裸机上写程序,比如用51单片机基本就没有操作系统的概念。通常把程序分为两部分:前台系统和后台系统。 简单的小系统通常是前后台系统,这样的程序包括一...
  • 原博地址:http://blog.csdn.net/u013752202/article/details/53649047对于实时操作系统(RTOS)和非实时操作系统,你能分别列举出来多少? 实时操作系统:uCOS/VxWorks/RTLinux 非实时操作系统:Linux/Windows/OSX ...
  • 浅谈实时操作系统和分时操作系统

    千次阅读 2017-06-29 11:33:25
    什么是实时操作系统?参见 Donal Gillies 在 Realtime Computing FAQ 中提出定义: 实时系统指系统的计算正确性不仅取决于计算的逻辑正确性,还取决于产生结果的时间。如果未满足系统的时间约束,则认为系统失效。 ...
  • 做嵌入式系统开发一段时间了,做过用于手机平台的嵌入式Linux,也接触过用于交换机、媒体网关平台的VxWorks,实际应用后回过头来看理论,才发现自己理解的肤浅,也发现CSDN上好多同学们都对实时、嵌入式这些概念...
  • 上一篇系列文章“INtime可与Windows在同个PC运行的实时操作系统(上)”中我们介绍INtime实时操作系统的基本特性与功能。本篇文章将着重介绍INtime RTOS内部的关键处理机制及其相关的应用案例。 INtime ® RTOS是一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 567,737
精华内容 227,094
关键字:

实时操作系统有哪些