1.3 嵌入式操作系统的组成
目前的嵌入式操作系统一般由内核、嵌入式网络支持、嵌入式文件支持等组成。
内核是嵌入式操作系统的基础,也是必备的部分。它提供任务管理,内存管理,通信、同步和互斥机制,中断管理,时间管理及任务扩展等功能。内核还提供特定的应用编程接口,但目前没有统一的标准。
其中,任务管理是内核的核心部分,具有任务调度、创建任务、删除任务、挂起任务、解挂任务、设置任务优先级等功能。通用计算机的操作系统追求的是最大的吞吐率,为了达到最佳整体性能,其调度原则是公平,采用Round-Robin或可变优先级调度算法,调度时机主要以时间片为主驱动。而嵌入式操作系统多采用基于静态优先级的可抢占的调度,任务优先级是在运行前通过某种策略静态分配好的,一旦有优先级更高的任务就绪,就马上进行调度。
嵌入式操作系统的内存管理比较简单。通常不采用虚拟存储管理,而采用静态内存分配和动态内存分配(固定大小内存分配和可变大小内存分配)相结合的管理方式。有些内核利用MMU机制提供内存保护功能。一般不采用被通用操作系统广泛使用的虚拟内存的技术。
通信、同步和互斥机制提供任务间、任务与中断处理程序间的通信、同步和互斥功能。一般包括信号量、消息、事件、管道、异步信号和共享内存等功能。与通用操作系统不同的是,嵌入式操作系统需要解决在这些机制的使用中出现的优先级反转问题。
中断管理一般具有以下功能:安装中断服务程序;中断发生时,对中断现场进行保存,并且转到相应的服务程序上执行;中断退出前,对中断现场进行恢复;中断栈切换;中断退出时的任务调度。通过中断会为系统提供一些时间管理的功能,包括日历、延迟操作等。
由于目前的嵌入式系统大多数都需要网络支持,因此嵌入式操作系统中也往往容纳进了各种网络支持的模块,以实现对应用编程隐藏复杂的网络协议细节,保证正确收发数据。例如,一般会采用静态分配技术,在网络初始化时就静态分配通信缓冲区,设置了专门的发送和接收缓冲(其大小一般小于或等于物理网络上的MTU值),从而确保了每次发送或接收时处理的数据不会超过MTU值,也就避免了数据处理任务的阻塞等待。
嵌入式文件系统相比之下较为简单,主要具有文件的存储、检索、更新等功能,一般不提供保护和加密等安全机制。它以系统调用和命令方式提供对文件的各种操作,主要包括:设置和修改对文件和目录的存取权限;提供建立、修改、改变、删除目录等服务;提供创建、打开、读、写、关闭、撤销文件等服务。