影响操作系统实时性的要素

嵌入式

所谓的实时性,也就是从事件发生到系统响应的时间。

或者更广泛一点,也就是从用户输入一个信息到系统处理完返回给用户的这个反应时间。

这个时间可以划分为几个阶段:

1.中断响应时间;

2.RTOS进程调度响应时间;

3.应用程序响应时间;

 

细分:

1.中断响应时间:

  一般情况下所有外部消息都是通过中断方式来触发的。外部硬件给处理器一个中断,告诉处理器说外部有一个事件需要处理。

处理器对一般外部中断的处理分为快速中断和正常中断。

一般支持中断的嵌套。

这个是有处理器来决定的,当然有些也可以由系统来设置。

不管哪种中断,时间都会是足够短的。不然这样的处理器谁会用?

2.RTOS的进程调度:

  中断响应了以后,一般中断函数都是非常简短的,只是变量的设置,记录下外部事件的相关信息。真正的工作一般是在进程中做的。

  进程在调度时,如果到该进程运行并且该进程发现中断对变量的改变,则该进程开始进行相应的处理动作。

  但进程调度本身,是由多种经典算法的,可以参考OS的理论部分。有些算法实时性稍高,但整体性稍差,有些则相反。正常情况下,不管哪种算法,系统的进程数越少,肯定响应越快;当时处理器的负担越小,响应越快。进程中屏蔽中断的地方越少,则平均响应越快。

 

按照实时性的严格定义来说,1,2就是全部了。就是从中断开始到进程开始执行为止。从更宽泛来说,从最终用户来说,3还是有必要说下的。

 

3.应用程序的处理:

  进程执行到该任务时,就是应用层要做的事情了。应用程序执行后将结果返回给用户就完事。

 

正常情况下,3的影响远远大于1,2。

Linux

实时系统可以定义为"一个能够在事先指定或确定的时间内完成系统功能和对外部或内部、同步或异步事件作出响应的系统"。实时操作系统 (Realtime OS)是实时系统中使用的操作系统。实时操作系统的任务不只是要求完成每一个工作,并且要按照给定的时限按时完成每一个工作,所以实时操作系统必须能够确保其任务对时间的要求。
   
实时有硬实时和软实时之分。硬实时和软实时的区别就在于对外界的事件做出反应的时间。硬实时系统必须是及时对事件做出反应,绝对不能错过事件处理的deadline情况。在硬实时系统中如果出现了这样的情况就意味着巨大的损失和灾难。比如说核电站中的堆芯温度控制系统,如果没有对堆芯过热做出及时的处理,后果不堪想象。软实时系统是指,如果在系统负荷较重的时候,允许发生错过deadline的情况而且不会造成太大的危害。比如说程控电话系统允许在105个电话中有一个接不通。
   
现有的Linux是一个通用的操作系统,它是按照分时系统的目标设计的,进程调度强调平衡各进程之间的响应时间来保证公平的CPU时间占用。虽然采用了许多技术来加快系统运行和反应速度,但它本质上不是一个实时操作系统。为了保证其实时性,必须采用一定的策略加以改进。

影响Linux实时性能的主要因素
   Linux系统中,响应中断的过程如下:设备产生一个中断、中断处理函数开始执行、唤醒任务并在运行队列排队、任务获取CPU并开始执行、任务执行完毕。图1为事件处理过程各个阶段图以及影响响应时间的因素(每个阶段下面的字母A~J表示这个阶段中影响响应时间的因素):
   
由图中可以分析出导致Linux系统不能满足实时系统短的响应时间和确定的执行行为的要求的主要因素有以下方面:
   
1Linux操作系统存在关中断的机制。导致的结果是:如果低优先级的进程由于进入临界区或者为了尽快完成任务而关闭了中断,那么即使有高优先级实时进程的中断发生系统也无法响应。这种情况在实时系统中是不允许发生的。
   
2Linux操作系统内核是禁止抢占的。一个进程一旦进入内核,它将运行直到系统调用结束或进程被阻塞。这时候一个高优先级的实时进程只能等待。这样的设计是为了简化任务调度,但对实时进程来说这样的时间等待是不允许的。
 

   3Linux使用的是基于优先级的任务调度策略。这种调度策略不能保证实时任务按时完成。Linux虽然给实时进程提供了较高的优先级,但是,并没有加入时间限制。例如完成的最后期限、应在多长时间内完成、执行周期等等。例如,Linux的基于时间片的调度策略可能使得一个实时进程在一个时间片内未完成,其优先级将降低,从而可能造成到截止时间实时任务无法完成。
   
4)其他方面
    Linux
利用交换空间让进程运行在一个比实际内存大的虚拟内存空间中。当进程访问的虚拟内存的内容在交换空间里时,Linux就要把在交换空间里的页面交换到实际的内存中,而这段时间是不可预测的,这造成了实时响应时间的不确定性;
   
Linux中,高优先级的进程不能抢占低优先级进程的资源。即如果高优先级的进程要使用低优先级进程正在使用的资源时,它必须等待低优先级的进程释放资源,这样容易产生优先级倒置;
另外,Linux的周期模式定时器频率仅为100Hz,远不能满足多种实时应用的要求。
Linux
之所以有以上问题,是因为它最主要的设计原则是最大限度的利用各种资源,力求最公平的调度各个进程,以获得最大的整体性能,这也正是通用操作系统的设计原则。

3 Linux关中断机制
   Linux内核可以看成是一个不断对请求进行响应的服务器,这些请求可能来自正在cpu上执行的进程,也可能来自正在执行中断请求的外部设备。因此,内核的各个部分并不是严格按照顺序依次执行的,而是采用交错执行的方式。内核控制路径是指内核用来处理系统调用、异常或中断所执行的指令序列。在交错执行内核控制路径时,要避免可能带来的数据混乱的危险,因此引入了临界区的概念。临界区是指一段代码,在其他的内核控制路径能够进入临界区前,进入临界区的每一内核控制路径都必须全部执行完这段代码。
   
另外,在Linux操作系统中,大部分外部中断都是开启的,中断处理一般由设备驱动程序来完成。由于通用操作系统中的用户进程一般都没有实时性要求,而中断处理程序直接跟硬件设备交互,可能有实时性要求,因此中断处理程序的优先级被设定为高于任何用户进程。但对于实时操作系统采用上述的中断处理机制是不合适的。外部中断是环境向实时操作系统进行的输入,它的频度是与环境变化的速率相关的,而与实时操作系统无关。如果外部中断产生的频度不可预测,则一个实时任务在运行时被中断处理程序阻塞的时间开销也是不可预测的,从而使任务的实时性得不到保证。因此,Linux内核的进程经常关闭中断以尽快完成自己的任务。但同时也引入了问题:如果低优先级的进程关闭了中断,那么即使有高优先级实时进程的中断发生系统也无法响应。这种情况在实时系统中也是不允许发生的。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值