(6)Vxwork实时操作系统

上传人:一*** 文档编号:243027909 上传时间:2024-09-14 格式:PPT 页数:109 大小:1.46MB
返回 下载 相关 举报
(6)Vxwork实时操作系统_第1页
第1页 / 共109页
(6)Vxwork实时操作系统_第2页
第2页 / 共109页
(6)Vxwork实时操作系统_第3页
第3页 / 共109页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,2024/9/14,1,第六讲:,VxWorks,实时操作系统,张小波老师,2024/9/14,2,网络产品实现方法的演进,实时系统,VxWorks,介绍,Tornado,开发环境介绍,BSP,设备驱动,2024/9/14,3,实现方法的演进,基于,PC,的架构,(80,s-90,s Early),软件实现,基于,ASIC+MPU,的架构,(90,s Middle),软件控制,硬件线速处理,2024/9/14,4,基于,PC,的架构,CPU,存储器,网 卡,PCI,MAC,本地缓存,网卡,PCI,PCI,显卡,Ethernet,Ethernet,主 板,OS (Linux),API,应用程序,应用程序,硬件,源代码(,C),MAC,终端,BIOS,问题:,1、接口速率问题(,up to 100M);,2、,处理容量问题;,3、安全性问题;,上层软件,本地缓存,2024/9/14,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,2024/9/14,6,路由器基本结构,交换开关,线卡,线卡,线卡,线卡,协议软件,网络接口,分类整形过滤转发,报文缓冲和 调度,物理链路,交换开关,2024/9/14,7,基于,ASIC+MPU,的架构(1),输入,处理,输出,处理,交换,路由协议,拥塞控制,其它,安全,计费,接纳控制,控制平面,数据,平面,路由,查找,路由器层次结构(硬件上层软件),2024/9/14,8,基于,ASIC+MPU,的架构(2),BSP,MPU,存储器,ASIC,L2 switch,/,L3 Forwarding,CPU,总线,MAC,Ethernet,RTOS (Vxworks),API,应用程序,应用程序,硬件,MAC,Ethernet,串口,E,口,存,储,器,Tornado,开发环境,,C,源代码,2,1,问题:,1、速率与功能受限于,Chip;,2、ASIC,,速率低;,FPGA,,周期长;,4、可扩展性差。,2024/9/14,9,注:,AAL,层对用户信息相当,L4,的下边界,对控制信息相当,L2,的下边界,ATM,层次模型,2024/9/14,10,单板介绍,交换板,SDRAM,FLASH,MPC860,SAR,串口,HDLC,A P C,CRAM,BRAM,以太网,A P C,CRAM,BRAM,HDLC,主备控制,复位,电路,VCRAM,PRAM,VCRAM,PRAM,去主控板,U2,U2,2024/9/14,11,实时系统定义,对于给定一个时间约束量, 0,,如果系统,S,在,T1,时刻接受到输入,在,T2,时刻给出合理的输出,且使,T2-T1。,则称系统,S,满足要求的时间,的实时性,通常称系统,S,为实时系统。,“,正确、但迟后的结果也是错误的,”,2024/9/14,12,时间约束是相对的,关键因素:系统对外部激励的,响应时间,实时系统,时间,软件,工程,科学,计算,事物,诊断,测试,信号,处理,物理,测量,进程,仿真,飞行器,仿真,遥测,领域,实时,系统,开发,财务,处理,医疗,测试,分析,工业,自动化,地震,分析,网络,控制,飞行,仿真,导弹,仿真,应用,1,s,100,ms,10,ms,1,ms,100,s,50,s,10,s,1,s,2024/9/14,13,计算机系统的组成,应用软件,H/W,Operating System,抽象层,间,件,中,2024/9/14,14,实时操作系统,实时操作系统允许应用程序满足严格的时间要求,多任务内核,实时调度(基于优先级的抢占),任务间通信,互斥,其它功能作为库由,Kernel,调度,2024/9/14,15,实时操作系统中的概念,多任务,调度,优先权,时间片,通信和同步,资源共享,事件,互斥,信号量,邮箱,2024/9/14,16,多任务,目的:,优化系统资源(,CPU,时间、内存、磁盘、驱动器.)的使用,多任务,OS,允许多个任务并发和独立地在系统上运行,实现独占和共享系统资源,根据所需的输入/输出资源,控制任务执行,任务(,Task,)、,Process,、,Agent,、,Thread,逻辑整体动态(进程)实体,2024/9/14,17,Task,与,Program,的区别,程序 (,program,),静态实体,,由一个或多个指令序列,管理一组数据(内部或外部变量),任务(,task,),动态实体,,运行一个或多个程序,以实现处理器上指定的活动,2024/9/14,18,任务的不同状态,运行,挂起,阻塞,删除,运行,处理器,分配,休眠,其它任务,抢先,唤醒,等待,资源,只等待,处理器,2024/9/14,19,调 度,调度器,负责任务的状态管理和当前任务的选择,分发器,选择由调度器推举的当前的任务(有效的上下文切换),处理器,分配算法的判据选择有:,任务优先、其寿命、消耗的,CPU,时间、等等,用调度器动态调整,2024/9/14,20,优先权,优先权,系统错误处理,硬件事件管理,设备驱动器,最短,用户任务,最长,注释,唯一重要的优先权是任务,之间的,相对优先权,2024/9/14,21,通信和同步,任务互操作,以便合作完成公共活动,目的,管理任务间共享的系统资源,避免系统死锁,2024/9/14,22,资源共享,资源可以是,软件或硬件,局部(仅在一个任务内使用)或公用,能共享的资源有最大的进入能力,2024/9/14,23,互 斥,避免数据或者代码不一致的机制,互斥,当几个任务共享,非重入资源,(判据)时发生互斥,信号量,信号量类同于售票机,2024/9/14,24,邮 箱,邮箱是任务之间的交换区,2个队列与邮箱有关,一个是消息队列,一个是任务队列(多个发送和接受),msg1,msg2,msg3,send,receive,2024/9/14,25,Vxworks,操作系统是一个,嵌入式实时操作系统(,RTOS),。,Vxworks,与其它实时,OS,一样,基于以下两个重要机制:,* 多任务环境及任务间通信,* 硬件中断处理,Vxworks,多任务内核完成的功能是:,实时调度,任务间通信及互斥,。,其它功能则作为系统库围绕在内核周围,它们可根据需要进行剪裁。,Vxworks,与非实时系统的不同之处在于:,Vxworks,的优先抢占机制基于调度,,Vxworks,对外部事件的反应和处理快,,Vxworks,容量小并且可配置(微内核结构),VxWorks,2024/9/14,26,VxWorks,组件,高性能实时内核,POSIX(1003.1b),兼容接口,I/O,系统,本地文件系统,C/C+,开发支持,共享内存,虚拟内存,目标机驻留工具,2024/9/14,27,VxWorks,组件(续),工具库,性能评估工具,目标机代理,板支持包(,BSP,),VxWorks,仿真器和逻辑分析仪(,WindView,),网络组件,2024/9/14,28,内核(,Kernel,),VxWorks,的内核叫,Wind,包括,多任务抢占和优先权调度,任务间同步和通信,中断处理,WatchDog,定时器,内存管理,多任务内核、任务机制、任务间通信和中断处理机制是,VxWorks,运行环境的核心。其中,多任务和任务间通信是现代实时操作系统的基石。,2024/9/14,29,内核,多任务,任务控制块,(TCB),任务状态转换,任务调度,任务控制,任务扩展,POSIX,任务调度接口(略),任务错误状态:,errno,任务异常处理,(Exception Handle),共享代码和重入,(Shared code and reentrancy),系统任务,(System Task),2024/9/14,30,内核,任务控制块(,TCB,),保存任务的上下文,一个任务的上下文包括:,程序执行指针,CPU,寄存器和浮点寄存器,动态变量和函数调用的堆栈,标准输入、输出和错误的,I/O,分配,延迟定时器,时间片定时器,内核控制结构,信号处理器,调试和性能监视值,2024/9/14,31,内核,任务状态转换,一切就绪,只差,CPU,等待某种资源,处于睡眠状态,延迟一段时间,被中断,用于调试,2024/9/14,32,任务状态队列,Kernel,TCB,TCB,TCB,TCB,TCB,TCB,TCB,TCB,TCB,TCB,TCB,TCB,TCB,TCB,TCB,CPU,挂起队列,阻塞队列,睡眠队列,就绪队列,执行,内核负责维护系统中,所有任务的当前状态,。,一个任务的状态转变是,应用调用内核调用的结果。,2024/9/14,33,内核,Wind,任务调度,优先级抢占调度(缺省),优先级高的,Task,抢占,CPU,0,255,,,256,个优先级,,0,级最高,,255,级最低,轮询调度,优先级相同时,多个,Task,轮流占用,CPU,抢占锁定,独占,CPU,,其它高优先级的,Task,不能抢占,CPU,2024/9/14,34,内核,Wind Task,调度,基于优先级的抢占调度,基于优先级的抢占调度,与轮转调度算法结合,2024/9/14,35,内核,任务控制函数,taskSpawn(),:创建并激活一个,task(,定位,),taskInit(),:,初始化,一个新,task,taskActivate(),:,激活,一个,task,Task ID,:,32bits,,指向,task,控制块的指针,(ID 0,指调用,task),Task Name,:代表,task,的,ASCII,字符串,Task,选项,获取,Task,信息,Task,删除和删除保险,Task,控制:改变,task,的状态,低级操作,参数:,所有从目标机启动的任务以字母,t,开头,所有从主机启动的任务以字母,u,开头,2024/9/14,36,内核,任务扩展函数,为扩展与,task,相关的功能,,Wind,提供勾连(,hook,)功能,在,task,创建、切换、删除时,自动唤起相关的勾连例程。,在,TCB,中有一个字段存放此扩展,taskCreateHookAdd,(,),每个,task,创建时增加一个例程,taskCreateHookDelete,(,),taskSwitchHookAdd,(,),taskSwitchHookDelete,(,),taskDeleteHookAdd,(,),taskDeleteHookDelete,(,),2024/9/14,37,内核,任务错误状态:,errno,Errno,是一个预定义的全局变量,多任务情况下,每个任务有自己的,errno,,作为,task,上下文的一部分,中断服务程序(,ISR,)也有自己的,errno,惯例:程序返回,OK(0),表示成功,,ERROR(-1),表示失败;若返回指针,则,NULL(0),表示失败。,返回,ERROR,或,NULL,时,通常设置,errno,表示具体错误代码,Errno,总表示最近的错误状态,不会被清除,如果,errno,在错误状态符号表,(statSymTbl),中有对应字符串,则可以使用,printErrno(),显示错误内容,(,不能用在,ISR,中,),尽量使用,logMsg(),来显示错误信息,因为它在,task,和,ISR,下都能工作,2024/9/14,38,内核,Errno,分配,Errno,编码中使用前两个字节表示产生错误的模块,后两个字节表示每个错误号,VxWorks,系统的模块号为,1-500,,,0,用于源代码兼容,应用程序的模块号为大于,500,的正数和所有负数,errno,4 bytes,模块号,错误状态号,2024/9/14,39,内核,用户自定义,errno,在用户头文件目录下创建,xxModNum.h,,定义自己的模块:,#define M_lemLib (512 symbol table components error status table,.,重新编译,VxWorks,如果要将错误代码加入,WindShell,,需要将新模块的错误字符串加入文件,host/resource/tcl/errnoTbl.tcl,或者,$(HOME)/.wind/windsh.tcl,中,set M_lemLib expr 512 16,set errnoTbl expr $M_lemLib | 1 S_lemLib_LEM_INIT_FAIL,set errnoTbl expr $ M_lemLib | 2 S_lemLib_LEM_CLOSE_FAIL,set errnoTbl expr $ M_lemLib | 3 S_lemLib_MSG_TYPE_ERROR,2024/9/14,41,内核,任务异常处理,VxWorks,的异常处理包负责所有异常处理,缺省的异常处理,是挂起此,task,,并保存异常点的,task,状态,其它,task,继续运行,Tornado,的开发工具可以查看挂起,task,的状态,也可以通过信号,(signal),将某硬件或软件的异常处理与自己的处理程序关联,2024/9/14,42,内核,共享代码和重入,被多个,task,调用的代码叫共享代码,共享代码必须可重入,若代码要修改全局/静态变量,则不可重入,否则会引起数据混乱,多数例程可重入,但如果例程,foo(),还有一个对应的,foo_r(),例程,则,foo(),是不可重入的,VxWorks,使用以下可重入技术:,动态堆栈变量,全局变量和静态变量由信号量守护,任务变量,Taskone(void),MyFune( );,Tasktwo(void),MyFune( );,MyFune(void),任务,代码共享,2024/9/14,43,内核,VxWorks,系统任务,Root Task,,,tUsrRoot,是内核执行的第一个,task,,它创建其它,task,,完成任务后被停止并删除,日志,Task,,,tLogTask,记录系统日志消息,而不必执行,I/O,异常,Task,,,tExcTask,支持,VxWorks,的异常处理,网络,Task,,,tNetTask,处理网络的任务级别的功能,目标机代理,Task,,,tWdbTask,处理,debug,请求,Task,可选组件,tShell,、,tRlogind,、,tTelnetd,、,tPortmapd,2024/9/14,44,任务间通信,Vxworks,提供了一套丰富的任务间通信机制,包括:,共享数据结构/内存共享(,Shared memory):,简单的数据共享方法,信号量,(Semaphore) :,用于基本的互斥及同步,消息队列,(Message Queue),和管道,(Pipes) :,用于同一,CPU,上任务间消息的传递,套接口(,Socket),和远程程序调用(,RPC):,用于网络上任务间的通信,信号,(Signals) :,用于异常处理,2024/9/14,45,任务间通信,共享数据结构,共享数据结构,VxWorks,中所有,task,存在于一个线性的地址空间中,所以,task,之间共享数据结构很容易,这些数据结构可以是,全局变量,线形缓冲区,环形缓冲区,链表,指针,2024/9/14,46,任务间通信,共享内存,Vxworks,提供了三种共享内存的对象(,shared-memory objects),来实现在不同任务之间和不同,CPU,的任务间的高速同步和通信。,共享信号量,(,shared semaphores):,有二进制,记数型两种,用于在不同,CPU,上的任务间的同步,和对共享数据结构的互斥访问,共享消息队列(,shared message queues):,允许多个处理器上的任务交换消息,共享内存分区(,shared-memory partitions):,有系统类型和用户类型可以用于为不同处理器上的任务分配公共数据空间,2024/9/14,47,任务间通信,互斥,为避免内存访问竞争,需要内存访问互锁,有许多方法可以实现资源的访问互斥:,禁止中断、禁止抢占、信号量,禁止中断,(,最强大,时间要尽量短,),int lock = intLock();,. .,critical region that cannot be interrupted,.,intUnlock (lock);,禁止抢占,(,可以被中断,),taskLock ();,. .,critical region that cannot be interrupted,.,taskUnlock ();,2024/9/14,48,任务间通信,信号量,信号量,(Semaphore),是解决互斥和任务同步的最主要手段,信号量提供比中断禁止和抢占禁止更精细的互斥,信号量协调任务的执行和外部事件,以实现任务同步,Wind,将信号量优化为三类,以解决不同类型的问题:,二进制:最快,最通用的信号量,用于同步和互斥,互斥:专门解决互斥问题而优化的二进制信号量:优先权继承、删除保护和递归,计数:类似二进制,但记录信号量发放的次数,为守护资源的多个实例而优化,POSIX,信号量,(,略,),2024/9/14,49,任务间通信,消息队列,任何,task,或者,ISR,都可以向消息队列中放入消息,多个,task,可以向同一个消息队列中发送消息或者从其中接收消息,两个,task,之间的双向通信,通常需要两个消息队列,每个方向一个,消息队列中的消息个数和每个消息的长度都是可变的,VxWorks,支持两种消息队列库:,Wind Queue,POSIX Queue,超时,优先级,2024/9/14,50,任务间通信,管道(,Pipes,),管道是虚拟的,I/O,设备,Task,使用标准的,I/O,例程操作管道,Open, read, write, ioctl,管道支持,select,函数,2024/9/14,51,任务间通信,Task,网络通信,Sockets,支持,TCP/UDP,与,BSD 4.4 UNIX,兼容,远端过程调用(,RPC,),RPC,允许一个机器上的进程调用同一个机器或者别的机器上运行的过程,RPC,内部使用,socket,作为底层通信手段,2024/9/14,52,任务间通信,信号,(Signal),信号可以异步地改变,task,的执行流程,任何,task,或,ISR,都可以向某个,task,发送一个信号,收到信号的,task,立即挂起,下次被调度时运行信号处理例程,信号处理例程使用接收,task,的上下文和堆栈,信号处理例程应当作,ISR,来对待,即使接收,task,被阻塞,依然能够唤醒信号处理例程,信号更适用于错误或异常处理,而不是一般的,Task,通信,Wind,支持两种信号接口:,UNIX BSD,风格、,POSIX,兼容,2024/9/14,53,POSIX,兼容,POSIX,:,the Portable Operation System Interface,ISO/IEEE,制定的一组接口,以支持应用程序在不同操作系统上的源代码的移植,使用这些接口有助于将软件从一个操作系统移植到另一个操作系统。,实时操作系统对应的,POSIX,接口标准为,1003.1b,(原来的,1003.4,),,VxWorks,几乎都支持,重要包括:,异步,I/O,信号量,消息队列,内存管理,排队信号,调度,时钟和定时器,2024/9/14,54,POSIX,接口,VxWorks Wind,内核包括:,POSIX,接口和专为,VxWorks,设计的接口,对应两种不同调度。,POSIX,调度,基于进程(不可直接访问内存,父子关系),基于,FIFO,,优先数越高,优先级越高,Wind,调度,基于任务(可直接访问内存),基于优先级的抢占式调度,,,优先数越低,优先级越高,POSIX,时钟和定时器,,支持多个虚拟时钟,POSIX,内存上锁接口,,支持分页和交换技术,2024/9/14,55,中断服务代码(,ISR),为尽快响应中断请求,中断服务例程在,task,上下文以外的特别的上下文中运行,因而唤醒,ISR,,不需要切换任务上下文,使用,intConnect(),,可以将,C,函数与任何中断连接起来,有些结构支持独立的中断堆栈,有些不支持,由,BSP,决定,ISR,的特别限制,(,没有,TCB),:,ISR,不能调用可能使自己被阻塞的例程,ISR,不能分配和释放内存,或调用包含分配和释放内存的函数,ISR,不能通过,I/O,访问设备,因为可能阻塞,ISR,使用,logMsg(),来向控制台,(console),打印消息,ISR,不能使用浮点协处理器,ISR,可以使用所有,VxWorks,的工具库,支持,errno,2024/9/14,56,中断服务代码,ISR,出现异常时无法挂起,,VxWorks,将异常描述存放到低端内存,然后重新启动系统;,VxWorks boot ROM,测试低端内存,并将异常描述打印到控制台上,可以为某些事件预留最高级别的中断,实现,0,时延响应,ISR,到,Task,的通信,共享内存和环形缓冲区,信号量(,ISR,只能释放信号量),消息队列(使用,NO_WAIT,参数),管道(只能,write,),信号(,ISR,用信号通知,Task,),2024/9/14,57,WatchDog,定时器,VxWorks,提供,Watchdog Timer,机制,允许任何,C,函数与一个特定的时间延迟相联系。通常,作为系统中断服务程序的一部分来维护。,利用,Watchdog,来处理任务时限,wdCreate,(,),分配并初始化一个,watchdog,定时器,wdDelete,(,),终止并删除一个,watchdog,定时器,wdStart,(,),启动一个,watchdog,定时器,wdCancel,(,),取消一个正在计时的,watchdog,2024/9/14,58,内 容,网络产品实现方法的演进,实时系统,VxWorks,介绍,基本定义,内核(,Wind),任务间通信,POSIX、ISR,、,Watchdog,I/O,系统及其他,Tornado,开发环境介绍,BSP,设备驱动,2024/9/14,59,VxWorks,的,I/O,系统,VxWorks,的,I/O,系统为各种设备提供简单的、统一的、与设备无关的接口,包括:,面向字符的设备,如终端,随机访问块设备,如磁盘,虚拟设备,如,task,间的管道和,socket,监视和控制设备,如数字,/,模拟,I/O,设备,访问远端设备的网络设备,VxWorks,为基本,I/O,和有缓冲区,I/O,提供标准,C,库,基本,I/O,库与,UNIX,兼容;有缓冲区,I/O,库与,ANSI C,兼容,VxWorks,的,I/O,系统设计使之比大多数,I/O,系统更快更灵活,这对实时系统很重要,2024/9/14,60,VxWorks,的,I/O,系统,2024/9/14,61,文件、设备及驱动,在,VxWorks,中,应用程序通过打开文件来访问,I/O,设备,文件指下面两种事物之一:,未结构化的,“,原始,”,设备,如串行通信通道或者任务间管道,位于一个结构化的、随机访问的、包含文件系统的设备上的逻辑文件,I/O,设备有两个级别:基本,I/O,和有缓冲区,I/O,文件名和缺省设备:,/usrNFS,网络设备,Host:Non-NFS,网络设备,Dev:dosFs,文件系统设备,2024/9/14,62,基本,I/O,基本,I/O,在,VxWorks,中是最低级的,I/O,,其接口与标准,C,库的,I/O,原语兼容,creat,(,),创建一个文件,remove,(,),删除一个文件,open,(,),打开一个文件,(,也可创建一个文件,),close,(,),关闭一个文件,read,(,),读一个已经创建或打开的文件,write,(,),写一个已经创建或打开的文件,ftruncate (),将一个文件切割成指定大小,ioctl,(,),对文件或设备执行特定控制功能,在基本,I/O,级别,文件用文件描述字,(fd),指示,它是一个整数,在,creat(),或,open(),时返回,Fd,不用后应及时关闭,以节约资源,2024/9/14,63,标准输入、标准输出和标准错误,下面的文件描述字(,fd,)保留作特殊用途:,0 =,标准输入,1 =,标准输出,2 =,标准错误输出,它们不会由,create( ),返回,但可以重定向到其它,fd,系统缺省情况下将标准,fd,重定向到控制台,任务缺省情况下使用全局重定向的定义,它们可以被全局重定向:,ioGlobalStdSet (stdFd, fileFd);,每个任务的重定向将覆盖全局定义,ioTaskStdSet (0, stdFd, fileFd);,2024/9/14,64,ioctl( ),为了运行某些不适合于其它基本,I/O,的,I/O,函数,使用,ioctl( ),设置或查询一些属性,譬如:,当前设备可输入多少字节,设置设备的特定选项,获取某个文件系统的信息,。,Ioctl( ),的参数是,fd,、指示请求函数的代码、和一个函数需要的参数:,result,= ioctl (,fd,function,arg,);,将一个,tty,设备的数据波特率设为,9600,的例子:,status,= ioctl (,fd, FIOBAUDRATE, 9600);,2024/9/14,65,等待在多个,fd,上的,select( ),将任务挂起于多个文件描述字或者超时后返回,与,Unix,和,Windows,兼容,selectLib,提供两种支持,任务级别支持:任务等待多个设备激活,设备驱动支持:等待设备,I/O,的同时检测挂起的任务,2024/9/14,66,有缓存的,I/O,:,Stdio,低级,I/O,调用会带来一些开销,为提高,I/O,访问的灵活性和效率,VxWorks,提供了有缓存的,I/O,机制,Stdio,的,I/O,函数提供透明的缓存机制,提高访问效率,FILE *fp;,fp,= fopen (/usr/foo, r);,标准输入、输出、和出错,Stdin,Stdout,Stderr,2024/9/14,67,其它格式化,I/O,特殊情况,:,printf,(,),sprintf,(,), and,sscanf,(,),属于,fioLib,,没有缓存,附加函数,:,printErr(,) and fdprintf(,),消息日志,提供日志功能,避免当前任务访问,I/O,可以重定向到其它,I/O,2024/9/14,68,异步输入输出,异步输入输出(,AIO,):让一般内部处理和,I/O,操作同步进行,提高任务的效率,AIO,的例程(见参考手册),AIO,控制块,AIO,的使用,2024/9/14,69,本地文件系统,VxWorks,包括多种使用块设备(磁盘)的本地文件系统,VxWorks,的,I/O,结构使,VxWorks,可以同时有多种文件系统:,MS-DOS,兼容文件系统:,dosFs,功能强大,RT-11,兼容文件系统:,rt11Fs,无分层文件组织结构,文件连续,原始磁盘文件系统:,rawFs,整个磁盘作为一个文件,SCSI,序列文件系统:,tapeFs,磁带的一卷作为一个文件,CD-ROM,文件系统:,cdromFs,ISO 9660,2024/9/14,70,虚拟内存,虚拟内存支持有内存管理单元(,MMU,)的目标板,2024/9/14,71,Tornado (1),Tornado,提供了,Vxworks,系统开发的集成开发环境,,其中,Tornado,源代码编辑器,包括下列特性:,标准文本控制能力,C,和,C+,语法元素用不同颜色,调制集成:编辑窗口跟踪代码的执行,编译集成:项目管理将编译警告和编译错误,直接和编辑窗口中的相应代码对应起来。,2024/9/14,72,Tornado (2),Tornado,集成开发环境由以下几个部分组成:,2024/9/14,73,Vxworks/Tornado,开发方式,目标,CPU: Vxworks,在其上运行 的一个单板计算机;,Tornado PC,主机:有一根串行线与目标机相连(初始化时主机作为终,端用),,Vxworks,核二进制文件驻留在其盘上,核,的下载及运行,Tornado,工具通过以太网口进行。,Ethernet,AGENT,SERVER,2024/9/14,74,C+,开发支持,Tornado,自带,GNU C+,编译器,Tornado,包括最新版本的,iostream,库和标准模板库的,SGI,实现,Tornado,的交互开发工具如,Debugger,、,Shell,等都支持,C+,Tornado,还提供,Wind Foundation Classes,:,VxWorks Wrapper Class library,Tools.h+ library from Rogue Wave,2024/9/14,75,目标机驻留工具,除了驻留在主机中的工具外,部分工具驻留在目标机中:,Target-resident shell,Symbal table,Module loader/unloader,2024/9/14,76,工具库,中断处理支持:支持硬件中断和软件中断,WatchDog,定时器,消息日志:记录出错或状态消息,内存分配:可管理多个独立的内存池,字符串格式化和扫描:,printf(), scanf(),等,线形和环形缓冲区处理:可同时访问,FIFO,而不用互锁,链表操作:,lstLib,包含创建和处理双向链表的全集,ASNI C,库,2024/9/14,77,性能评估,执行计时器(,Execution Timer,):测量程序运行时间,Spy,工具:提供每个,task,使用,CPU,的信息,占用,CPU,的时间,中断占用的时间,空闲时间,WindView,提供更强大的监视功能,2024/9/14,78,VxWorks,仿真器(,VxSim,),VxWorks,仿真器是一个模仿,VxWorks,目标机的程序,作为原型和测试环境,可以在一个主机上运行多个仿真器,不涉及到硬件驱动,2024/9/14,79,Tornado,开发环境,2024/9/14,80,Tonado,开发环境(续),2024/9/14,81,Tornado,开发环境(续),2024/9/14,82,VxWorks,操作系统组成,SCSI Controller,Serial Controller,Clock Timer,Ethernet Controller,Hardware,SCSI Driver,BSP,Network Driver,Hardware-Dependent Software,I/O Systems,Wind Kernel,VxWorks Libraries,TCP/IP,Hardware-Independent Software,File system,Tool-Applications,抽象层,固件,2024/9/14,83,板支持包(,BSP),为各种目标板的硬件功能提供了统一的软件接口,它们包括:,硬件初始化,中断处理和产生,硬件时钟和定时器管理,内存映射和分配,BSP,还包括,boot Rom,和其它启动机制,sysLib,和,sysALib,库是,VxWorks,可移植的核心,2024/9/14,84,Vxworks,操作系统将一切与硬件有关的功能模块都放在,BSP,库中。该,BSP,库是硬件与软件的接口,处理硬件的初始化、中断处理与产生、硬件时钟与定时管理、局部和总线内存空间的映射、内存大小定义,等等,。能够自行启动目标机、初始化目标机、能够与,host,通信以下载,Vxworks,核、把控制权交给,Vxworks,核来调用用户应用程序等功能。,板支持包(,BSP),2024/9/14,85,VxWorks,中的设备,ttyDrv,Terminal driver,ptyDrv,Pseudo-terminal driver,pipeDrv,Pipe driver,memDrv,Pseudo memory device driver,nfsDrv,NFS client driver,netDrv,Network driver for remote file access,ramDrv,RAM driver for creating a RAM disk,scsiLib,SCSI interface library,-,Other hardware-specific drivers,2024/9/14,86,VxWorks,与主机系统的,I/O,差别,设备配置:在,VxWorks,中设备驱动可以动态安装和卸载,文件描述字:在,Windows,和,Unix,中,,fd,是进程中唯一的;在,VxWorks,中,fd,是全局唯一的,标准输入输出例外(,0,,,1,,,2,),I/O,控制:,Unix,和,VxWorks,中传给,ioctl( ),的参数可能不同,驱动例程:,Unix,下设备驱动运行于系统模式下,不可抢占;,VxWorks,下的设备驱动运行于线程模式下,可抢占。,2024/9/14,87,内部结构,多数系统的设备驱动只提供少数低级,I/O,例程,如输入、输出等;大部分工作由,I/O,系统完成。,驱动易实现,设备动作尽可能类似,驱动编写人员很难完成,I/O,系统未提供的协议,VxWorks,中,I/O,系统用于将用户请求交给适当的设备驱动,每个驱动根据自己的情况处理用户的,I/O,请求。,VxWorks,提供高级例程库用于设备驱动的编写,为标准设备写驱动很容易,编码量小,可以根据情况用非标准方式实现用户请求,2024/9/14,88,设备驱动程序,驱动初始化例程,xxDrv( ),安装驱动、分配数据结构、连接中断服务例程、初始化硬件,设备创建,xxDevCreate( ),给驱动增加一个设备,参数包括缓冲区大小、设备地址等,为设备初始化数据结构、信号量和硬件等,基本,I/O,功能,xxOpen(),xxRead(),xxWrite(),xxIoctl(),中断服务例程,xxInterrupt( ),2024/9/14,89,驱动安装,I/O,系统维护一个驱动表,将用户的,I/O,请求转换为适当的驱动程序,使用,iosDrvInstall(),动态安装驱动,参数为新驱动的,7,个,I/O,例程的地址,,iosDrvInstall(),将地址放入驱动表的空闲条目,返回此条目的索引,称为驱动号。,文件系统在驱动表中有自己的条目,它们在文件系统库初始化时创建。,2024/9/14,90,驱动安装举例,2024/9/14,91,设 备,一些驱动可以为某种设备的多个实例服务,在,VxWorks,中,数据结构设备头(,DEV_HDR,)定义设备,设备名,设备的驱动的编号(,Index,),DEV_HDR,保存在驻留内存的设备列表(,device_list,)中,DEV_HDR,是设备描述字(,device descriptor,)的开始部分,后者包括特定设备的数据:,设备地址,缓冲区,信号量,设备描述字只要以,DEV_HDR,开头便可,可包含任何与设备相关的信息,2024/9/14,92,设备列表和增加设备,调用,iosDevAdd(),动态增加非块设备,参数为新设备的描述字的地址、设备名和驱动编号,驱动程序只需要填写描述字中与设备相关信息,不需要填写设备头;,iosDevAdd(),在设备头中填入设备名称和驱动编号,然后加入设备列表,增加块设备需要调用与此块设备文件系统相关的设备初始化例程,这个例程将自动调用,iosDevAdd(),2024/9/14,93,增加设备的例子,2024/9/14,94,文件描述字,可以同时对一个设备打开多个,fd,一个设备的驱动维护,I/O,系统设备信息和与,fd,相关的信息(如文件偏移量),也可以对一个非块设备打开多个,fd,,如,tty,,这些,fd,没有附加信息,所以对它们的写操作效果相同,2024/9/14,95,Fd,表,文件用,open(),或,creat(),打开,,I/O,系统在设备列表中搜索与文件名最匹配的设备,找到后用设备头中的驱动编号查找对应的驱动表中的打开例程。,I/O,系统必须建立,fd,与驱动之间的联系,驱动必须将每个,fd,与特定数据结构关联起来,在非块设备的情况下,通常是设备描述字,I/O,系统在,fd,表中维护这些联系。表中包括,驱动编号,驱动确定的,4,字节值(用于标识文件),2024/9/14,96,打开文件,2024/9/14,97,打开文件,2024/9/14,98,从文件中读取数据,2024/9/14,99,关闭文件,用户使用,close(),关闭文件,I/O,系统根据,fd,表找到对应驱动的关闭例程,驱动的关闭例程运行之后,,I/O,系统将,fd,表中对应条目标识为可用,2024/9/14,100,实现,select(),Select(),可以使一个,task,等待在多个,I/O,上,或者超时返回。,设备驱动支持,select(),的方法和步骤,参见,VxWorks,编程指南(,VxWorks Program Guide,)的,3.9.3,节,2024/9/14,101,Cache,一致性,2024/9/14,102,Cache,一致性,数据,Cache,通过减少内存访问次数来提高性能,有,cache,的板子的驱动必须保证,Cache,的一致性,Cache,一致性指,Cache,与,RAM,中的数据必须同步或一致,当出现对,RAM,的异步访问时(如,DMA,设备访问或,VME,总线访问),,Cache,和,RAM,中的数据可能会失去同步,数据,cache,有两种工作方式:,Writethrough,:向,cache,和,RAM,写数据,保证输出同步,不保证输入,Copyback,:只向,cache,写数据,不能保证输出或输入同步,2024/9/14,103,Cache,一致性,在,Copyback,的情况下,如果,DMA,从,RAM,中读数据,可能会与,Cache,中不一致。所以读之前要保证,Cache,中的数据全部刷新到,RAM,中,如果,CPU,要读取来自,DMA,设备中的数据,那么从,RAM,和,Cache,中读的数据可能不一致,因此要将,Cache,中的数据标识为非法,使,CPU,从,RAM,中读取数据,驱动保证,Cache,一致性的方法:,分配,cache,安全缓冲区(不能,cache,的缓冲区),当向设备写数据或从设备读数据时,刷新,cache,或标识为非法,2024/9/14,104,Cache,一致性,分配,cache,安全缓冲区,对静态缓冲区有用,但要求,MMU,支持,经常分配或释放不能,cache,的缓冲区(动态缓冲区)将导致大量内存被标识为不能,cache,手动刷新,Cache,条目或者将其标识为非法,可以使动态缓冲区保持一致,CacheFlush(),cacheInvalidate(),将上面两种方法结合起来效率更高,只有非常必要时才刷新,Cache,条目或将其标识为非法,2024/9/14,105,块设备,在,VxWorks,中,块设备不是直接与,I/O,系统交互,而是通过文件系统与,I/O,系统交换,从,SCSI-1,开始支持直接访问块设备,与各种操作系统兼容,VxWorks,还支持,SCSI-2,顺序设备,数据块只能写在媒质末尾,不能替换中间的数据,但可以从任何地方读取数据;这与其它块设备的处理不同,2024/9/14,106,块设备驱动,块设备驱动必须支持创建逻辑块设备结构,包括一些公共特性,如设备物理配置变量、指定驱动的例程等,BLK_DEV,:直接访问块设备,SEQ_DEV,:顺序块设备,设备初始化(,dosFsDevInit(),),块设备的低级驱动不在,I/O,系统的驱动表中,而是每个文件系统作为一个,“,驱动,”,安装在驱动表中,每个文件系统在驱动表中只占一个条目,即便它为多个设备服务,设备初始化后,与某文件系统关联,所有,I/O,操作经文件系统查找,BLK_DEV,或,SEQ_DEV,中的例程,2024/9/14,107,NPT,套件,2024/9/14,108,NPT,套件,2024/9/14,109,使用,NPT,收发包的层次结构,IPv4,接口,IPv6,接口,设备层,IPv4PethDriver,IPv6PethDriver,END Driver,MUX,函数调用接口,MUX,层,Service,函数调用接口,Service,层,USER,层,协议转换,地址转换,,FTP_ALG,DNS_ALG,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!