由浅入深介绍.doc

上传人:壹****1 文档编号:543545033 上传时间:2022-12-08 格式:DOC 页数:22 大小:121.51KB
返回 下载 相关 举报
由浅入深介绍.doc_第1页
第1页 / 共22页
由浅入深介绍.doc_第2页
第2页 / 共22页
由浅入深介绍.doc_第3页
第3页 / 共22页
由浅入深介绍.doc_第4页
第4页 / 共22页
由浅入深介绍.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《由浅入深介绍.doc》由会员分享,可在线阅读,更多相关《由浅入深介绍.doc(22页珍藏版)》请在金锄头文库上搜索。

1、VxWorks 由浅入深介绍关键词:实时操作系统 任务消息 VxWorks Tornado摘 要:本文档对实时操作系统作了简要介绍,并针对VxWorks系统的特点进行了具体的说明和分析,从VxWorks系统的任务管理、通信机制、系统配置、系统接口几个方面展开。1. VxWorks操作系统概述1.1. VxWorks 操作系统简介基于微内核的,可裁减,可抢占(也可支持任务优先级反转),实时多任务操作系统.VxWorks系统最提供多处理器间和任务间高效的信号灯、消息队列、管道、网络透明的套接字。为了获得最快速可靠的中断响应,VxWorks系统的中断服务程序ISR有自己的上下文。 VxWorks实时

2、操作系统由400多个相对独立的、短小精炼的目标模块组成,用户可根据需要选择适当模块来裁剪和配置系统,这有效地保证了系统的安全性和可靠性。系统的链接器可按应用的需要自动链接一些目标模块。这样,通过目标模块之间的按需组合,可得到许多满足功能需求的应用。VxWorks操作系统的基本构成模块包括以下部分:高效的实时内核WindVxWOrks实时内核(Wind)主要包括基于优先级的任务调度、任务同步和通信、中断处理、定时器和内存管理。兼容实时系统标准POSIXVxWOrks提供接口来支持实时系统标准P.1003.1b.I/O系统 VxWOrks提供快速灵活的与ANSI-C相兼容的I/O系统,包括UNIX

3、的缓冲I/O和实时系统标准POSIX的异步I/O。VxWOrks包括以下驱动:网络-网络设备(以太网、共享内存)管道-任务间通信RAM-驻留内存文件SCSI-SCSI硬盘,磁碟,磁带键盘-PC x86键盘(BSP仅支持x86)显示器-PC x86显示器(BSP仅支持x86)磁碟-IDE和软盘(BSP仅支持x86)并口-PC格式的目标硬件本机文件系统I/O系统VxWorks的文件系统与MS-DOS、RT-11、RAM、SCSI等相兼容。网络特性VxWorks网络能与许多运行其它协议的网络进行通信,如TCP/IP、4.3BSD、NFS、UDP、SNMP、FTP等。VxWorks可通过网络允许任务存

4、取文件到其它系统中,并对任务进行远程调用。虚拟内存(可选单元VxVMI)VxVMI主要用于对指定内存区的保护,如内存块只读等,加强了系统的健壮性。共享内存(可选单元VxMP)VxMP主要用于多处理器上运行的任务之间的共享信号量、消息队列、内存块的管理。驻留目标工具Tornado集成环境中,开发工具工作于主机侧。驻留目标外壳、模块加载和卸载、符号表都可进行配置。Wind基类VxWorks系统提供对C+的支持,并构造了系统基类函数。工具库VxWorks系统向用户提供丰富的系统调用,包括中断处理、定时器、消息注册、内存分配、字符串转换、线性和环形缓冲区管理,以及标准ANSI-C程序库。性能优化VxW

5、orks系统通过运行定时器来记录任务对CPU的利用率,从而进行有效地调整,合理安排任务的运行,给定适宜的任务属性。目标代理目标代理可使用户远程调试应用程序。板级支持包(BSP)板级支持包提供硬件的初始化、中断建立、定时器、内存映象等。VxWorks仿真器(VxSim)可选产品VxWorks仿真器,能模拟VxWorks目标机的运行,用于应用系统的分析。1.2. VxWorks操作系统内核VxWorks内核(wind)的基本功能可以分为如下几大类:u 任务管理;u 事件和异步信号服务;u 信号量服务;u 消息队列服务;u 内存管理;u 中断服务程序;u 时钟管理和定时器服务;u 出错处理。在以下各

6、节中将对VxWorks内核的各类功能分别进行描述。1. 任务管理任务是代码运行的一个映象,从系统的角度看,任务是竞争系统资源的最小运行单元。任务可以使用或等待CPU、I/O设备及内存空间等系统资源,并独立于其它任务,与它们一起并发运行(宏观上如此)。VxWorks内核使任务能快速共享系统的绝大部分资源,同时有独立的上下文来控制个别线程的执行。1.1.1. 任务结构多任务设计能随时打断正在执行着的任务,对内部和外部发生的事件在确定的时间里作出响应。VxWorks实时内核Wind提供了基本的多任务环境。从表面上来看,多个任务正在同时执行,实际上,系统内核根据某一调度策略让它们交替运行。系统调度器使

7、用任务控制块的数据结构(简记为TCB)来管理任务调度功能。任务控制块用来描述一个任务,每一任务都与一个TCB关联。TCB包括了任务的当前状态、优先级、要等待的事件或资源、任务程序码的起始地址、初始堆栈指针等信息。调度器在任务最初被激活时以及从休眠态重新被激活时,要用到这些信息。 此外,TCB还被用来存放任务的上下文(context)。任务的上下文就是当一个执行中的任务被停止时,所要保存的所有信息。在任务被重新执行时,必须要恢复上下文。通常,上下文就是计算机当前的状态,也即各个寄存器的内容。如同在发生中断所要保存的内容一样。当发生任务切换时,当前运行的任务的上下文被存入TCB,将要被执行的任务的

