1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,VxWorks,系统简介,郭思,SX1401188,VxWorks,系统简介,VxWorks,应用背景,VxWorks,系统体系结构,任务管理,通信机制,内存管理,VxWorks,应用背景,VxWorks,是美国,Wind River System,公司于,1983,年设计开发的一种嵌入式实时操作系统(,RTOS,)。,特点:,具有一个高性能的操作系统内核,Wind,(,实时性,好、,可裁减,),友好的开发调试环境,(,Tornado,是主机的集成开发环境,),较好的兼容性,支持多种开发和运行环境,VxWo
2、rks,系统应用举例,航空航天、电信网络、工业控制、仪表仪器,VxWorks,系统体系结构,板级支持包,BSP(Board Support Package),微内核,wind,I/O,系统,文件系统,网络系统,高性能的实时操作系统核心,wind,最简内核,任务的管理与调度,8k,内核不处理外设,对外设不做假设,操作系统不假设板上是否有总线以及什么总线,不假设内存的大小及内存如何定位,不假设,I/O,及有多少,I/O,板级支持包,BSP,管理外设,VxWorks,:标准的单,CPU,版本,VxFusion,:标准的多,CPU,版本,BSP,(,Board Support Package,),BS
3、P,通常是指针对具体的硬件平台,用户所编的启动代码和部分设备驱动程序的集合。,板级支持包对各种板子的硬件功能操作提供了统一的软件接口,,是保证,VxWorks,操作系统可移植性的关键,。它包括硬件初始化、中断的产生和处理、硬件时钟和计时器管理、局域和总线内存地址映射、内存分配等等。,I/O,与文件系统,VxWorks,中,,I/O,系统分为字符,I/O,和块,I/O,,文件系统是一种块,I/O,。,I/O,系统实现可分为几个层次:,底层的设备驱动、,I/O,系统、其他系统模块(包括文件系统)、应用程序。,I/O,系统使用标准的接口调用设备驱动程序相应的函数。,文件系统是在,I/O,基础上实现的
4、一个系统组件,针对的是块,I/O,操作。,网络系统,VxWorks,的网络系统提供了对其它网络和,TCP/IP,网络系统的,透明,访问,包括与,BSD,套接字兼容的编程接口,远程过程调用(,RPC,),远程文件访问以及,BOOTP,和,ARP,代理。,无论是松耦合的串行线路、标准的以太网连接还是紧耦合的利用共享内存的背板总线,所有的,VxWorks,网络机制都遵循标准的,Internet,协议,VxWorks,任务管理,从系统的角度看,任务是竞争系统资源的最小运行单元。,VxWorks,任务管理主要包括:,任务状态及其跃迁,任务调度,任务结构,VxWorks,实时内核,Wind,提供了基本的多
5、任务环境,系统内核根据某一调度策略让它们交替运行。,系统调度器使用,任务控制块,的数据结构(简记为,TCB),来管理任务调度功能。,任务状态及其跃迁,四种基本任务状态及状态迁徙,任务调度,优先级抢占式调度,任务调度策略,:,Wind,内核采用基于优先级的,抢占式调度法,作为它的缺省策略,。,VxWorks,共有从,0,到,255,共,256,个优先级。,当任务被创建时,系统根据给定值分配优先级。用户也可通过调用,taskPrioritySet(),来改变优先级。,任务调度,时间片轮转调度,基于优先级抢占调度可以,扩充时间片轮转调度,轮转调度法分配给处于就绪态的每个同优先级的任务一个相同的执行时
6、间片。一个任务用完时间片之后,就进行任务切换,停止执行当前运行的任务,将它放入队列尾部,并开始执行就绪队列中得下一个任务。时间片的长度可以调用,KernelTimeSlice,()来指定。,任务调度,禁止抢占,Wind,内核可通过调用,taskLock(),和,taskUnlock,()来使调度器起作用和失效。当一个任务调用,taskLock(),使调度器失效,任务运行时没有基于优先级的抢占发生。然而,如果任务被阻塞或是悬置时,调度器从就绪队列中取出最高优先级的任务运行。当设置抢占禁止的任务解除阻塞,再次开始运行时,抢占又被禁止。,这种抢占禁止防止任务的切换,但对中断处理不起作用。,任务结构,
7、任务控制块(,TCB,),任务控制块用来描述一个任务,每一任务都与一个,TCB,关联。,任务控制块里面包含了:当前状态、优先级、要等待的事件或资源、任务程序码的起始地址、初始堆栈指针,任务的,“,上下文,”,(,context),。任务的上下文就是当一个执行中的任务被停止时,所要保存的所有信息。通常,上下文就是计算机当前的状态,也即各个寄存器的内容。,任务结构,任务控制块(,TCB,),任务上下文切换,当前运行的任务的上下文被存入,TCB,将要被执行的任务的上下文从它的,TCB,中取出,放入各个寄存器中。,Kernel,TCB,TCB,TCB,TCB,TCB,TCB,Suspended,Pen
8、ded,TCB,Delayed,TCB,Ready,CPU,Executing,通信机制,Vxworks,支持各种任务间的通信机制,提供多种多样的任务间通信方式,主要有:,共享内存,主要是数据的共享;,信号量,用于基本的互斥和任务同步;,消息队列和管道,单,CPU,的消息传递;,二进制信号,用于异常处理;,Socket,和远程过程调用,用于网络间任务消息传递。,通信机制,共享内存,任务间通信最简单的方法是采用共享存储区,也即相关的各个任务分享属于它们的地址空间的同一内存区域。因为所有的任务都存在于单一的线性地址空间,任务间共享数据。全局变量、线性队列、环形队列、链表、指针都可被运行在不同的上下
9、文的代码所指向。,用户可以定义一些数据用于任务间的通讯:,编写一个库,提供该数据的共享存储;,所有任务访问这些共享数据时都使用库中的例程;,可以用信号量来保证共享数据的互斥访问,通信机制,信号量,Vxworks,信号量提供最快速的任务间通信机制,它主要用于解决任务间的互斥和同步。针对不同类型的问题,有三种信号量:,二进制信号量,使用最快、最广泛,主要用于同步和互斥,互斥信号量,主要用于优先级继承、安全删除和回溯,计数器,Vxworks,还提供,POSIX,信号量和多处理器上信号量的应用。,通信机制,消息队列和管道,单处理器中任务间消息的传送采用消息队列,管道是,一个虚拟的,IO,设备,,,是建
10、立在消息队列上的,采用标准的,IO,接口,能调用标准的,I/O,函数,进行管道打开、读入和写入等操作。,消息队列和管道都会提供先入先出的缓冲(,FIFO,)以及同步和互斥机制。,用于单个处理器中任务间的通讯,也可用于,ISR,与任务间的通讯,taskA,taskB,通信机制,信号,任何任务和中断程序都能向特定的任务发出信号,收到信号的任务立即挂起正在执行的线程,转而在下一时间调度运行特定信号处理程序。,类似于硬件中断,网络通信机制,VxWorks,提供了如下一些网络工具完成信息传送:,Sockets,完成,VxWorks,系统和其他系统之间的任务消息传送;,远程过程调用(,RPC,)允许任务调
11、用另一主机上的过程;,远程文件存储:采用,NFS,、,RSH,、,FTP,等方式远程存储主机文件,文件输出,VxWorks,系统和网络协议的接口是靠套接字(,Sockets,)来实现的,网络通信机制,Sockets,zbuf,API,RPC,NFS,Tornado,tgtsvr,TCP,UDP,IP,rlogin,telnet,rsh,ftp,Ethernet,Shared Memory,Slip/PPP,Network Driver,zbuf,API,内存管理,平坦模式(Flat Mode),为什么不是段页式的管理?,页式管理要有程序,-,内存的映射,严重影响实时性,VxWorks,系统支持
12、静态分配和动态分配相合的内存分配,低端内存区和,VxWorks,区采用静态分配,而保证,VxWorks,的实时性和稳定性。,内存分配采用,first-fit,算法,当增加硬件内存时,需要修改,sysPhysMemTop(),(,或调整,LOCAL_MEM_SIZE,),内存管理模块,内存管理模块由内存分配和内存保护两个相互独立的子模块,内存保护机制,基于,MMU,的内存保护机制,将内核与用户模式应用程序分离,将应用程序彼此分离,内存管理函数,紧凑的内存分区管理器,(memPartLib),完整的内存分区管理器,(memLib),内存碎片,编程尽量使用静态内存分配,动态内存分配会导致响应和执行时间不确定、内存碎片等问题,VxWorks,没有清除碎片的功能,找不到一个合适的时间把正在运行的程序暂停下来清理内存,内存碎片对实时性影响,使得系统的可用空间减少,增加内存管理单元的计算负担,只能避免碎片,限制使用动态内存分配:,参考文献:,1.,嵌入式,VxWorks,系统开发与应用,王学龙,人民邮电出版社,2.,给予,VxWorks,的嵌入式实时系统设计,王金刚,清华大学出版社,






