嵌入式实时操作系统设计

嵌入式实时操作系统(RTOS)设计

田上飞 王庆华(Rainbow队)

摘要 本文从实时操作系统实时性的重要性出发,引出了基于优先级和时间片的实时性的实现方案:链表+位图,并在此基础上提出了一种嵌入式实时操作系统的实现方案——ATOP操作系统。
关键词:嵌入式 实时操作系统 优先级调度 时间片轮询

1 前言
实时操作系统(RTOS)是指能满足实时控制系统的实时性要求,可有效管理系统任务及资源的操作系统软件。实时性是指对物理过程发生的真实时间的限制和要求的满足程度,是RTOS区别于其它OS的一个重要特征。RTOS正确性不仅依赖系统计算的逻辑结果,还依赖于产生这个结果的时间。实时系统能够在指定或者确定的时间内完成系统功能和外部或内部、同步或异步时间做出响应的系统。因此实时系统应该具有在一定的时间范围内识别并处理相应事件的能力。可见对于实时系统实时性的重要性,它要求系统运行程序的时间精确并可预知,也即在系统运行之前,可一定程度上预知某一时刻哪个任务或程序段在运行,特别是在强实时操作系统中。
2 任务调度
在操作系统中,应用功能被设计成几个任务来完成,一个任务是一个进程或线程,它是一个具有独立功能的程序段的一次运行活动,是系统调度的基本单位。对于一个特定的硬件平台,在运行环境相同条件下,一个任务的实际运行时间是一定的。这样,RTOS的实时性的保征就落在了任务调度上。
常见的任务调度策略有优生级调度、时间片轮询调度等,本文介绍基于优先级和时间片的调度。优先级调度的方式常用的有任务队列和优先级位图。任务队列调度时都需要一定程度的优先级排序,这导致了任务调度时间的不确定性。在T-kernel,FreeRTOS中定义了一个全局变量来记录当前系统中最高优先级的任务,在调度时间上比直接优先级排序队列优化了许多,但调度时间还是不确定,如最高优先级任务睡眠时还要搜索队列来获取最高优先级任务。
优先级位图很好地解决了调度时间不确定性问题。它用全局变量OSRdyGrp(就绪组)和OSRdyTbl[](就绪表)来存储当前系统中任务优先级信息,某一优先级任务就绪时设置相应就绪表中的某一位,某一所有优先级任务都阻塞时对相应就绪表的位清零。由于位图可准确地置位和清零,这就保征了任务调度时间的确定性。这里的准确是指时间确定且有效,无论有多少任务,置位和清零的步骤是一定的,代码执行时间确定并且快速。
下图显示了优先级调度时获取最高优先级的过程。

图1位图法获取最高优先级
(高效、准确)
时间片轮询调度采用双向链表可达到较好的效果。如下图所示,因为调度时只是对OSTCBPrioTbl[]中某一指针元素赋值,时间确定性达到最大程度保证。
下图显示了时间片调度——双向链表的处理过程。

图2同优先级时优先级TCB指针依次指向TCB1、TCB2、TCB3
(FCFS)
由上述分析可知,位图与双向链表操作时间确定,两者相结合能够很好的保证RTOS对实时性的要求。
ATOP设计时采用了ucos的位图思想,但与ucos中位图中一位与一个任务直接相联系不同,ATOP中一位与一个优先级相联系,它引出的是一个优先级链表,即双向链表。ucos采用位图完成了任务的优先级调度。在ATOP中,位图只是任务调度的一部分,ATOP用位图来做优先级的相关工作(位图完成优先级的记录与获取),而直接与任务相关的是时间片部分,即双向循环链表。一个双向循环链表是由同一个优先级的处于就绪态和运行态任务控制块组成。它与时间阻塞链表,信号量阻塞链表(这三个链表相对独立)一起完成整个任务的运行(下面将作介绍)。真因为两者的调度方式实现的不同,在不同的调度方式基础上搭建系统的方法和最终形成的系统就完全不同了。
在此要强调的一点是,ATOP在整个设计过程中巧妙地利用了数组下标这一资源。在任务优先级表OSTCBPrioTbl[]中,数组下标就是优先级,这样我们只要知道了优先级,就能以此为下标访问任务优先级表,进而获知双向链表,也就知道了要运行的那个具体的任务。
3 任务管理
在任务调度策略选定的基础上我们来构建一个实时操作系统,因为位图+双向链表已保证了实时性的要求,接下来就是要填充一般操作系统的功能,这里主要绍任务管理和任务间通信与同步。一个操作系统最基本能功能就是任务管理,任务是系统调度的单位。下图显示了要设计的系统的任务状态转换。