8、上下文从它的TCB中取出,放入各个寄存器中。于是转而执行这个任务,执行的起点是前次它在运行时被中止的位置。 VxWorks中,内存地址空间不是任务上下文的一部分。所有的代码运行在同一地址空间。如每一任务需各自的内存空间,需可选产品VxVMI的支持。1.1.2. 任务状态和状态迁移实时系统的一个任务可有多种状态,其中最基本的状态有五种:就绪态(Ready):任务只等待系统分配CPU资源;悬置态(Pending):任务需等待某些不可利用的资源而被阻塞(i/o,获得信号量等);挂起态(Suspend):如果系统不需要某一个任务工作或出错,则这个任务处于休眠状态;延迟态(Delay):任务被延迟时所处

9、状态;运行态(Runing):任务获得所需要的资源,正被调度,占用CPU资源正在运行(就绪队列中最高优先级的任务处于运行状态)。 当系统函数对某一任务进行操作时,任务从一种状态迁移到另一状态。处于任一状态的任务都可被删除。DelayRuningReadySuspendPending 状态迁移调用就绪态 - 悬置态semTake()/msgQReceive()就绪态 - 延迟态taskDelay()就绪态 - 挂起态taskSuspend()悬置态 - 就绪态semGive()/msgQSend()悬置态 - 挂起态taskSuspend()延迟态 - 就绪态expired delay延迟态 -

10、 挂起态taskSuspend()挂起态- 就绪态taskResume()/taskActivate()挂起态- 悬置态taskResume()挂起态- 延迟态taskResume()1.1.3. 任务调度策略多任务调度须采用一种调度算法来分配CPU给就绪态任务。Wind内核采用基于优先级的抢占式调度法作为它的缺省策略,同时它也提供了轮转调度法。基于优先级的抢占式调度,它具有很多优点。这种调度方法为每个任务指定不同的优先级。没有处于悬置或休眠态的最高优先级任务将一直运行下去。当更高优先级的任务由就绪态进入运行时,系统内核立即保存当前任务的上下文,切换到更高优先级的任务。Wind内核划分优先级为

11、256 级(0255)。优先级0为最高优先级,优先级255为最低。当任务被创建时,系统根据给定值分配任务优先级。然而,优先级也可以是动态的,它们能在系统运行时被用户使用系统调用taskPrioritySet()来加以改变,但不能在运行时被操作系统所改变。 轮转调度法分配给处于就绪态的每个同优先级的任务一个相同的执行时间片。时间片的长度可由系统调用KernelTimeSlice()通过输入参数值来指定。很明显,每个任务都有一运行时间计数器,任务运行时每一时间滴答加1。一个任务用完时间片之后,就进行任务切换,停止执行当前运行的任务,将它放入队列尾部,对运行时间计数器置零,并开始执行就绪队列中的下一

12、个任务。当运行任务被更高优先级的任务抢占时,此任务的运行时间计数器被保存,直到该任务下次运行时。1.1.4. 抢占禁止Wind内核可通过调用taskLock()和taskUnlock()来使调度器起作用和失效。当一个任务调用taskLock()使调度器失效,任务运行时没有基于优先级的抢占发生。然而,如果任务被阻塞或是悬置时,调度器从就绪队列中取出最高优先级的任务运行。当设置抢占禁止的任务解除阻塞,再次开始运行时,抢占又被禁止。这种抢占禁止防止任务的切换,但对中断处理不起作用。1.1.5. 异常处理程序代码和数据的出错,如非法命令、总线或地址错误、被零除等。VxWorks异常处理一般是将引起异常

13、的任务休眠,保存任务在异常出错处的状态值。内核和其它任务继续执行。用户可借助Tornado开发工具,查看当前任务状态,从而确定被休眠的任务。(tt命令)1.1.6. 任务管理VxWorks内核的任务管理提供了动态创建、删除和控制任务的功能,具体实现通过如下一些系统调用:taskSpawn()创建(产生并激活)新任务taskInit()初始化一个新任务taskActivate()激活一个已初始化的任务taskName()由任务ID号得到任务名taskNameToId()由任务名得到任务ID号taskPriorityGet()获得任务的优先级taskIsSuspended()检查任务是否被悬置ta

14、skIsReady()检查任务是否准备运行taskTcb()得到一个任务控制块的指针taskDelete()中止指定任务并自由内存(仅任务堆栈和控制块)taskSafe()保护被调用任务taskSuspend()悬置一个任务taskResume()恢复一个任务taskRestart()重启一个任务taskDelay()延迟一个任务1.3. 通信、同步和互斥机制VxWorks支持各种任务间通信机制,提供了多样的任务间通信方式,主要有如下几种: 共享内存,主要是数据的共享; 信号量,用于基本的互斥和任务同步; 消息队列和管道,单CPU的消息传送; Socket和远程过程调用,用于网络间任务消息传送; 二进制信号,用于异常处理。在多处理器之间的任务也可采用共享内存对象来实现任务间通信,只是在系统配置上有所不同.2. 共享存储区任务间通信的最简单的方法是采用共享存储区,也即相关的各个任务分享属于它们的地址空间的同一内存区域。因为所有任务都存在于单一的线性地址空间,任务间共享数据。全局变量、线性队列、环形队列、链表、指针都可被运行在不同上下文的代码所指向。3. 互斥当某一地址空间用于数据交换时,为了避免冲突,对于内存的锁定是非常重要的。两个或多个任务读写某些共享数据时

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号