Vxwork实时操作系统.ppt
《Vxwork实时操作系统.ppt》由会员分享,可在线阅读,更多相关《Vxwork实时操作系统.ppt(109页珍藏版)》请在课桌文档上搜索。
1、2023/3/20,1,第六讲:VxWorks实时操作系统,2023/3/20,2,网络产品实现方法的演进实时系统VxWorks介绍Tornado开发环境介绍BSP设备驱动,2023/3/20,3,实现方法的演进,基于PC 的架构(80s-90s Early)软件实现基于ASIC+MPU的架构(90s Middle)软件控制,硬件线速处理,2023/3/20,4,基于PC的架构,CPU,存储器,网 卡,PCI,MAC,本地缓存,网卡,PCI,PCI显卡,Ethernet,Ethernet,主 板,OS(Linux),API,应用程序,应用程序,硬件,源代码(C),MAC,终端,BIOS,问题:
2、1、接口速率问题(up to 100M);2、处理容量问题;3、安全性问题;,上层软件,本地缓存,2023/3/20,5,工作组/园区路由器的基本结构-Cisco 7200 router,CPU,Host-B,dram,sram,pcmcia,Pci-B,Line card,Line card,Line card,Line card,Line card,Line card,Eprom,duart,Pci-B,2023/3/20,6,路由器基本结构,2023/3/20,7,基于ASIC+MPU的架构(1),输入处理,输出处理,交换,路由协议,拥塞控制,其它安全计费,接纳控制,控制平面,数据平面,
3、路由查找,路由器层次结构(硬件上层软件),2023/3/20,8,基于ASIC+MPU的架构(2),BSP,MPU,存储器,ASICL2 switch/L3 Forwarding,CPU总线,MAC,Ethernet,RTOS(Vxworks),API,应用程序,应用程序,硬件,MAC,Ethernet,串口,E口,存储器,Tornado开发环境,C源代码,2,1,问题:1、速率与功能受限于Chip;2、ASIC,速率低;FPGA,周期长;4、可扩展性差。,2023/3/20,9,注:AAL层对用户信息相当L4的下边界,对控制信息相当L2的下边界,ATM层次模型,2023/3/20,10,单板
4、介绍,交换板,去主控板,U2,U2,2023/3/20,11,实时系统定义,对于给定一个时间约束量 0,如果系统S在T1时刻接受到输入,在T2时刻给出合理的输出,且使T2-T1。则称系统S满足要求的时间的实时性,通常称系统S为实时系统。“正确、但迟后的结果也是错误的”,2023/3/20,12,时间约束是相对的关键因素:系统对外部激励的响应时间,实时系统,2023/3/20,13,计算机系统的组成,应用软件,H/W,Operating System,抽象层,间,件,中,2023/3/20,14,实时操作系统,实时操作系统允许应用程序满足严格的时间要求多任务内核实时调度(基于优先级的抢占)任务间
5、通信互斥其它功能作为库由Kernel调度,2023/3/20,15,实时操作系统中的概念,多任务调度优先权时间片通信和同步资源共享事件互斥信号量邮箱,2023/3/20,16,多任务,目的:优化系统资源(CPU 时间、内存、磁盘、驱动器.)的使用多任务 OS允许多个任务并发和独立地在系统上运行实现独占和共享系统资源根据所需的输入/输出资源,控制任务执行任务(Task)、Process、Agent、Thread逻辑整体动态(进程)实体,2023/3/20,17,Task与Program的区别,程序(program)静态实体,由一个或多个指令序列,管理一组数据(内部或外部变量)任务(task)动态
6、实体,运行一个或多个程序,以实现处理器上指定的活动,2023/3/20,18,任务的不同状态,运行,挂起,阻塞,删除,运行,处理器分配,休眠,其它任务抢先,唤醒,等待资源,只等待处理器,2023/3/20,19,调 度,调度器负责任务的状态管理和当前任务的选择分发器选择由调度器推举的当前的任务(有效的上下文切换)处理器分配算法的判据选择有:任务优先、其寿命、消耗的CPU时间、等等用调度器动态调整,2023/3/20,20,优先权,优先权,系统错误处理硬件事件管理设备驱动器 最短用户任务 最长,注释 唯一重要的优先权是任务 之间的相对优先权,2023/3/20,21,通信和同步,任务互操作,以便
7、合作完成公共活动目的管理任务间共享的系统资源,避免系统死锁,2023/3/20,22,资源共享,资源可以是软件或硬件局部(仅在一个任务内使用)或公用能共享的资源有最大的进入能力,2023/3/20,23,互 斥,避免数据或者代码不一致的机制互斥当几个任务共享非重入资源(判据)时发生互斥信号量信号量类同于售票机,2023/3/20,24,邮 箱,邮箱是任务之间的交换区2个队列与邮箱有关一个是消息队列一个是任务队列(多个发送和接受),msg1,msg2,msg3,send,receive,2023/3/20,25,Vxworks操作系统是一个嵌入式实时操作系统(RTOS)。Vxworks与其它实时
8、OS一样,基于以下两个重要机制:*多任务环境及任务间通信*硬件中断处理Vxworks多任务内核完成的功能是:实时调度,任务间通信及互斥。其它功能则作为系统库围绕在内核周围,它们可根据需要进行剪裁。Vxworks与非实时系统的不同之处在于:Vxworks的优先抢占机制基于调度,Vxworks对外部事件的反应和处理快,Vxworks容量小并且可配置(微内核结构),VxWorks,2023/3/20,26,VxWorks组件,高性能实时内核POSIX(1003.1b)兼容接口I/O系统本地文件系统C/C+开发支持共享内存虚拟内存目标机驻留工具,2023/3/20,27,VxWorks组件(续),工具
9、库性能评估工具目标机代理板支持包(BSP)VxWorks仿真器和逻辑分析仪(WindView)网络组件,2023/3/20,28,内核(Kernel),VxWorks的内核叫Wind包括多任务抢占和优先权调度任务间同步和通信中断处理WatchDog定时器内存管理,多任务内核、任务机制、任务间通信和中断处理机制是VxWorks运行环境的核心。其中,多任务和任务间通信是现代实时操作系统的基石。,2023/3/20,29,内核多任务,任务控制块(TCB)任务状态转换任务调度任务控制任务扩展POSIX任务调度接口(略)任务错误状态:errno任务异常处理(Exception Handle)共享代码和重
10、入(Shared code and reentrancy)系统任务(System Task),2023/3/20,30,内核任务控制块(TCB),保存任务的上下文,一个任务的上下文包括:程序执行指针CPU寄存器和浮点寄存器动态变量和函数调用的堆栈标准输入、输出和错误的I/O分配延迟定时器时间片定时器内核控制结构信号处理器调试和性能监视值,2023/3/20,31,内核任务状态转换,一切就绪,只差CPU,等待某种资源,处于睡眠状态,延迟一段时间,被中断,用于调试,2023/3/20,32,任务状态队列,执行,内核负责维护系统中所有任务的当前状态。,一个任务的状态转变是 应用调用内核调用的结果。,
11、2023/3/20,33,内核 Wind 任务调度,优先级抢占调度(缺省)优先级高的Task抢占CPU0255,256个优先级,0级最高,255级最低轮询调度优先级相同时,多个Task轮流占用CPU抢占锁定独占CPU,其它高优先级的Task不能抢占CPU,2023/3/20,34,内核 Wind Task调度,基于优先级的抢占调度,基于优先级的抢占调度与轮转调度算法结合,2023/3/20,35,内核 任务控制函数,taskSpawn():创建并激活一个task(定位)taskInit():初始化一个新tasktaskActivate():激活一个taskTask ID:32bits,指向ta
12、sk控制块的指针(ID 0指调用task)Task Name:代表task的ASCII字符串Task选项获取Task信息Task删除和删除保险Task控制:改变task的状态,低级操作,参数:,所有从目标机启动的任务以字母 t开头,所有从主机启动的任务以字母 u开头,2023/3/20,36,内核 任务扩展函数,为扩展与task相关的功能,Wind提供勾连(hook)功能,在task创建、切换、删除时,自动唤起相关的勾连例程。在TCB中有一个字段存放此扩展taskCreateHookAdd()每个task创建时增加一个例程taskCreateHookDelete()taskSwitchHook
13、Add()taskSwitchHookDelete()taskDeleteHookAdd()taskDeleteHookDelete(),2023/3/20,37,内核 任务错误状态:errno,Errno是一个预定义的全局变量多任务情况下,每个任务有自己的errno,作为task上下文的一部分,中断服务程序(ISR)也有自己的errno惯例:程序返回OK(0)表示成功,ERROR(-1)表示失败;若返回指针,则NULL(0)表示失败。返回ERROR或NULL时,通常设置errno表示具体错误代码Errno总表示最近的错误状态,不会被清除如果errno在错误状态符号表(statSymTbl)中
14、有对应字符串,则可以使用printErrno()显示错误内容(不能用在ISR中)尽量使用logMsg()来显示错误信息,因为它在task和ISR下都能工作,2023/3/20,38,内核 Errno分配,Errno编码中使用前两个字节表示产生错误的模块,后两个字节表示每个错误号VxWorks系统的模块号为1-500,0用于源代码兼容应用程序的模块号为大于500的正数和所有负数,errno,4 bytes,模块号,错误状态号,2023/3/20,39,内核用户自定义errno,在用户头文件目录下创建xxModNum.h,定义自己的模块:#define M_lemLib(512 16)在用户头文件
15、目录下创建lemErr.h,定义错误状态号的宏:#include xxModNum.h/*lemLib errors*/#define S_lemLib_LEM_INIT_FAIL(M_lemLib|1)#define S_lemLib_LEM_CLOSE_FAIL(M_lemLib|2)#define S_lemLib_MSG_TYPE_ERROR(M_lemLib|3)重新编译系统错误表statTbl.omakeStatTbl systemHeaderDir userHeaderDir编译得到的statTbl.c文件,产生statTbl.o,2023/3/20,40,内核用户自定义errn
16、o,在VxWorks中包含组件 development tool components symbol table components error status table.重新编译VxWorks如果要将错误代码加入WindShell,需要将新模块的错误字符串加入文件host/resource/tcl/errnoTbl.tcl或者$(HOME)/.wind/windsh.tcl中set M_lemLib expr 512 16set errnoTbl expr$M_lemLib|1 S_lemLib_LEM_INIT_FAILset errnoTbl expr$M_lemLib|2 S_lem
17、Lib_LEM_CLOSE_FAILset errnoTbl expr$M_lemLib|3 S_lemLib_MSG_TYPE_ERROR,2023/3/20,41,内核 任务异常处理,VxWorks的异常处理包负责所有异常处理缺省的异常处理是挂起此task,并保存异常点的task状态,其它task继续运行Tornado的开发工具可以查看挂起task的状态也可以通过信号(signal)将某硬件或软件的异常处理与自己的处理程序关联,2023/3/20,42,内核共享代码和重入,被多个task调用的代码叫共享代码,共享代码必须可重入若代码要修改全局/静态变量,则不可重入,否则会引起数据混乱多数例
18、程可重入,但如果例程foo()还有一个对应的foo_r()例程,则foo()是不可重入的VxWorks使用以下可重入技术:动态堆栈变量全局变量和静态变量由信号量守护任务变量,Taskone(void)MyFune();,Tasktwo(void)MyFune();,MyFune(void),任务,代码共享,2023/3/20,43,内核 VxWorks系统任务,Root Task,tUsrRoot是内核执行的第一个task,它创建其它task,完成任务后被停止并删除日志Task,tLogTask记录系统日志消息,而不必执行I/O异常Task,tExcTask支持VxWorks的异常处理网络Ta
19、sk,tNetTask处理网络的任务级别的功能目标机代理Task,tWdbTask处理debug请求Task可选组件tShell、tRlogind、tTelnetd、tPortmapd,2023/3/20,44,任务间通信,Vxworks提供了一套丰富的任务间通信机制,包括:共享数据结构/内存共享(Shared memory):简单的数据共享方法信号量(Semaphore):用于基本的互斥及同步消息队列(Message Queue)和管道(Pipes):用于同一CPU上任务间消息的传递套接口(Socket)和远程程序调用(RPC):用于网络上任务间的通信信号(Signals):用于异常处理,2
20、023/3/20,45,任务间通信共享数据结构,共享数据结构VxWorks中所有task存在于一个线性的地址空间中,所以task之间共享数据结构很容易这些数据结构可以是全局变量线形缓冲区环形缓冲区链表指针,2023/3/20,46,任务间通信共享内存,Vxworks提供了三种共享内存的对象(shared-memory objects)来实现在不同任务之间和不同CPU的任务间的高速同步和通信。共享信号量(shared semaphores):有二进制,记数型两种,用于在不同CPU上的任务间的同步,和对共享数据结构的互斥访问共享消息队列(shared message queues):允许多个处理器
21、上的任务交换消息共享内存分区(shared-memory partitions):有系统类型和用户类型可以用于为不同处理器上的任务分配公共数据空间,2023/3/20,47,任务间通信互斥,为避免内存访问竞争,需要内存访问互锁有许多方法可以实现资源的访问互斥:禁止中断、禁止抢占、信号量禁止中断(最强大,时间要尽量短)int lock=intLock();.critical region that cannot be interrupted.intUnlock(lock);禁止抢占(可以被中断)taskLock();.critical region that cannot be interrup
22、ted.taskUnlock();,2023/3/20,48,任务间通信信号量,信号量(Semaphore)是解决互斥和任务同步的最主要手段信号量提供比中断禁止和抢占禁止更精细的互斥信号量协调任务的执行和外部事件,以实现任务同步Wind将信号量优化为三类,以解决不同类型的问题:二进制:最快,最通用的信号量,用于同步和互斥互斥:专门解决互斥问题而优化的二进制信号量:优先权继承、删除保护和递归计数:类似二进制,但记录信号量发放的次数,为守护资源的多个实例而优化POSIX信号量(略),2023/3/20,49,任务间通信消息队列,任何task或者ISR都可以向消息队列中放入消息,多个task可以向同
23、一个消息队列中发送消息或者从其中接收消息两个task之间的双向通信,通常需要两个消息队列,每个方向一个消息队列中的消息个数和每个消息的长度都是可变的VxWorks支持两种消息队列库:Wind QueuePOSIX Queue超时优先级,2023/3/20,50,任务间通信管道(Pipes),管道是虚拟的I/O设备Task使用标准的I/O例程操作管道Open,read,write,ioctl管道支持select函数,2023/3/20,51,任务间通信 Task网络通信,Sockets支持TCP/UDP与BSD 4.4 UNIX兼容远端过程调用(RPC)RPC允许一个机器上的进程调用同一个机器或
24、者别的机器上运行的过程RPC内部使用socket作为底层通信手段,2023/3/20,52,任务间通信信号(Signal),信号可以异步地改变task的执行流程任何task或ISR都可以向某个task发送一个信号收到信号的task立即挂起,下次被调度时运行信号处理例程信号处理例程使用接收task的上下文和堆栈信号处理例程应当作ISR来对待即使接收task被阻塞,依然能够唤醒信号处理例程信号更适用于错误或异常处理,而不是一般的Task通信Wind支持两种信号接口:UNIX BSD风格、POSIX兼容,2023/3/20,53,POSIX兼容,POSIX:the Portable Operatio
25、n System InterfaceISO/IEEE制定的一组接口,以支持应用程序在不同操作系统上的源代码的移植,使用这些接口有助于将软件从一个操作系统移植到另一个操作系统。实时操作系统对应的POSIX接口标准为1003.1b(原来的1003.4),VxWorks几乎都支持,重要包括:异步I/O信号量消息队列内存管理排队信号调度时钟和定时器,2023/3/20,54,POSIX接口,VxWorks Wind内核包括:POSIX接口和专为VxWorks设计的接口,对应两种不同调度。POSIX调度基于进程(不可直接访问内存,父子关系)基于FIFO,优先数越高,优先级越高Wind调度基于任务(可直接
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Vxwork 实时 操作系统

链接地址:https://www.desk33.com/p-245771.html