大多数嵌入式系统应用在实时环境中,因此嵌入式操作系统跟实时(Real-Time)操作系统密切联系在一起。一般操作系统只注重平均性能,如对于整个系统来说,所有任务的平均响应时间是关键,而不关心单个任务的响应时间。与之相比,嵌入式实时操作系统最主要的特征是性能上的实时性,也就是说,系统的正确性不仅依赖于计算的逻辑结果,也依赖于结果产生的时间。从这个角度上看,可以把实时系统定义为“一个能够在指定的或者确切的时间内,实现系统功能和对外部和内部、同步或异步事件作出响应的系统”。
RTOS嵌入在系统的目标代码中,系统复位并执行完BootLoader后执行,用户的其它应用程序都建立在RTOS之上。RTOS是一个标准的内核,将CPU时间、中断、I/O、定时器等资源都包装起来,留给用户一个标准的API接口。
实时操作系统可根据实际应用环境的要求对内核进行裁剪和重新配置,组成可根据实际的不同应用领域而有所不同,但以下几个重要组成部分是不太变化的:实时内核、网络组件、文件系统和图形接口等。RTOS的体系结构如图1-1所示。
图1-1 RTOS的体系结构
嵌入式操作系统相对于一般操作系统而言,仅指操作系统的内核(或者微内核),其他诸如窗口系统界面或通信协议等模块,可另外选择。目前大多数嵌入式操作系统必须提供以下管理功能。
1. 多任务管理
所有嵌入式操作系统都是多任务的。目前所说的多任务大都是指多线程(Multi-Threads)方式或多进程(Multi-Processes)方式,这两者的运行机制不完全一样。这里以多进程来讨论,调度程序的好坏直接影响到系统的性能。和一般的操作系统一样,嵌入式操作系统的作用也是决定在特定的某一时刻系统应该运行哪一个进程。现在许多CPU都已提供多组寄存器来辅助执行模式的切换,有比较便捷的指令来记录每个执行程序的情况,因此记录每个执行程序的状态已不成问题,操作系统主要是提供调度机制来控制这些执行程序的起始、执行、暂停和结束。
嵌入式操作系统中的进程状态有如下3种:
● 运行状态(Running);
● 就绪状态(Ready);
● 等待状态(Waiting)。
3种状态之间的关系如图1-2所示。其中进程状态的转换的条件与一般操作系统中的转换条件类似。
图1-2 3种状态关系图
一个可运行的进程只是一个等待CPU的进程。调度程序选择系统中所有可运行的进程中最有权运行的进程。一般操作系统中的调度程序所采用的调度算法有:FCFS(先来先服务)、轮询(Round Robin)、优先级(Priority)以及它们的各种组合。
调度程序的调用是由一些特定的事件引起的。这种类型的事件有3种:进程的创建、进程的删除和时钟滴答。
2. 存储管理
与一般操作系统的存储管理相比,嵌入式操作系统的存储管理要相对简单一些。由于虚拟存储中经常要对页进行换入/换出操作,所以内存中页命中率和换入/换出所耗费的时间严重破坏了整个系统的确定性。这种存储机制很难保证实时系统所要求的时间确定性,而且虚拟系统中需要地址转换表和其他一些数据结构,这样留给程序的内存空间就减少了。总之,虚拟内存管理占用了相当一部分系统资源,因此在系统资源非常有限的嵌入式系统中,一般不采用虚拟内存管理,而采用动态内存管理方式,即当程序的某一部分需要使用内存时,利用操作系统提供的分配函数来处理,一旦使用完毕,可通过释放函数来释放所占用的内存,这样内存就可以重复使用。
3. 周边资源管理
在一个嵌入式系统里,除了系统本身的中央处理器、内存之外,还有许多不同的周边系统,例如输入/输出设备、通信端口或外接的控制器等。操作系统中必须提供周边资源的驱动程序,以方便资源管理和应用程序使用。对于应用程序来说,必须向操作系统注册一个请求机制,然后等待操作系统将资源安排给应用程序。
4. 中断管理
因为查询方式需要占用大量的CPU时间,因此,嵌入式操作系统和一般操作系统一样,一般都是用中断方式来处理外部事件和I/O请求。中断管理负责中断的初始化安装、现场的保存和恢复、中断栈的嵌套管理等。