




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、嵌入式操作系统,陈香兰 助教:陈博、李春华 Spring 2009,RTEMS操作系统介绍,3,提纲,RTEMS概述 RTEMS4.0.0体系结构及模块介绍 RTEMS4.0.0的启动 Hello任务的运行 Printf的实现,4,RTEMS概述,实时多处理器系统Real Time Executive for Multiprocessor Systems 开源的无版税的实时嵌入操作系统 最早用于美国国防系统first=实时导弹系统=Real Time Executive for Missile Systemsthen=实时军用系统=Real Time Executive for Militar
2、y Systems, 现在由OAR公司负责版本的升级与维护。 在航空航天、军工、民用等领域都有广泛应用。,5,RTEMS体系结构,版本4.0.0 APP静态联编,包括 应用程序、C库、RTEMS RTEMS相关的所有源代码都在c目录下,包括操作系统、测试包、应用实例、BSP包、设备驱动以及支持库。 总体上RTEMS代码由两部分组成 EXEC:RTEMS操作系统执行体 82, 645 行 LIB:RTEMS库,包括libc、bsp(包括驱动)以及libcpu 146, 262 行,EXEC,LIB,6,RTEMS的源代码结构,阅读各个层次目录下的readme 观察主要目录及文件,7,EXEC,R
3、TEMS操作系统包括一个核心score 核心之上有可以支持两种操作系统封装 符合POSIX标准的 RTEMS 在最上层是SAPI EXEC代码统计信息 SCORE:52166 行 RTEMS:16045 行 POSIX:11345 行 SAPI:3089 行,8,LIB,Libbsplibbsp.a Libc Libcpu Libmisc Libnetworking Start,BSP基本功能,BSP基本驱动,基本C库,CPU库,CPU相关操作,但与board无关,一些工具,网络,启动支持,i386和ppc都不在这,9,SCORE中的模块及其依赖关系,Src:15个主要的handler API
4、扩展、user扩展、Workspace、heap、Object、Thread、threadq、Watchdog、tod、Msg、sem、mutex、Isr、interr、chain 一些辅助handler:address、sysstate、state、context、priority等 Mp相关 Cpu:提供CPU相关的一些支持,10,API和user扩展,不同的操作系统封装具有不同的操作系统语义。有时需要在score的基础上进行扩展。 score提供两种扩展: API扩展和user扩展。 API扩展提供了3个可扩展点 Predriver:系统初始化时,所有驱动初始化前 Postdriver:
5、系统初始化时,所有驱动初始化后 Postswitch:根据需要在线程切换后,11,User扩展提供了8个扩展点: Thread_create:在线程初始化后执行 Thread_start:在线程启动后 Thread_restart:在线程重启后 Thread_delete:在线程close的后面运行 Thread_switch:上下文切换之前 Thread_begin:在线程入口程序运行前 Thread_exitted:在线程入口程序退出后 Fatal:系统出错时,12,每次扩展都要提供API/user扩展点集的扩展例程集,组织成一个扩展节点 可以进行多次扩展,所有扩展节点使用链表连接在一起
6、_API_extensions_List _User_extensions_List 扩展例程的执行 在每个扩展点,遍历API/user扩展链表,对每个扩展节点,找到这个扩展点的例程并执行,13,Score中的chain,这是score中普遍使用的一种数据结构 类似双向链表 包括一个链表控制结构和若干链表节点 使用chain链表的大多数数据结构都将链表节点数据结构作为第一个元素,以便于通过类型转换方式维护链表,14,Score的heap,一种动态内存管理方法 堆=一组堆块 所有的空闲堆块组织成一个空闲堆块链表。 分配算法:首次适应算法 分配:分割;回收:合并 初始化给定内存区域,划分成两个堆块
7、 一个大堆块,基本覆盖全部内存区域 最后8个字节为第二个堆块为整个堆的尾堆块,永远不会分配出去,15,Score的workspace,Workspace是score的可用内存区域。 Score的各个模块都通过workspace的分配/回收函数使用内存。 Workspace是score heap的一个应用实例。 Workspace的初始化 根据rtems静态配置信息,计算出Workspace的大小 在系统初始化时,辟出相应的物理内存作为Workspace,16,Score的对象管理,17种对象类型 内部线程、RTEMS任务、POSIX线程 其他8种RTEMS对象类型: 定时器、信号量、消息队列、
8、分区、区域、端口、周期、扩展 其他6种POSIX对象类型: 中断、消息队列、互斥量、信号量、条件变量、键值,17,每个对象类型有专门的对象类型信息结构保存该类对象的基本信息,包括: 类型号 最小和最大id 最多对象个数 有效对象句柄表 对象名字字符串数组、最大对象名字长度 空闲对象链表 等等,18,每个有效对象都有一个32位的对象id标识 后16位:对象索引号 中间11位:对象位置信息(本地or远程) 高5位:对象类型号,19,对象数据结构 对象控制结构 链表节点:连接同一种类型的对象。,20,Score的watchdog,Watchdog实现定时执行功能。 提供两种定时单位:tick和sec
9、ond。使用两个定时器链表分别维护: _Watchdog_Ticks_chain _Watchdog_Seconds_chain 维护:只需要考虑最前面的定时器 定时器按到期时间先后排序 后继定时器记录与前驱定时器之间的时间差,21,Score的线程队列,有两种线程队列维护方式 基于FIFO,所有线程都在一个队列上 基于优先级: 一共256个优先级, 为查找方便256个优先级划分为4组,每组一个队列,负责64个优先级 查找时高32个优先级从队列前方开始搜索底32个优先级从队列后方开始搜索,22,Score的消息队列,两种消息队列: 基于FIFO的:等待消息的线程按照FIFO原则排队 基于优先级
10、的:等待消息的线程按照优先级原则排队 Score允许紧急消息。 当没有等待线程时:普通消息插入消息链表的末尾;紧急消息插入消息队列的前面。,23,Score的信号量,Score的信号量也有两种类型:(根据等待线程的排队原则) 基于FIFO 基于优先级,24,Score的互斥锁,Score的互斥锁有四种 基于FIFO 基于优先级 基于优先级继承 基于优先级置顶,25,Score的interr处理,内部出错处理流程: 填写出错信息 执行user扩展中的fatal扩展 调用CPU相关代码_CPU_Fatal_halt停止系统运行 对于i386,首先关中断,然后执行hlt指令,26,RTEMS,Tas
11、k INTR Partition,Region Dpmem Clock,Timer Ratemon Signal,Event,MsgQ,Sem,27,SAPI,INIT Debug Extension Fatal Io,28,RTEMS Partition,一种静态分区内存管理机制。 分区中,内存被组织成固定大小的缓冲区。 初始化时,所有的内存被划分成一个个缓冲区,并链接为空闲链表; 分配时,从空闲链表上获得缓冲区; 释放时,将缓冲区释放到空闲链表上。,29,RTEMS Region,一种动态内存管理方法。 区域中的内存按照堆(score heap)的方式动态管理 区域中的堆块又称为段。 分配
12、时,若内存不够,则申请者可以考虑等待。 释放时,若有等待线程,则要考虑将空闲内存分配给等待者。,30,Libcsupport & newlib,Malloc _REENT IO,31,RTEMS-4.0.0的启动,上电? BSP:start16.s BSP:Start.s BSP:Main.c RTEMS:INIT ,32,Start.s(pc386),关中断 装载各个段寄存器 装载Gdt和Idt 通过ljmp装载全新的CS,并且清空指令cache等 装载ss、ds、es、fs、gs 重新设置8259 建立堆栈 BSS段清0 检查CPU信息 调用boot_card,33,Main.c:boot
13、_card,缺省初始化Cpu_table 复制配置表 调用bsp_start 调用rtems_initialize_executive_early 调用main (一旦从main退出执行到这里,就说明系统运行结束) 调用bsp_cleanup,34,Bspstart.c:bsp_start,校正时间 为printk进行初始化 空闲内存起始地址初始化rtemsFreeMemStart 初始化Cpu_table 对齐空闲内存起始地址 设置BSP_Configuration中workspace的起始地址参数 空闲内存起始地址指向workspace之后 为console保留资源 初始化rtems的中断
14、管理 初始化rtems的异常管理,35,RTEMS第一阶段初始化,rtems_initialize_executive_early 初始化各个模块 在合适的位置执行各项扩展 bsp的多任务启动前扩展、驱动初始化前扩展、驱动初始化后扩展 API扩展的驱动初始化前扩展、驱动初始化后扩展 初始化设备驱动 创建idle线程,36,Bsp的main,调用rtems_initialize_executive_late进行第二阶段的初始化,并进入实际运行阶段 若返回,则说明系统运行已经结束 返回0,37,RTEMS第二阶段初始化,rtems_initialize_executive_late 启动多任务(从
15、bsp上下文切换到线程后继运行) 一旦从多任务返回,则系统运行结束 ,38,Hello任务的运行,观察hello中init.c、Makefile.in以及system.h 涉及pc386.cfg等文件;confdef.h RTEMS应用的启动程序,名为init 通过配置表的方式传递给RTEMS的初始化管理器 rtems_initialization_tasks_table Initialization_tasks =, init, rtems_api_configuration_table Configuration_RTEMS_API = , Initialization_tasks rte
16、ms_configuration_table Configuration =,39,在初始化第一阶段 调用_RTEMS_API_Initialize初始化API相关内容 调用_RTEMS_tasks_Manager_initialization初始化任务管理器 添加API扩展_RTEMS_tasks_API_extensions包含_RTEMS_tasks_Initialize_user_tasks作为postdriver _API_extensions_Run_postdriver中被调用,40,在RTEMS初始化的第二阶段,上下文切换到调度后继 这个调度后继,永远指向当前最应该运行的任务 在初始化刚刚完成时,通常就是init 考察rtems_task_start,_Thread_Start,_Thread_Ready,_Thread_Calculate_heir,41,Project 4,在RTEMS4.0.0中,选择下列任一模块加以分析: 内存管理
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 春季传染病预防知识主题班会
- 浅谈后进生的转化教育
- 现代娱乐业的消费者行为分析-全面剖析
- 人工智能安全应用-第2篇-全面剖析
- Unit2-A-Lets-spell宁夏公开课教案
- 地面半圆施工方案
- 毒物生物标志物研究-全面剖析
- 电子烟行业发展现状-全面剖析
- 封闭油漆施工方案
- 海底设施防腐技术-全面剖析
- 医院保安服务方案投标文件(技术方案)
- 保证食品安全的规章制度清单
- 口袋妖怪白金详细图文攻略(整理全)
- GB/T 9575-2013橡胶和塑料软管软管规格和最大最小内径及切割长度公差
- GB/T 6495.2-1996光伏器件第2部分:标准太阳电池的要求
- 2023年全国高考英语试题和答案(辽宁卷)
- 【精品】六年级下册语文试题-阅读理解专项训练5含答案全国通用
- 详解2021年《关于优化生育政策促进人口长期均衡发展的决定》ppt
- 保护继电器中文手册-re610系列rem610tobcnb
- 焊接接头表面质量检查记录
- 空调机房吸音墙顶面综合施工专题方案
评论
0/150
提交评论