第五章嵌入式系统软件体系结构课件.ppt
《第五章嵌入式系统软件体系结构课件.ppt》由会员分享,可在线阅读,更多相关《第五章嵌入式系统软件体系结构课件.ppt(87页珍藏版)》请在三一办公上搜索。
1、第五章 嵌入式系统软件基础, 2005 博创科技,北 京 博 创 兴 业 科 技 有 限 公 司BEIJNG UNIVERSAL PIONEERING TECHNOLOGY Co . , LTD,博创科技 嵌入互动,主要内容,5.1嵌入式系统软件体系结构5.2设备驱动程序5.3嵌入式操作系统5.4 嵌入式中间件5.5 进程、线程和任务5.6 嵌入式系统的应用软件开发,问题1,进程与线程之间的区别?,问题2,输入一组整数,当输入1时表示输入结束,然后计算这组整数的平均值;,问题描述:,12425125-1,main( ) int iValue, iTotalValue, iNum; printf
2、(“本程序用于计算一组整数的平均值 n”); printf(“输入-1表示数据的结束。n”); iTotalValue = 0; iNum = 0; while (1) scanf(“%d”, ,5.1 嵌入式软件体系结构,无操作系统的情形在嵌入式系统的发展初期,由于硬件的配置比较低,对于是否有系统软件的支持,要求还不是很强烈。在那个阶段,嵌入式软件的设计主要是以应用为核心,应用软件直接建立在硬件上,没有专门的操作系统。有操作系统的情形,5.1.1无操作系统的情形,循环轮询系统:(Polling Loop)最简单的软件结构,程序依次检查系统的每个输入条件,一旦条件成立就进行相应的处理。Init
3、ialize();while(1) if(condition_1) action_1(); if(condition_2) action_2(); if(condition_n) acition_n();,事件驱动系统:(Event-Driven system)事件驱动系统是能对外部事件直接响应的系统。它包括前后台、实时多任务、多处理器等,是嵌入式实时系统的主要形式。应用程序是一个无限循环,循环中调用相应的函数完成相应操作,这部分可以看成后台行为(background)。中断服务程序处理异步事件,这部分可看成前台行为(foreground)。后台也可以叫做任务级,前台也叫中断级。,前后台系统(
4、后台循环、前台中断),ISR,ISR,后台 前台,ISR,时间,例如,很多基于微处理器的产品采用前后台系统设计,如微波炉、电话机、玩具等。从省电的角度出发,平时微处理器处在停机状态,所有的事都靠中断服务来完成。,5.1.2有操作系统的情形,硬件,板级初始化,设备驱动层,以太网驱动,串口驱动,LCD驱动,键盘驱动,操作系统层,中间件层,应用软件层,TCP/IP网络系统,文件系统,内核,嵌入式GUI,嵌入式CORBA,嵌入式JAVA,嵌入式DCOM,面向领域的中间件,WWW浏览器,MP3播放器,电子邮件,第2节 设备驱动程序,为什么要有设备驱动程序?嵌入式硬件设备本身无法工作,需要软件来驱动,如初
5、始化、控制、数据读写等。什么是设备驱动程序?直接与硬件打交道、对硬件进行控制和管理的软件。在一个嵌入式系统中,设备驱动程序是必不可少的。,5.2 设备驱动程序,5.2.1设备驱动程序的主要功能,硬件启动(Startup):在开机上电或重启的时候,对硬件进行初始化;硬件关闭(Shutdown):把硬件配置成关机状态;硬件停用(Disable):暂停使用硬件;硬件启用(Enable):重新启用硬件;硬件读操作(Read):从硬件中读取数据;硬件写操作(Write):往硬件中写数据;,5.2.2设备驱动程序的结构,硬件,上层接口-硬件接口,设备驱动程序,分层结构,硬件,上层接口硬件接口,设备驱动程序
6、,混合结构,5.3 嵌入式操作系统,嵌入式操作系统包括嵌入式内核、嵌入式TCP/IP网络系统、嵌入式文件系统、嵌入式GUI系统和电源管理等部分;嵌入式内核是基础和核心,其他部分要根据嵌入式系统的需要来确定。,5.4 嵌入式中间件,中间件(Middleware):在OS内核、设备驱动程序和应用软件之外的所有系统软件;中间件的基本思路:把原本属于应用软件层的一些通用的功能模块抽取出来,形成独立的一层软件,从而为运行在其上的各个应用软件提供一个灵活、安全、移植性好、相互通信、协同工作的平台;优点:实现软件的可重用,降低应用软件的复杂性,降低开发成本。,第5节 进程、线程和任务,5.5.1 多道程序技
7、术,为了提高计算机系统中各种资源的利用率,现代操作系统广泛采用多道程序技术(multi-programming),使多个程序同时在系统中存在并运行。,CPU,I/O,单道程序:,多道程序:,CPU,I/O,作业甲(红黄),作业乙(蓝绿),5.5.2 关于进程,在多道程序系统中,各个程序之间是并发执行的,共享系统资源。CPU需要在各个运行的程序之间来回地切换,这样的话,要想描述这些多道的并发活动过程就变得很困难。为此,操作系统设计者提出了进程的概念。,(1)什么是进程?,A process a program in execution,一个进程应该包括: 程序的代码; 程序的数据; PC中的值,
8、用来指示下一条将运行的指令; 一组通用的寄存器的当前值,堆、栈; 一组系统资源(如打开的文件) 总之,进程包含了正在运行的一个程序的所有状态信息。,main( ).A( ).PROCESS,A program is C statements or commands静态的;A process is program + running context动态的.,main( ).A( ).PROGRAM,heap,StackA Main,Registers,PC,Process Program,(2)进程的特性,动态性:程序的运行状态在变,PC、寄存器、 堆和栈等;独立性:是一个独立的实体,是计算机系
9、统资 源的使用单位。每个进程都有“自己” 的PC和内部状态,运行时独立于其他 的进程(逻辑PC和物理PC);并发性:从宏观上看各进程是同时独立运行的,四个进程在并发地运行,(本图摘自Andrew S. Tanenbaum: “Modern Operating Systems”),5.5.3 什么是线程?,自从60年代提出进程概念以来,在操作系统中一直都是以进程作为独立运行的基本单位,直到80年代中期,人们又提出了更小的能独立运行的基本单位 线程。,(1)为什么需要线程?,【案例】编写一个MP3播放软件。核心功能模块有三个:(1)从MP3音频文件当中读取数据;(2)对数据进行解压缩;(3)把解压
10、缩后的音频数据播放出来。,单进程的实现方法,main( ) while(TRUE) Read( ); Decompress( ); Play( ); Read( ) Decompress( ) Play( ) ,问题: 播放出来的声音能 否连贯? 各个函数之间不是 并发执行,影响资 源的使用效率;,多进程的实现方法,程序1main( ) while(TRUE) Read( ); Read( ) ,问题:进程之间如何通信,共享数据?,程序3main( ) while(TRUE) Play( ); Play( ) ,程序2main( ) while(TRUE) Decompress( ); Dec
11、ompress( ) ,怎么办?,需要提出一种新的实体,满足以下特性:(1)实体之间可以并发地执行;(2)实体之间共享相同的地址空间;,这种实体就是:线程(Thread),(2)线程定义,Thread: A sequential execution stream within a process; A thread of execution; 进程当中的一条执行流程。,从两个方面来理解进程: 从资源组合的角度:进程把一组相关的 资源组合起来,构成了一个资源平台 (环境),包括地址空间(代码段、数据 段)、打开的文件等各种资源; 从运行的角度:代码在这个资源平台上的 一条执行流程(线程)。,进程
12、 线程 资源平台,优点: 一个进程中可以同时存在多个线程; 各个线程之间可以并发地执行; 各个线程之间可以共享地址空间。,(3)线程所需的资源,(本图摘自Silberschatz, Galvin and Gagne: “Operating System Concepts”),5.5.4 什么是任务?,在许多嵌入式操作系统当中,一般把能够独立运行的实体称为“任务”(Task),那么这里所说的任务到底是进程还是线程呢?,(1)vxWorks的例子,在一个实际的工程项目中,软件平台采用的是实时嵌入式操作系统vxWorks。该项目有两个.c源文件,如下图所示。这两个.c文件实现的功能是:在文件 1.c
13、中,任务A循环地从SOCKET中接收数据;任务 B 每隔100ms向SOCKET发送响应消息,而定时功能是由文件 2.c 中的任务 C 来实现的。任务C和任务B之间通过同步信号量进行任务间的同步。问题:分析该操作系统当中的“任务”的概念,它相当于是我们通常所说的进程还是线程?为什么?,源文件1.c,int g_nSockId; / socket标识,全局变量semId g_synSemId; / 信号量标识,全局变量void testInit(void) / 初始化函数 创建SOCKTE,建立连接;/ g_nSockId被赋值 /*taskSpawn函数的功能:创建一个任务,它的参数为: “任
14、务名”, “优先级”, “栈大小”, “函数名”, “函数的输入 参数”);*/ /*创建任务A*/ taskSpawn(“tTestTskA”, 50, 2000, testTskA, 0, .); /*创建任务B*/ taskSpawn(“tTestTskB”, 50, 2000, testTskB, 0, .);,void testTskA(void) char *pChRxBuf; pChRxBuf = malloc(100); while(1) recv(g_nSockId, pChRxBuf, .); void testTskB(void) char pChTxBuf100 = “
15、Send message back every 100ms”; while(1) semTake(g_synSemId); send(g_nSockId, pChTxBuf, .); ,源文件2.c,extern semId g_synSemId;void test(void) 创建同步信号量,并初始为空;/ 即使用变量g_synSemId /*创建任务C*/ taskSpawn(“tTestTskC”, 50, 2000, testTskC, 0.); void testTskC(void) while(1) taskDelay(100); /*延时100ms, 同时放出CPU资源*/ se
16、mGive(g_synSemId); ,5.5.5 任务的实现,在多道程序(多任务)的嵌入式操作系统中,任务之间的结构为层状结构,存在着父子关系;当嵌入式内核刚刚启动时,只有一个任务存在,然后由该任务派生出所有其他的任务。,(1)任务的层次结构,OS初始任务,任务,任务,任务,任务,任务,任务,任务,(2)任务的创建,在嵌入式操作系统当中,任务的创建主要有两种模型:fork/exec和spawn;fork/exec:符合IEEE/ISO POSIX 1003.1标准,先用fork系统调用创建与父任务完全相同的一份内存空间,然后再用exec系统调用来移除父任务的内容,并调入子任务的程序代码。优点
17、:允许继承;spawn:直接为子任务创建一个全新的地址空间,并装入其程序代码。,5.5.6 任务的描述,问题:如果让你来设计OS当中的任务机制,那么你将如何来描述一个任务?,描述任务的数据结构:任务控制块(Task Control Block,TCB)。系统为每个任务都维护了一个TCB,用来保存与该任务有关的所有信息。,(1)任务控制块的内容,任务ID、任务的状态、任务的优先级;CPU上下文信息:通用寄存器的值、PC寄存器的值、程序状态字、栈指针的值;如果在该OS中,任务描述的是进程,则还应包括其他的一些内容,如段表地址、页表地址等存储管理方面的信息;根目录、文件描述字等文件管理方面的信息。,
18、任务的创建:为该任务生成一个TCB;任务的终止:回收它的TCB;任务的组织管理:通过对TCB的组织管理来实现。,系统用TCB来描述任务的基本情况以及运行变化的过程,TCB是任务存在的唯一标志。,(2)任务的状态,任务的三种基本状态:任务在生命结束前处于且仅处于三种基本状态之一不同系统设置的任务状态数目不同。,运行状态(Running):任务占有CPU,并在CPU上运行。处于此状态的任务数目小于等于CPU的数目;就绪状态(Ready):任务已经具备运行条件,但由于CPU忙暂时不能运行,只要分得CPU即可执行;阻塞/等待状态(Blocked/Waiting):任务因等待某种事件的发生而暂时不能运行
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第五 嵌入式 系统软件 体系结构 课件
链接地址:https://www.31ppt.com/p-1858778.html