您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 7-VxWorks操作系统
VxWorks操作系统第7章VxWorks操作系统VxWorks操作系统内容•7.1实时系统•7.2多任务管理•7.3信号量•7.4任务间通信•7.5内存管理•7.6异常、中断、定时器•7.7I/O系统•7.8本地文件系统•7.9网络通讯•7.10网络程序设计7.1实时系统•实时系统是对外来事件在限定时间内能做出反应的系统。•评价实时系统的指标:响应时间ResponseTime生存时间SurvivalTime吞吐量Throughput实时系统与普通系统•在实时计算中,系统的正确性不仅仅依赖于计算的逻辑结果而且依赖于结果产生的时间•对于实时系统来说最重要的要求就是实时操作系统必须有满足在一个事先定义好的时间限制中对外部或内部的事件进行响应和处理的能力•实时操作系统还需要有效的中断处理能力来处理异步事件和高效的I/O能力来处理有严格时间限制的数据收发应用实时系统分类•根据不同的分类方法可以分为:1.周期性的和非周期性的2.硬实时和软实时3.专用系统和开放系统4.集中式系统和分布式系统实时多任务操作系统与分时多任务操作系统•分时操作系统:软件的执行在时间上的要求,并不严格,时间上的错误,一般不会造成灾难性的后果。•实时操作系统:主要任务是对事件进行实时的处理,虽然事件可能在无法预知的时刻到达,但是软件上必须在事件发生时能够在严格的时限内作出响应(系统响应时间),即使是在尖峰负荷下,也应如此,系统时间响应的超时就意味着致命的失败。实时操作系统的重要特点是具有系统的可确定性,即系统能对运行情况的最好和最坏等的情况能做出精确的估计。实时操作系统中的重要概念•系统响应时间(Systemresponsetime):系统发出处理要求到系统给出应答信号的时间。•任务换道时间(Context-switchingtime):是任务之间切换而使用的时间。•中断延迟(Interruptlatency):是计算机接收到中断信号到操作系统作出响应,并完成换道转入中断服务程序的时间。实时操作系统应具有如下的功能•任务管理(多任务和基于优先级的任务调度)•任务间同步和通信(信号量和共享内存等)•存储器优化管理(含ROM的管理)•实时时钟服务•中断管理服务硬实时、软实时(一)•硬实时:要求在规定的时间内必须完成操作,这是在操作系统设计时保证的对于硬实时系统完成timelyresponse是必须的•软实时:没有那么严,只要按照任务的优先级,尽可能快地完成操作即可对于软实时系统基于优先级调度的调度算法可以满足要求,提供高速的响应和大的系统吞吐率•这两类系统的区别在于调度算法。硬实时、软实时(二)•软实时的RTOS一般应用在消费类电子产品,如手持电脑、个人数字助理(PDA)和机顶盒等消费电子类。WinCE。•硬实时的RTOS一般应用于通信、控制和航空航天等实时性强和可靠性高的领域。通信行业使用PSOS、VxWorks、VRTX航天、航空使用VRTX、VxWorks工业PC控制使用QNX实时系统的体系结构设计•实时系统的体系结构必须满足1.高运算速度2.高速的中断处理3.高的I/O吞吐率4.合理的处理器和I/O设备的拓扑连接5.高速可靠的和有时间约束的通信6.体系结构支持的出错处理7.体系结构支持的调度8.体系结构支持的操作系统9.体系结构支持的实时语言特性。10.系统的稳定性和容错也非常重要11.还要考虑到实时的分布式应用。实时进程调度算法•静态的周期性调度基本思想是将处理器的时间分为帧。•FIFO也就是将系统中所有的任务组织成一个队列。先到先服务•优先级队列算法这种算法从FIFO发展而来。给每个任务设定优先级,然后在FIFO中按照优先级排列。这种算法保证了高优先级的任务的完成,但是对于低优先级的任务很可能无法满足时间的正确性。而且对低优先级的任务来说等待的时间是无法预知的。实时系统内存管理•预先分配内存在系统构造或编译时为每个任务指定其使用的内存空间。这种方法对于硬实时系统来说是很合适的。而且嵌入式实时操作系统很多都是在ROM中运行,仅仅只有需要变化的数据才放在RAM中•虚拟内存系统在管理虚拟内存时,不将“锁”住的内存块换出物理内存。嵌入式系统和实时系统(1)•嵌入式系统经常被误解为就是实时性系统。其实,多数嵌入式系统并不关心实时性•Linux是嵌入式操作系统,但并非实时操作系统。•Vxwork、pSOS、Nucleus和WindowsCE是嵌入式实时操作系统嵌入式系统和实时系统(2)•嵌入式系统的实时性是相对的概念。•实时系统要求使用嵌入式实时操作系统,但是使用嵌入式实时操作系统的系统并不一定就是实时系统。它不仅仅取决于操作系统,还取决于硬件、应用软件等因素,它是一个系统的概念。7.2多任务管理•实时系统的任务的基本状态有:1、就绪态:任务只等待系统分配CPU资源;2、悬置态:任务需等待某些不可利用的资源而被阻塞;3、休眠态:如果系统不需要某一个任务工作,则这个任务处于休眠状态;4、延迟态:任务被延迟时所处状态;任务状态迁移就绪态延迟态悬置态休眠态最高优先级任务正执行taskInit()VxWorks任务状态迁移函数(一)•就绪态----悬置态semTake()/msgQReceive()•就绪态----延迟态taskDelay()•就绪态----休眠态taskSuspend()•悬置态----就绪态semGive()/msgQSend()•悬置态----休眠态taskSuspend()VxWorks任务状态迁移函数(二)•延迟态----就绪态expireddelay•延迟态----休眠态taskSuspend()•休眠态----就绪态taskResume()/taskActivate()•休眠态----悬置态taskResume()•休眠态----延迟态taskResume()多任务内核•任务管理任务是竞争系统资源的最小运行单元。任务可以使用或等待CPU、I/O设备及内存空间等系统资源,并独立于其它任务,与它们一起并发运行(宏观上如此)。VxWorks内核使任务能快速共享系统的绝大部分资源,同时有独立的上下文来控制个别线程的执行。•VxWorks实时内核Wind提供了基本的多任务环境,系统内核根据某一调度策略让它们交替运行。•系统调度器使用任务控制块的数据结构(简记为TCB)来管理任务调度功能。任务控制快(TCB)•任务控制块用来描述一个任务,每一任务都与一个TCB关联。任务控制块里面包含了:当前状态、优先级、要等待的事件或资源、任务程序码的起始地址、初始堆栈指针•任务的“上下文”(context)。任务的上下文就是当一个执行中的任务被停止时,所要保存的所有信息。通常,上下文就是计算机当前的状态,也即各个寄存器的内容。•VxWorks中,内存地址空间不是任务上下文的一部分。所有的代码运行在同一地址空间。内核管理示意图KernelTCBTCBTCBTCBTCBTCBSuspendedPendedTCBDelayedTCBReadyCPUExecuting任务上下文切换•当前运行的任务的上下文被存入TCB•将要被执行的任务的上下文从它的TCB中取出,放入各个寄存器中。•上下文切换必须很快速VxWorks的优先级调度•基于优先级的抢占式调度法作为缺省策略为每个任务指定不同的优先级。没有处于悬置或休眠态的最高优先级任务将一直运行下去。当更高优先级的任务由就绪态进入运行时,系统内核立即保存当前任务的上下文,切换到更高优先级的任务。当有内核调用或中断到来时,内核重新调度•同时提供了时间片轮转调度基于优先级的抢占式调度注:高低优先级时间表示抢占表示任务完成t1t2t3t2t1时间片轮转调度ABCDABCD时间片周期(常量,可编程)混合调度策略时间片t4t2t3t2t1t3t2t1高低时间先优级注:表示抢占,表示任务完成。内核时间片•在VxWorks中,时间片的长度可由系统调用KernelTimeSlice(ticks)通过输入参数值来指定。当ticks为0时,时间片调度被关闭•基于优先级的抢占式调度可以发生在任何时候,时间片轮转调度只能在相同优先级的任务间每隔ticks发生一次。VxWorks任务特性•所有的代码运行在同一地址空间。•任务能快速共享系统的绝大部分资源,同时有自己独立的上下文•所有的任务都运行在特权模式下VxWorks共享代码•VxWorks提倡单个子程序或子程序库被多个不同的任务调用。例如printf。一个被多个任务调用的单个拷贝称为共享代码。•VxWorks动态链接功能很容易实现代码共享。•共享代码必须是可重入的。•VxWorks的I/O和驱动程序是可重入的。但是要求应用小心设计。对于缓冲I/O,VxWorks推荐使用文件指针。VxWorks重入机制•动态堆栈变量如果程序仅仅是纯代码,除了自己的动态堆栈变量外没有自己的数据,除了调用者以参数传进的数据外,没有其他数据。任务只在自己的堆栈内进行操作。•由信号量保护的全局或静态变量VxWorks的一些库封装对公共数据的访问。需要借用互斥机制•任务变量一些程序可能会被多个任务同时调用,这些任务可能要求全局变量和静态变量有不同的值。这种情况下,VxWorks提供了所谓任务变量的机制,这种机制允许在任务上下文中增加4字节的变量,因此每次上下文交换时,该变量的值被保存。这种机制由taskVarLib库中的函数来提供。抢占禁止•taskLock()和taskUnlock():使调度器失效或生效。•当一个任务调用taskLock()使调度器失效,任务运行时没有基于优先级的抢占发生。然而,如果任务被阻塞或是悬置时,调度器从就绪队列中取出最高优先级的任务运行。当设置抢占禁止的任务解除阻塞,再次开始运行时,抢占又被禁止。•这种抢占禁止防止任务的切换,但对中断处理不起作用。VxWorks怎样满足实时性需求•多任务特性•基于抢占式多任务调度•快速的任务上下文切换•快速确定的系统响应•高效的任务间通讯机制概况•taskLib系统库提供了一些底层的操作函数•VxWorks任务由以下两个部分组成•任务堆栈(存放局部变量和参数)•TCB(任务控制块)任务创建taskSpawnStackTCBPCfoo(){...}任务创建函数inttaskSpawn(name,priority,options,stackSize,entryPt,arg1,...,arg10)name任务名称.priority任务优先级,0-255.options任务的创建方式stackSize任务堆栈的大小entryPt任务入口arg1,...,arg10任务的参数程序正确执行时会返回任务ID任务ID•通常在任务创建时由内核指定任务退出后该ID号可以重用ID号0表明任务自己相关例程taskIdSelf()获取任务自身的IDtaskIdListGet()获取系统的任务列表taskIdVerify()检查一个ID是否有效该ID号在整个系统中是唯一的任务名称是一个描述任务的名称通常在shell中操纵任务时使用而在程序中,一般使用ID来操纵任务任务名的前面,一般都会加上一个t.任务名可以不唯一(但多数情况下是唯一的)操作例程taskName()通过任务ID获取任务名taskNameToId()通过任务名获取任务ID任务优先级提供了0(最高)~255(最低)共256级没有明确的规则来设置任务的优先级一般将重要的任务设置为高优先级任务的优先级能够动态的改变:taskPriorityGet(tid,&priority)taskPrioritySet(tid,priority)任务堆栈任务创建时系统会从堆中分配任务堆栈一旦建立,则其大小就固定了堆栈溢出会产生一些未知的结果任务方式系统提供以下方式:VX_FP_TASK该任务需要浮点库支持VX_NO_STACK_FILL不填充任务堆栈VX_UNBREAKABE禁止断点VX_DEALLOC_STACK任务退出时释放该堆栈taskOptionsGet()获
本文标题:7-VxWorks操作系统
链接地址:https://www.777doc.com/doc-4436960 .html