图3状态转换图
ATOP中任务共有五种状态:休眠态,就绪态,运行态,挂起态和中断态。每个时刻CPU只能运行一个任务,所以处于运行态的任务数只能为1或0(中断运行时),可以简单地把它作为就绪态的一部分(实际设计时也是这样做的,并没有为运行态单独设置下一个标识)。中断态时CPU运行的是中断相关内容,这进CPU按照指定流程运行,可从任务中分离出来。这样要考虑的任务管理就是处于休眠态,就绪态和挂起态的任务了。
ATOP设计中采用了任务状态与链表相对应的策略来管理任务,状态变化即对相应链表进行操作,可最大限度消除冗余,操作简单易于理解。就绪链表(RdyList)与就绪态对应,而挂起态又根据挂起的原因不同分成两类,时间阻塞链表(DlyList)与时间阻塞挂起态相对应,信号量阻塞链表(SemList)与信号量阻塞挂起态相对应,其它归为一类没有链表与这相对应。这样避免了ucos中时钟服务要搜索整个任务链表而带来的巨大时间消耗,使任务调度更加实时,调度时间更加精确。
需要指出的一点是,ATOP中链表可选FCFS操作,使链表中插入删除元素时间确定。
4 任务间通信与同步
在多任务操作系统中,一项工作可能需要多个任务或多个中断处理程序共同完成。那么,它们之间必须协调工作、相互配合,必要时还要交换信息。操作系统通过任务间通信与同步机制来解决这个问题。可以这样认为,任务是操作系统的实体,通信与同步提供相关实体(任务)之间的联系,有了这两部分,操作系统才能很好的工作(当然,还需要有中断等其它部分的支持)。
任务间通信与同步的方法很多,如开头中断、禁止任务切换、信号量、邮箱等。这里主要介绍信号量机制的实现,当然开关中断、禁止任务切换等一些相对简单的方法ATOP中也提供。
信号量可分为三类,同步信号量,资源信号量,互斥信号量。资源信号量和互斥信号量都是标识资源是否可用,但互斥信号量只为保护一个资源被互斥地访问,很容易出现优先级逆转现象需要多加考虑而单独列出来。同步信号量与资源信号量有许多共性,ATOP中把两种信号量归为一类,提供服务的简单过程可描述为:有资源或事件发生,申请信号量的任务获得信号量继续运行;没有资源或事件没有发生,就加入等待队列,直到有资源或事件发生时把任务唤醒。
互斥信号量与同步或资源信号量处理流程相似,只是在此基础上设计了优先级逆转保护机制:优先级天花板协议。避免优先级逆转的协议(或方法)有两种:优先级天花板协议和优先级继承协议,只所以采用优先级天花板协议,是因为优先级继承协议有两处不足:
一.优先级继承协议本身不能避免死锁的发生;
二.在优先级继承协议中,任务的阻塞时间虽然是有界的,但由于可能出现阻塞链,使得任务的阻塞时间可能会很长。
同时也要注意,任务在访问互斥体时提升了优先级,访问完之后还要恢复原先的优先级,以原先的优先级继续运行,这是个相当耗时过程。此外,ATOP设计中也对优先级天花板协议作了改进,只有低优先级阻塞了高优先级任务运行时才提升互斥信号量拥有者的优先级至天花板。其流程如下图,其中T0,T1,T2,T3代表申请该信号量的任务。

图4 改进的优先级天花板协议的处理流程
(只有T1阻塞了高优先任务时优先级才提升至天花板)
与优先级继承协议相比,优先级天花板协议有避免死锁,执行效率高优点,改进后的优先级天花板协议,一定程度降低了程序运行时间提高了程序运行效率。
5 结束语
本文只是粗略地介绍了一个实时操作系统的实现方案——ATOP,着重强调了ATOP为了保征实时性所采取的策略,位图+双向链表可保证任务调度的强实时性,状态与链表相对应操作简单节省时间,改进的天花板协议在节省时间的同时,避免了死锁和优先级反转。嵌入式实时操作系统最重要的就是强实时性,任务运行时间精确可预知,通过上述方案的实现过程可知,ATOP很好地解决了这个问题。

参考文献:
【1】夏靖波 王航 陈雅蓉 编著. 嵌入式系统原理与开发. 西安:西安电子科技大学出版社,2007.7
【2】任哲 潘树林 房红征 编著. 嵌入式操作系统基础uc/os-II和Linux. 北京:北京航空航天大学出版社,2006.8
【3】邵贝贝译,uC/OS-II 源码公开的实时嵌入式操作系统,中国电力出版社

时间: 2024-10-10 10:42:21

嵌入式实时操作系统设计的相关文章

SoC嵌入式软件架构设计之七:嵌入式文件系统设计

嵌入式的系统区(system disk,SD)包括操作系统.驱动.中间件.应用和字库.UI资源等文件,本文讲述SD区的文件系统设计.文件系统最主要的目标是为了实现单个文件的定位和读写.因为一般代码都是不可自修改的,即量产之后不会有写操作,嵌入式系统的SD文件系统就是为了能够简单.高效地定位某个文件和读取文件中的数据.设计原则和要点有以下几方面: 1. 逻辑连续存储单个文件,以扇区对齐. SD区的单个代码和资源文件一般都不大,所以不必要像fat32文件系统那样用fat表把文件簇串起来,直接逻辑连续

