VxWorks就是实时系统

实时操作系统的特征:



    实时操作系统是抢占式操作系统,如果你的进程优先级高,则肯定第一个得到执行,直至结束执行,中间的时间通过CPU频率等可以推算出来。


   其实就是要求你对他的请求,他得在一定时限内给你结果,而不能因为系统忙或调度算法的原因拖沓, 也就是只要指定了时间或发生了高优先级时间,无论任何操作,必须立刻中断,即使内核也是如此。


Windows的内核是不可抢占的,所以它不是实时操作系统。Linux是软实时的,内核中仍然有大量不可抢占区域。


    




时限要求高的是硬实时,时限要求低的是软实时




非实时操作系统:

   通常的通用操作系统Windows和Linux都叫分时操作系统,一般采用公平调度算法,线程/进程一多就得分享CPU时间,Linux下有针对“实时进程”的调度,调度算法和普通进程不一样,但也只是相对的响应时间降低而已,类似的Windows下的“实时”优先级,也只不过是最高优先级,而不是真正的实时





    真正的实时操作系统内核是可中断可抢占的。而非实时的操作系统通常在执行内核功能时是不可中断的,Linux是软实时的,它在内核中加入了若干可中断点,而不是任何时候都允许中断。

Windows的内核是不可抢占的,所以它不是实时操作系统。Linux是软实时的,内核中仍然有大量不可抢占区域。


这样对内核的设计就要求很高。

有的第三方的硬实时基于Linux的实现一般都是将Linux内核作为一个任务,由另外的实时OS内核进行调度



【实时操作系统】实时操作系统和非实时操作系统_系统调用





    通用操作系统(如Windows、Unix、Linux等),通用操作系统是由 分时操作系统发展而来,大部分都支持多用户和多进程,负责管理众多的进程并为它们分配系统资源。分时操作系统的基本设计原则是:尽量缩短系统的平均响应时间并提高系统的吞吐率,在单位时间内为尽可能多的用户请求提供服务。由此可以看出,分时操作系统 注重平均表现性能,不注重个体表现性能。


    实时操作系统的资源调配策略都能为争夺资源(包括CPU、内存、网络带宽等)的多个实时任务合理地分配资源,使每个实时任务的实时性要求都能得到满足。与通用操作系统不同,实时操作系统注重的不是系统的平均表现,而是 要求每个实时任务在最坏情况下都要满足其实时性要求,也就是说,实时操作系统 注重的是个体表现,更准确地讲是个体最坏情况表现。




    由于实时操作系统与通用操作系统的基本设计原则差别很大,因此在很多资源调度策略的选择上以及操作系统实现的方法上两者都具有较大的差异,这些差异主要体现在以下几点:  


