“裸机”与嵌入式操作系统

来源:互联网 发布:软件测试表情包 编辑:程序博客网 时间:2024/05/19 03:44

“裸机”与嵌入式操作系统

@[湫枼|2017/9/18]

实时系统

概念:

指那些对处理结果的正确性和处理过程的及时性都有严格要求的系统。

实验室的信道模拟器系统系统三(短波双频智能收发校验系统)中,各个功能的实现都要求较高的实时性,功能与功能之间的消息传递以及指令交互也都依赖较高的准确性。因此实验室的两个主要项目都严格属于实时系统。

实时系统有两种实现方式,一种是前后台系统,也就是我们常说的裸机系统。另一种就是具有实时内核的操作系统


前后台系统(裸机系统)

简单的小系统通常设计成前后台结构。

这个结构包含一个死循环若干中断服务程序
应用程序是一个无限的循环,循环中调用相应的函数完成相应的操作,属于后台结构。
中断服务程序用于处理系统的异步事件(异步事件就是在大循环中无法用顺序结构描述或预测的行为,例如串口后者网口接收到数据,接收时间是随机的非计划性的,为了处理这种异步事件所以引入中断概念。)中断服务程序属于前台结构。

  • 为了保证有实时性要求的任务得到及时处理,本该在大循环里(任务级)执行的关键代码必须放在中断里执行,这导致中断程序运行时间变长。
  • 中断时间过长就会影响系统的响应速度。所以我们为了降低这种情况,通过在中断程序中立刻生成特定数据(置标志位),使后台程序查询相关标志位,根据标志位的变化情况,调用不同的函数中进行处理。从某一异步信号触发中断开始,到这一信号指示的事件得到处理这段时间称为任务级响应延迟
  • 最长的任务级响应延迟取决与后台大循环的运行时间,因此特定模块的运行时间间隔是不确定的并且后台循环的任何更改都会使所有功能模块的运行时间间隔受到影响。进而整个系统的实时性就会受到挑战。
  • 随着系统越复杂,功能模块越多,任务级响应延迟就越长也越不稳定。裸机系统中,各模块之间的信息交换,一般通过大循环轮询无锁的全局变量来进行,任务级响应延迟越长,模块间信息交换效率就会下降,单个模块执行时间成本增加必然导致系统响应缓慢,运行效率下降。

综合上述分析可以发现:

  • 前后台系统的优点在于结构简单,资源占用较少,在实现较为简单的小系统时是最佳的选择。
  • 但面对较为复杂的实时系统时,前后台结构会出现运行效率降低,后期维护和再开发困难等问题,不适合实现复杂的实时应用。

那么如何使实时系统在运行时更高效地调动硬件资源呢?

我们先来看一下使用前后台结构实现实时系统时出现了哪些问题。

  • 首先是后台的大循环在轮询的过程中以低运算量长时间占用了CPU,导致CPU资源被大大的浪费。当紧急的中断事件还在等待被处理的时候,CPU却不得不把时间浪费在写死的轮询流程中,不能被及时处理。

为了解决这一问题,嵌入式操作系统受主机操作系统的启发,提出了一种通过实时内核来调度硬件资源的思想

设计实时系统时,可以把系统功能划分成多个任务,每个任务仅负责实现某一功能。每一个任务都是一个死循环。实时内核负责管理这些任务,决定任务的运行和切换,CPU在多个顺序执行的任务之间切换,以实现CPU资源的最大化利用。

可剥夺型多任务内核

我们来看一下这个例子:

  1. 低优先级任务正在运行。
  2. 此时产生中断请求,CPU跳转到该中断源对应的中断服务程序ISR处开始执行。
  3. 中断服务程序ISR处理中断请求,它的处理过程非常精简。ISR通常只是发出一个信号或者一则消息,而由一个高优先级的任务响应这个信号或消息(消息响应时间可达到1ms),并完成该中断请求的大部分处理工作。例如,假设中断是由网口控制器产生的,那么ISR只需要向一个任务发出一个信号,然后由该任务来处理接收到的数据包。
  4. 当ISR执行结束后,uC/OS发现ISR发出的信号或者消息使得某个优先级更高的任务具备了运行条件,在这种情况下,uC/OS不会返回到原来被中断的任务,而是切换到这个更重要的任务运行。
  5. 高优先级任务开始运行,对中断事件进行处理。
  6. 高优先级任务处理完后,返回到任务起始点,并通过调用uC/OS的功能函数,等待新的外部中断事件。
    原先被中断请求打断的低优先级任务继续运行。对这个任务来说,刚才的任务切换就像
    完全没有发生过一样。

像uC/OS这样的多任务内核还会负责管理任务间通信和系统资源(内存以及I/O设备)。

使用uC/OS操作系统的理由:

  1. 可剥夺性实时内核的特点使得它的实时性很好,处理异步事件时效率高。

    • 相比于裸机结构,系统越是复杂,功能指令越多,这一优势就越发明显。
  2. 增强系统的可靠性。

    这一点体现在两个方面:

    • 一方面,任务的调度与切换时间是固定的且可设置的。系统的结构设计使得任务模块化程度高,即使一个任务运行时出现了异常,到达最长切换时间后也会自动切换,以防止程序假死或者跑飞。
    • 另一方面,操作系统内核源码是通过严格测试和验证过的,通常来说要比裸机系统更强壮更稳定,能适应更复杂的工作环境。尤其涉及堆栈操作、I/O操作等一些芯片内部资源的使用时,uC/OS能给出更可靠更高效的处理函数。稳定,能适应更复杂的工作环境。尤其涉及堆栈操作、I/O操作等一些芯片内部资源的使用时,uC/OS能给出更可靠更高效的处理函数。
  3. 开发周期短,便于代码维护以及扩展新的功能。

    • uC/OS提供了许多系统级的函数,可以使开发人员把关注点集中在任务的具体实现上,减少一些重复性工作。一些重复性工作。
    • 一些裸机实现的实时系统中出现了大量全局变量,用来标识系统的运行状态;这对后期的调试维护造成极大的困难。uC/OS中为任务间的通信提供了完善的消息机制,比查询全局变量的信息交换方式更高效。而且同样使用模块化的设计,调试维护很方便;试维护造成极大的困难。uC/OS中为任务间的通信提供了完善的消息机制,比查询全局变量的信息交换方式更高效。而且同样使用模块化的设计,调试维护很方便;
    • uC/OS是一个支持多任务的操作系统。一个完整的程序可以划分成几个任务,不同的任务执行不同的功能。增加新功能时,只需要增加新任务或者在任务中添加代码,只要不涉及共享资源就不必担心互相之间有影响。行不同的功能。增加新功能时,只需要增加新任务或者在任务中添加代码,只要不涉及共享资源就不必担心互相之间有影响。

使用uC/OS操作系统的缺点:

  1. 代码量会增加,因此要求控制器提供更大的存储空间。FLASH空间要大于24K。
  2. 运行时将增加系统的开销具体的增加量取决于功能函数被调用的频率。因此需要更大的内存。RAM空间需要大于8K。

结论:

uC/OS适合中断比较多的多任务系统。尤其是控制命令较多的,且对实时性要求较高的系统。

阅读全文
0 0
原创粉丝点击