当前位置:
文档之家› 实时操作系统(RTOS)培训
实时操作系统(RTOS)培训
任务状态变迁图
WAITING
DORMANT
READY
RUNNING
ISR
任务状态变迁
就绪 --> 运行
调度程序选择一个新的线程运行
运行 --> 就绪
运行线程用完了时间片 运行线程被高优先级线程抢占
运行 --> 等待
当一线程必须等待时
等待某外设的I/O 操作 等待某共享资源由暂不能使用变成能使用状态 等待定时脉冲的到来或等待超时信号的到来以结束目前的等待 ……
TCB(任务控制块)
TCB在任务建立时将被赋值(初始化) TCB是一个数据结构,用来保存该任务的 状态:堆栈指针、堆栈大小、任务状态、 任务优先级…… …… 任务重新得到CPU 使用权时,任务控制 块能确保任务从当时被中断的那一点丝 毫不差地继续执行 TCBs全部驻留在RAM 中
任务状态
每个任务都处在以下5 种状态之一:休眠态, 就绪态、运行态、挂起态和被中断态 休眠态:该任务驻留在内存中,但并不被内核 所调度 就绪态:该任务已经准备好运行,但由于优先 级比正运行的任务优先级低,还暂时不能运行 运行态:掌握了CPU 的控制权,正在运行中 挂起态:也叫等待态,在等待某一事件的发生 中断态:发生中断时,进入相应的中断服务
硬件特性
体积小,集成效率高 面向特定应用 低功耗,能在恶劣环境下工作
软件特性
软件的研发与硬件紧密相关 软件代码要求高效率和高可靠性 软件一般固化在FLASH或ROM中
应用
工业过程控制 军事电子设备和现代武器 网络通信设备 消费电子产品
嵌入式实时系统软件特征
实时性:反应时间要快,按要求的间隔输出正确时间信 实时性:反应时间要快, 号给实时的控制设备 多任务并发性:利用适当的策略控制多任务的执行, 多任务并发性:利用适当的策略控制多任务的执行,提 高资源的利用效率 有处理异步事件的能力 快速启动, 快速启动,并有出错处理和自动复位功能 嵌入式实时软件是应用程序和操作系统两种软件的一体 化程序 嵌入式实时软件的开发需要独立的开发平台和交叉开发 环境
任务管理(sidsa API)
t_create
ULONG t_create(char name[4], ULONG prio, ULONG sstack, ULONG ustack, ULONG flags, ULONG *tid)
t_start
ULONG t_start(ULONG tid, ULONG mode, void *start_addr, ULONG targs[])
t_delete
ULONG t_delete(ULONG tid)
t_suspend
ULONG t_suspend(ULONG tid)
t_resume
ULONG t_resume(ULONG tid)
t_wkafter
ULONG tm_wkafter(ULONG ticks)
任务管理(kernel API)
一个信号量是一个16位变量,初值为 0~65535,值为0表示资源处于锁住状态, 非0表示有多个资源,供多个任务访问 信号量表示符号:钥匙或旗帜
信号量的P、V操作
等待信号量( P操作):
如果信号量值大于0,则 信号量值减1,任务得以 继续运行 如果信号量的值为0,等 待信号量的任务被挂起并 列入等待信号量任务表
RTOS组成(续)
API
RTOS 基本内核 线程线程管理 时钟管理 中断设备驱动管 理 通信管理 存储管理 RTOS扩展内核 接口协议管理 其它
HAL
RTOS组成(续)
基本内核:嵌入式RTOS 中最核心最基础的部分
任务(线程/线程)管理:负责系统中任务状态的变迁 中断(包括时钟中断)管理:开关中断,完成现场切换和保持 任务(线程/线程)通信管理:信号量、事件、消息队列等 存储管理:分配存储器空间
嵌入式系统通常使用RTOS,其特征为
在不同的系统负载下,行为可以预测 支持基于优先级的调度 MEMORY模型对于RTOS的性能十分重 要 通常都需要一个时钟来处理任务的同步
比较 HR T 内存 S 分配 虚存 N SRT D/S N NR T D Y
S-STATIC D-DYNAMIC
嵌入式系统(续)
任务管理(kernel API 续)
cyg_thread_get_priority cyg_thread_get_current_priority cyg_thread_set_priority cyg_thread_self cyg_thread_idle_thread cyg_thread_get_stack_base cyg_thread_get_stack_size cyg_thread_measure_stack_usage cyg_thread_get_next cyg_thread_get_info cyg_thread_find
等待 --> 就绪
当所等待的事件发生时
任务切换
也称为上下文切换(Context Switch) 当多任务内核决定运行另外的任务时:
保存正在运行任务的当前状态(Context),即CPU 寄存器中的全部内容。这些内容保存在任务自己的 栈区之中 把下一个将要运行的任务的当前状况从该任务的栈 中重新装入CPU 的寄存器,并开始下一个任务的运 行
Command processor
I/O
Subsystem
File MGMT
Task Scheduling & Dispatch
Real time clock
Interrupt Service routines
资源
任何为任务所占用的实体都可称为资源。资源 可以是输入输出设备,例如打印机、键盘、显 示器,资源也可以是一个变量,一个结构或一 个数组等 可以被一个以上任务使用的资源叫做共享资源 为了防止数据被破坏,每个任务在与共享资源 打交道时,必须独占该资源,这叫做互斥 (mutual exclusion)
前后台系统(续)
多任务系统
CPU在许多任务之间转换、调度,轮番 服务于一系列任务中的某一个 优点:
使CPU 的利用率得到最大的发挥 使应用程序模块化 可以将很复杂的应用程序层次化 应用程序 将更容易设计与维护
RTOS组成
操作系统是硬件与用户之间的一层系统软件, 负责管理整个系统,同时将硬件细 节与用户隔离开来为用户提供一个更容易理解和进行程序设计的接口操作 系统的质量以它的体系结构为基础,确保系统的性能、可靠性、灵活性、可移 植性、可扩展性等,同时定义了硬件与软件的界面,操作系统内部各构件的组 织关系系统与用户的接口 RTOS资源分配必须考虑到实时性要求 合理分配优先级 支持优先级抢占 提供任务同步和互斥 支持不同任务之间的数据共享 支持外部事件(中断)响应 系统可剪裁,由于资源限制,所采用的操作系统应该有极强的针对性,因 此操作系统功能够用即可 易于扩展,由于嵌入式设备的功能多样化,要求嵌入式操作系统除提供基 本的内核支持外,还需提供越来越多的可扩展功能模块(含用户扩展),如:针 对特有应用提供的协议支持、协议扩展,功耗控制等等
任务
一个任务也称作一个线程,是一个简单的程序, 该程序可以认为CPU 完全只属该程序自己 每个任务都是整个应用的某一部分,被赋予一 定的优先级,有自己的一套CPU 寄存器和栈 空间 多任务系统中,任意时刻只有一个任务占有 CPU资源 一个任务通常是一个无限的循环,当任务完成 以后,任务可以自我删除
任务切换过程增加了应用程序的额外负荷
任务调度
任务调度就是按一定的调度算法从就绪 任务中选中一个任务到处理器上运行 主要工作:
(1)记录当前任务状态(如指令计数器、状态寄 存器、通用寄存器等)到TCB; (2)根据调度算法,在就绪任务中选一个任务; (3)回收处理机并分配给选中的任务。
任务调度方式
eCos任务及优先级
优先级0~255,优先级的最低3bits忽略,因此 0~7、8~15……各组内的优先级相同,组外数 值越大,优先级越高 root idle eCos任务结构: eCos
task1 task2 task5 task3
task4
任务管理
创建任务(CreateTask) 删除任务(DeleteTask) 挂起任务() 唤醒任务() 改变任务优先级() 获取任务优先级() 获取当前任务ID
衡量系统实时性的3个指标:
响应时间(Response Time) 生存时间(Survival Time) 吞吐量(Throughput)
嵌入式系统
嵌入式系统通常都是实时系统,其特征为
系统的正确性不但依赖于运行逻辑结果 的正确性,而且依赖于得到结果所花费的 时间 系统对于各种外部输入在预定时间内能 得到可以预测的结果
主要的嵌入式实时操作系统
VxWorks
使用最广、市场占有率最高的嵌入式实时操作系统,美国WindRiver 公司产品
VRTX
老牌嵌入式实时操作系统
pSOS
ISI公司推出,现已被WindRiver公司收购
WinCE
Microsoft公司推出,实时性不太好,主要用于掌上系统
Palm OS
3Com公司推出,在PDA市场占有很大份额
扩展内核:为方便用户使用而对RTOS 进行的扩展
根据具体应用不同所做的扩展不同 CAM应用中表现为对CI接口协议进行管理
设备驱动程序接口:RTOS 内核与外部硬件之间的一个硬件抽象层
定义软件与硬件的界限,方便RTOS 的移植升级
应用编程接口:建立在RTOS 编程接口之上的面向应用领域的编程 接口
方便用户编写特定领域的嵌入式应用程序
非抢占式调度 抢占式调度
由于嵌入式操作系统对实时性的较强要求,因此基本上使用 抢占式调度。
调度算法
FIFO:先来先服务 短作业优先 基于优先级: 时间片轮转(Round Robin) : 固定时间片 多级队列算法 多级反馈队列算法 其它组合策略调度算法