(1)         任务调度策略:    

   

  通用操作系统中的任务调度策略一般采用基于优先级的抢先式调度策略,对于优先级相同的进程则采用时间片轮转调度方式,用户进程可以通过系统调用动态地调整自己的优先级,操作系统也可根据情况调整某些进程的优先级。    

   

  实时操作系统中的任务调度策略目前使用最广泛的主要可分为两种,一种是静态表驱动方式,另一种是固定优先级抢先式调度方式。    

   

  静态表驱动方式是指在系统运行前工程师根据各任务的实时要求用手工的方式或在辅助工具的帮助下生成一张任务的运行时间表,这张时间表与列车的运行时刻表类似,指明了各任务的起始运行时间以及运行长度,运行时间表一旦生成就不再变化了,在运行时调度器只需根据这张表在指定的时刻启动相应的任务即可。静态表驱动方式的主要优点是:    

   

  ?                   运行时间表是在系统运行前生成的,因此可以采用较复杂的搜索算法找到较优的调度方案;    

   

  ?                   运行时调度器开销较小;    

   

  ?                   系统具有非常好的可预测性,实时性验证也比较方便;    

   

  这种方式主要缺点是不灵活,需求一旦发生变化,就要重新生成整个运行时间表。    

   

  由于具有非常好的可预测性,这种方式主要用于航空航天、军事等对系统的实时性要求十分严格的领域。    

   

  固定优先级抢先式调度方式则与通用操作系统中采用的基于优先级的调度方式基本类似,但在固定优先级抢先式调度方式中,进程的优先级是固定不变的,并且该优先级是在运行前通过某种优先级分配策略(如Rate-Monotonic、Deadline-Monotonic等)来指定的。这种方式的优缺点与静态表驱动方式的优缺点正好完全相反,它主要应用于一些较简单、较独立的嵌入式系统,但随着调度理论的不断成熟和完善,这种方式也会逐渐在一些对实时性要求十分严格的领域中得到应用。目前市场上大部分的实时操作系统采用的都是这种调度方式。    

   

  (2)         内存管理:    

   

  关于虚存管理机制我们在上面已经进行了一些讨论。为解决虚存给系统带来的不可预测性,实时操作系统一般采用如下两种方式:      

   

  ?                   在原有虚存管理机制的基础上增加页面锁功能,用户可将关键页面锁定在内存中,从而不会被swap程序将该页面交换出内存。这种方式的优点是既得到了虚存管理机制为软件开发带来的好处,又提高了系统的可预测性。缺点是由于TLB等机制的设计也是按照注重平均表现的原则进行的,因此系统的可预测性并不能完全得到保障;    

   

  ?                   采用静态内存划分的方式,为每个实时任务划分固定的内存区域。这种方式的优点是系统具有较好的可预测性,缺点是灵活性不够好,任务对存储器的需求一旦有变化就需要重新对内存进行划分,此外虚存管理机制所带来的好处也丧失了。    

   

  目前市场上的实时操作系统一般都采用第一种管理方式。    

   

  (3)         中断处理:    

   

  在通用操作系统中,大部分外部中断都是开启的,中断处理一般由设备驱动程序来完成。由于通用操作系统中的用户进程一般都没有实时性要求,而中断处理程序直接跟硬件设备交互,可能有实时性要求,因此中断处理程序的优先级被设定为高于任何用户进程。    

   

  但对于实时操作系统采用上述的中断处理机制是不合适的。首先,外部中断是环境向实时操作系统进行的输入,它的频度是与环境变化的速率相关的,而与实时操作系统无关。如果外部中断产生的频度不可预测,则一个实时任务在运行时被中断处理程序阻塞的时间开销也是不可预测的,从而使任务的实时性得不到保证;如果外部中断产生的频度是可预测的,一旦某外部中断产生的频度超出其预测值(如硬件故障产生的虚假中断信号或预测值本身有误)就可能会破坏整个系统的可预测性。其次,实时操作系统中的各用户进程一般都有实时性要求,因此中断处理程序优先级高于所有用户进程的优先级分配方式是不合适的。    

   

  一种较适合实时操作系统的中断处理方式为:除时钟中断外,屏蔽所有其它中断,中断处理程序变为周期性的轮询操作,这些操作由核心态的设备驱动程序或由用户态的设备支持库来完成。采用这种方式的主要好处是充分保证了系统的可预测性,主要缺点是对环境变化的响应可能不如上述中断处理方式快,另外轮询操作在一定程度上降低了CPU的有效利用率。另一种可行的方式是:对于采用轮询方式无法满足需求的外部事件,采用中断方式,其它时间仍然采用轮询方式。但此时中断处理程序与所以其它任务一样拥有优先级,调度器根据优先级对处于就绪态的任务和中断处理程序统一进行处理器调度。这种方式使外部事件的响应速度加快,并避免了上述中断方式带来第二个问题,但第一个问题仍然存在。    

   

  此外为提高时钟中断响应时间的可预测性,实时操作系统应尽可能少地屏蔽中断。    

   

  (4)         共享资源的互斥访问:    

   

  通用操作系统一般采用信号量机制来解决共享资源的互斥访问问题。    

   

  对于实时操作系统,如果任务调度采用静态表驱动方式,共享资源的互斥访问问题在生成运行时间表时已经考虑到了,在运行时无需再考虑。如果任务调度采用基于优先级的方式,则传统的信号量机制在系统运行时很容易造成优先级倒置问题(Priority   Inversion),即当一个高优先级任务通过信号量机制访问共享资源时,该信号量已被一低优先级任务占有,而这个低优先级任务在访问共享资源时可能又被其它一些中等优先级的任务抢先,因此造成高优先级任务被许多具有较低优先级的任务阻塞,实时性难以得到保证。因此在实时操作系统中,往往对传统的信号量机制进行了一些扩展,引入了如优先级继承协议(Priority   Inheritance   Protocol)、优先级顶置协议(Priority   Ceiling   Protocol)以及Stack   Resource   Policy等机制,较好地解决了优先级倒置的问题。    

   

  (5)         系统调用以及系统内部操作的时间开销:    

   

  进程通过系统调用得到操作系统提供的服务,操作系统通过内部操作(如上下文切换等)来完成一些内部管理工作。为保证系统的可预测性,实时操作系统中的所有系统调用以及系统内部操作的时间开销都应是有界的,并且该界限是一个具体的量化数值。而在通用操作系统中对这些时间开销则未做如此限制。    

   

  (6)         系统的可重入性:    

   

  在通用操作系统中,核心态系统调用往往是不可重入的,当一低优先级任务调用核心态系统调用时,在该时间段内到达的高优先级任务必须等到低优先级的系统调用完成才能获得CPU,这就降低了系统的可预测性。因此,实时操作系统中的核心态系统调用往往设计为可重入的。    

   

  (7)         辅助工具:    

   

  实时操作系统额外提供了一些辅助工具,如实时任务在最坏情况下