嵌入式操作系统设计中的若干问题

嵌入式开发就是指在嵌入式操作系统下进行开发,一般常用的系统有WinCE,Palm,现在又多了Symbian等,其实只要会C++,在哪里都差不多,都有相应的SDK开发包 http://www.zhihu.com/people/lnehfc/askshttp://www.zhihu.com/people/ndrqtqvs/askshttp://www.zhihu.com/people/bpkmowlps/askshttp://www.zhihu.com/people/rxshmfoal/asksht

基于MicroBlaze 的嵌入式系统设计

reference: http://xilinx.eetrend.com/d6-xilinx/article/2013-03/3863.html 摘 要:当今时代,嵌入式系统已经无所不在,与人们的日常生活息息相关.嵌入式系统以微处理器为核心,以计算机技术为基础,其主要特征是实时性强.据统计,目前世界上微处理器每年生产总量的95 %以上都是面向嵌入式系统应用,围绕Xilinx 公司的MicroBlaze 微处理器,对其体系结构.设计流程和相关开发工具一一做出介绍,并且通过一个简单的实例来说明以Mi

嵌入式启动之三:应用程序的三种存储和加载方式

通过前面嵌入式启动方式的学习,再来理解嵌入式应用程序的三种加载方式是比较容易的.一般意义上,启动是为了引导OS到内存,而应用程序则是操作系统run起来后的用户选择,两者是比较相似的.先根据启动的两种方式来介绍应用程序的加载. 1. 对于资源有限型的嵌入式系统,应用程序在编译.链接之后,会通过二进制工具分析可执行文件的格式,抽出code和data段数据,生成.HEX格式或者.BIN格式,下载到SOC内置的flash中.在上电之后就直接执行了.这种加载方式称为离线加载. 2. 对于资源宽裕型的嵌入式

嵌入式视觉系统

随着嵌入式技术的发展,嵌入式视觉技术也越来越比较重视,多年前.人们对嵌入式视觉技术的研究还是很模糊的,而在嵌入式视觉技术高度专业化应用的今天.越来越多的新兴工业为视觉应用找到了用武之地.那么就让我们谈谈如何使用嵌入式视觉技术.采用嵌入式视觉技术的理由以及近期哪些应用最有希望采用嵌入式视觉技术. 更强处理能力 根据定义,嵌入式视觉系统实际上涵盖了执行图像信号处理算法或视觉系统控制软件的任何设备或系统.智能视觉系统中的关键部分是进行实时高清数字视频流处理的高性能计算引擎.大容量固态存储.智能摄像头或

自己动手写处理器开篇介绍

将陆续上传本人写的新书<自己动手写处理器>(尚未出版),今天是开篇,我尽量每周四篇 内容简介 本书使用Verilog HDL设计实现了一款兼容MIPS32指令集架构的处理器--OpenMIPS.OpenMIPS处理器具有两个版本,分别是教学版和实践版.教学版的主要设想是尽量简单,处理器的运行情况比较理想化,与教科书相似,便于使用其进行教学.学术研究和讨论,也有助于学生理解课堂上讲授的知识.实践版的设计目标是能完成特定功能,发挥实际作用. 全书分为三部分.第一部分是理论篇,介绍了指令集架构.Ve

进程调度总结

进程调度 基本属性 1.多态性 从诞生.运行,直至消灭. 2.多个不同的进程可以包括相同的程序 3.三种基本状态 它们之间可进行转换 4.并发性并发执行的进程轮流占用处理器 基本状态 1.等待态:等待某个事件的完成: 2.就绪态:等待系统分配处理器以便运行: 3.运行态:占有处理器正在运行. 运行态→等待态 往往是由于等待外设,等待主存等资源分配或等待人工干预而引起的. 等待态→就绪态 则是等待的条件已满足,只需分配到处理器后就能运行. 运行态→就绪态 不是由于自身原因,而是由外界原因使运行状态

理解Android虚拟机体系结构

1 什么是Dalvik虚拟机 Dalvik是Google公司自己设计用于Android平台的Java虚拟机,它是Android平台的重要组成部分,支持dex格式(Dalvik Executable)的Java应用程序的运行.dex格式是专门为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统.Google对其进行了特定的优化,使得Dalvik具有高效.简洁.节省资源的特点.从Android系统架构图知,Dalvik虚拟机运行在Android的运行时库层. 2 Dalvik虚拟机的功能

FreeRTOS 特性简介

FreeRTOS 由 Richard Barry 开发,是一个开源的.可移植的.小型的嵌入式实时操作系统内核.FreeRTOS 既支持抢占式多任务,也支持协作式多任务.FreeRTOS的主要特性如下: 实时性:FreeRTOS “可以”配置成为一个硬(Hard)实时操作系统内核.要注意这里用的是“可以”,FreeRTOS 也可以配置为非实时型内核,甚至于部分任务是实时性的,部分不是.这一点比uC/OS-II 要灵活. 任务数量:FreeRTOS对任务数没有限制,同一优先级也可以有多个任务.这点上