VxWorks任务基础解析
基于优先级的调度
不同的应用应该有不同的优先级,这一点应该在CPU的 分配中得到体现。 抢占调度是基于任务的优先级,该优先级的选择反应了 任务的重要性。默认情况下相同优先级的任务之间不会 发生抢占 系统内核一旦发现有一个优先级比当前正在运行的任务 的优先级高的任务处于Ready状态,内核就立即保存当 前任务的上下文切换,将当前任务变为pended状态,并 切换到该高优先级任务的上下文执行。 下列情况在任何时候断(例如系统时钟中断) 上下文的切换不会延迟到下一个系统时钟中断。
VxWorks应用设计
中科信软培训中心
四、VxWorks任务基础
4.1 VxWorks的实时多任务简介
实时性使得一个控制系统能够及时响应对该系统 的控制。 如果一个系统的响应时间是可以预测的,则它 就是一个具有确定性的系统。 从一个事件发生到它被响应之间的时间称为 Latency。 确定性响应是实时系统性能关键因素。
任务名
为方便人们理解而设置 – 通常在开发过程中在Shell中使用 – 在程序中使用task id 为了方便起见,起任务名时一般以t作为开头; 由系统所起的默认的任务名为t后面带一个顺序 增加的数字 任务名不一定是唯一的(但通常都是唯一的) 相关的taskLib例程有 – taskName() 从tid得到任务名 – taskNameToId 从任务名得到tid
基于轮转的调度
任务间平等地占用CPU时间 轮转调度机制使得具有相同优先级地任务公平地分享 CPU 轮转调度使用时间片来实现相同优先级任务对CPU的公 平分配。 时间片设置 – KernelTimeSlice(ticks) (当ticks=0时,时间片设置被关 闭) 基于优先级的调度总是优先的 – 基于轮转的调度仅仅用于具有相同优先级的任务 基于优先级的重新调度可以在任何时间发生 – 基于轮转的调度要以系统的ticks为间隔
什么时候会发生上下文切换
任务在执行过程中会发生同步上下文切换 – 任务自身发生阻塞、延时、挂起等状态变化 – 当一个优先级高的任务准备运行 – 降低任务的优先级或任务退出执行(不常发生) 当有中断ISR到来时会发生异步上下文切换 – 使得一个优先级高的任务准备运行 – 挂起当前的任务或降低它的优先级(不常发生) 同步上下文切换比异步上下文切换要保存的寄 存器少,因此切换速度快
创建一个任务
int taskSpawn( name, priority, options, stackSize,entryPt, arg1,…,arg10) Name 任务名,如果是NULL系统就给一个默认的名字 Priority 任务优先级,值从0-255 Options 任务选项,如VX_UNBREAKABLE stackSize 所分配的以字节为单位的堆栈大小 entryPt 开始执行的代码的地址 Arg1…arg10 entryPt总共可以有10个参数 如果函数执行成功,则返回任务标识(id),否则返回错误号。 例如 – NewTid=taskSpawn(“tMyTask”,150,0,2000,myRoutine(), arg1,arg2,0,0,0,0,0,0,0,0)
4.5 VxWorks中的任务
一个VxWorks的任务包含 – 一个堆栈(用于存储变量和传送给程序的参 数) – 一个TCB(用于OS控制) 不要混淆可执行代码和执行它的任务 – 代码是在任务启动之前可以被下载的 – 多个任务可以执行同样的代码(如printf())
4.5.1创建一个任务
为了创建一个任务,VxWorks必须 – 再内存池中为任务分配Stack和TCB的存储空间。 taskSpawn()函数在一块连续的空间分配这些存 储空间。 – 初始化Stack(例如为任务创建一个有初始化值 的Stack) – 初始化TCB(在TCB中存储函数入口点指针,初 始化stack指针) – 把任务放到Ready队列
4.3 VxWorks的任务状态
就绪态:任务正在等待CPU资源 休眠态:任务正在等待除CPU资源外的其他资 源 延迟态:任务正在等待一定的时间延时 悬置态:任务无法执行,主要是用于调试的一种 状态。
4.4 任务状态的转换
状态转换 就绪态→悬置态 就绪态→延迟态 就绪态→休眠态 悬置态→就绪态 悬置态→休眠态 延迟态→就绪态 延迟态→休眠态 休眠态→就绪态 函数 semTake()/msgQReceive() taskDelay() taskSuspend() semGive()/msgQSend() taskSuspend() Expired delay taskSuspend() taskResume()
4.2 VxWorks的多任务内核
Wind内核是VxWorks中直接控制任务的部分。 根据VxWorks的调度机制为任务分配CPU。 使用任务控制块(TCB)来控制任务。 – 每个任务都有一个任务控制块 – TCB的数据结构定义WIND_TCB在头文件taskLib.h 中。 – 操作系统关于任务的控制信息包括,状态、任务优先级、 延时时间、断点列表、出错状态等。 – CPU的上下文信息包括,PC、SP、CPU寄存器等。
休眠态→悬置态 休眠态→延迟态
taskSuspend() taskResume()
上下文切换
每当停止执行一个任务,并有一个新的任务开始执 行,就会发生上下文的切换。 为了对一个新任务实现重新调度,内核必须做如下 工作: – 将目前正在执行的任务的上下文保存进它的TCB中; – 将要执行的任务的上下文从它的TCB中恢复。 上下文切换的速度必须非常快
任务标识(task id)
内核在任务创建时分配给任务的 对每个任务是唯一的 在任务退出后可以重用 相关的taskLib例程 – taskIdSelf() 得到调用任务的ID号 – taskIdListGet() 得到所有正在执行任务的ID号 列表 – taskIdVerify() 证实任务的ID号是否有效
VxWorks内核解读-2
VxWorks内核解读-2Wind内核是一种强实时操作系统内核,但和当前其它成熟的操作系统一样,并不是“硬实时”的操作系统。
所谓“硬实时”是指当某种事件发生时,系统必须在预定时间之内,或者说在限期之前做出反应,否则就会造成灾难性的后果。
具有这一特征的操作系统要做到对于所提交的每一项作业及其时间要求,或者做出承诺,或者立即拒绝(以使提交者可以考虑采取其他措施),对于做出的承诺则保证其实现。
提交给硬实时系统的作业也可以是不带时间要求的,但是对这些作业的承诺当然也就不包含时间的因素,那将当作后台作业来对待。
VxWorks 没有使用基于时间限(deadline)的调度算法,也就是不接受任何作业提交的时间要求。
为了提高实时性,目前采用的方法都是优先级抢占式调度,使得高优先级的任务的到优先执行。
这样,在一定计算资源前提下,通过恰当的任务划分和设定任务优先级可以满足实时性的要求。
备注:网上有人说VxWorks内核是一种硬实时内核,这是不准确的。
准确的说VxWorks系统是实时系统,但是它的实时性是在一定计算资源前提下,通过恰当的任务划分和设定任务优先级来实现的,其它系统比如uC/OS系统,FreeRTOS都是如此。
2.1 Wind内核结构为了提高系统的实时性,大多数操作系统都提供了各种机制,如可抢占的内核、中断的后半段处理等。
VxWorks 为了提高实时性,构造成了一个带有微内核的层次结构。
在计算机的早期,操作系统大部分是一个统一的实体(monolithic)。
在这样的系统中,提供不同功能的模块是独立考虑的,如处理器管理、内存管理、文件管理等,较少考虑模块间的关系。
这样的操作系统结构清晰,构造简单,但是由于操作系统本身很复杂,在这种大粒度的操作系统中难以划分可抢占部分和不可抢占部分的边界,难以避免有冗余的操作在操作系统的不可抢占部分中执行,造成系统的实时性比较差,不适合实时应用环境。
而带有微内核的层次结构的操作系统则较好的解决了这个问题。
VxWorks操作系统指南
VxWorks操作系统指南VxWorks操作系统指南目录1. VxWorks操作系统概述41.1.VxWorks 操作系统简介41.2.VxWorks操作系统内核51.3.任务管理61.4.通信、同步和互斥机制91.5.网络通信111.6.中断服务程序141.7.时间管理器142.VxWorks应用指导162.1.系统启动172.2.应用系统配置192.3.板级支持包BSP 212.4.VxWorks系统任务232.5.应用软件开发指导232.6.应用示例分析25关键词:实时操作系统任务消息 VxWorks Tornado摘要:本文档对实时操作系统作了简要介绍,并针对VxWorks系统的特点进行了具体的说明和分析,从VxWorks系统的任务管理、通信机制、系统配置、系统接口几个方面展开。
1. VxWorks操作系统概述1.1.VxWorks 操作系统简介实时多任务操作系统是能在确定的时间内执行其功能,并对外部的异步事件作出响应的计算机系统。
多任务环境允许一个实时应用作为一系列独立任务来运行,各任务有各自的线程和系统资源。
VxWorks系统提供多处理器间和任务间高效的信号灯、消息队列、管道、网络透明的套接字。
实时系统的另一关键特性是硬件中断处理。
为了获得最快速可靠的中断响应,VxWorks系统的中断服务程序ISR 有自己的上下文。
VxWorks实时操作系统由400多个相对独立的、短小精炼的目标模块组成,用户可根据需要选择适当模块来裁剪和配置系统,这有效地保证了系统的安全性和可靠性。
系统的链接器可按应用的需要自动链接一些目标模块。
这样,通过目标模块之间的按需组合,可得到许多满足功能需求的应用。
VxWorks操作系统的基本构成模块包括以下部分:高效的实时内核WindVxWOrks实时内核(Wind)主要包括基于优先级的任务调度、任务同步和通信、中断处理、定时器和内存管理。
兼容实时系统标准POSIXVxWOrks提供接口来支持实时系统标准P.1003.1b.I/O系统VxWOrks提供快速灵活的与ANSI-C相兼容的I/O系统,包括UNIX的缓冲I/O和实时系统标准POSIX的异步I/O。
vxworks课件
第一节 VxWorks操作系统的 VxWorks操作系统的 基本构成
3 网络系统
VxWorks支持两种形式的网络 VxWorks支持两种形式的网络 驱动,一种是BSD驱动支持通用的 驱动,一种是BSD驱动支持通用的 BSD4.4网络,API,结构等和大多数 BSD4.4网络,API,结构等和大多数 BSD网络的驱动类似.另一种是END BSD网络的驱动类似.另一种是END 网络驱动, VxWorks独有的, 网络驱动,是VxWorks独有的,根据 VxWorks MUX接口编程,不过END驱 MUX接口编程,不过END驱 动在底层也要转换成BSD的形式. 动在底层也要转换成BSD的形式.
第一节 VxWorks操作系统的 VxWorks操作系统的 第二节 开发工具tornado 开发工具tornado 基本构成
2 微内核wind 微内核wind
在VxWorks 下,任何子程序 都可产生具有自身的上下文和堆 栈的单独任务.其它的基本任务 控制程序可使任务悬挂,重开, 删除,延迟和改变优先级.
�
第一节 VxWorks操作系统的 VxWorks操作系统的 基本构成
1
板级支持包BSP 板级支持包BSP
所谓初始化是指从系统上电复位 开始直到wind kernel和usrRoot根任务 开始直到wind kernel和usrRoot根任务 启动这段时间系统的执行过程.驱动 程序就是一些包含I/O操作的子函数. 程序就是一些包含I/O操作的子函数. 初始化包括CPU Init, 初始化包括CPU Init,Board Init 和System Init.CPU Init初始化CPU的 Init. Init初始化CPU的 内部寄存器.Board Init初始化智能 内部寄存器.Board Init初始化智能 I/O的寄存器,将device打通.System I/O的寄存器,将device打通.System Init为系统的运行准备数据结构,进行 Init为系统的运行准备数据结构,进行
VxWorks操作系统指南
目 录632.7.应用示例分析 (61)2.5.应用软件开发指导 (61)2.4.VxWorks 系统任务 (60)2.3.板级支持包BSP (57)2.2.应用系统配置 (55)2.1.系统启动 (54)2.VxWorks 应用指导 (51)1.9.网络通信 (51)1.8.POSIX Memory-locking 接口 (50)1.7. POSIX 时钟和定时器 (49)1.6.看门狗定时器(Watchdog Timers) (46)1.5.中断服务代码 (18)1.4.任务间通信 (5)1.3.任务 (5)1.2.VxWorks 操作系统内核 (4)1.1.VxWorks 操作系统简介 (4)1.VxWorks 操作系统介绍...............................................................关键词:RTOS POSIX VxWorks Tornado摘 要:本文档对实时操作系统作了简要介绍,并详细描述了Vxworks 内核和运行环境的基本原理,并概述了系统配置、系统接口等方面的内容。
1.VxWorks 操作系统介绍1.1.VxWorks 操作系统简介现代的实时操作系统主要增加了支持多任务和任务间通信的概念。
多任务环境允许一个实时应用作为一个独立的任务创建。
在VxWorks 里,任务间通信机制依靠信号量,消息队列,管道及socket(实现网络透明传输)实现。
实时操作系统的另外一个主要功能就是硬中断处理。
为使中断得到尽快响应,VxWorks 的中断服务程序(ISRs)有自己单独的context ,它与其他任务的context 不在一起。
本文主要讨论了多任务内核,任务机制(facilities),任务间通信及中断处理机制,这些都是VxWorks 运行环境的核心内容。
VxWorks 操作系统的基本构成模块包括以下部分:Ÿ高效的实时内核WindVxWOrks 实时内核(Wind )主要包括基于优先级的任务调度、任务同步和通信、中断处理、定时器和内存管理。
基于嵌入式操作系统VxWorks的多任务并发程序设计(全)
1引言嵌入式系统定义为:嵌入到对象体系中的专用计算机系统。
“嵌入性”、“专用性”与“计算机系统”是嵌入式系统的三个基本要素,对象系统则是指嵌入式系统所嵌入的宿主系统。
目前,随着高端消费类电子产品(如PDA、手机、智能家电)的普及,嵌入式计算机系统获得了相当广泛的应用。
操作系统在嵌入式软件体系中占据着重要低位,学习和掌握相关的知识是一名嵌入式系统研发人员的必须。
1.1本文的读者对象与写作目的本文针对的读者对象为入门级的嵌入式系统软件开发人员以及其他对嵌入式操作系统感兴趣的朋友,顺利阅读本文需要读者具备的基本知识能力为:(1)熟练的C语言程序设计能力;(2)操作系统的基本知识。
如果读者具备在Windows平台下进行多线程程序设计或者其他嵌入式操作系统本台下进行多任务程序设计的经验,将对阅读本文有很大的帮助。
本文虽然以VxWorks为介绍的主体对象,但是其中所论述的概念和方法并不局限于VxWorks操作系统本身。
它们也同样适用于其它嵌入式操作系统,如WinCE、嵌入式Linux、ucos等,所谓“万变不离其宗”。
笔者力求能以通俗和形象的语言进行论述,但是由于水平有限,文中难免存在错误和纰漏,诚盼读者朋友指正。
1.2 为什么以VxWorks为写作对象之所以选择VxWorks操作系统为本文的写作对象,是因为:(1)VxWorks具备清晰的多任务并发控制及任务间通信的成熟机制;(2)VxWorks有广泛的使用基础,国内外分布着大量的VxWorks程序员;(3)VxWorks简单易学,便于我们集中目标讲解多任务控制程序本身。
1.3 什么是VxWorksVxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),它凭借着良好的可持续发展能力、高性能的内核以及友好的用户开发环境,在嵌入式实时操作系统领域占据了重要一席。
VxWorks具备高可靠性和实时性,因而被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。
第三章vxWorks操作系统基本概念(1)PPT课件
2020/8/20
11
VxWorks操作系统
Memory Management
Device Support
Scheduling & System Clock
Facilities
Synchronization & Intertask Communication
File Systems
Mutual Exclusion
✓ WindSh
交互访问
✓ CrossWind
源代码级调试器
✓ Browser
显示系统信息
✓ Project Facility 配置操作系统或应用的工程管理
✓ WindView
多任务应用软件示波器
✓ Simulator 主机端VxWorks模拟器
用Tcl自定义的工具: ✓ 增加新功能 ✓ 定制用户接口 ✓ 目标驻留工具
WTX = Wind River Tool eXchange
WDB = Wind DeBug
2020/8/20
15
Tornado和VxWorks目录描述
2020/8/20
16
Tornado和VxWorks目录描述(继续)
2020/8/20
17
Tornado
3.1 Tornado和VxWorks简介
Tornado和VxWorks描述 Tornado和VxWorks相互关系 Tornado和VxWorks目录描述
2020/8/20
4
Tornado是什么?
Tornado是开发实时嵌入式应用的集成开发环境. Tornado的主要组件: VxWorks实时操作系统运行库(RTOS) VxWorks开发工具(辅助测试和调试和计时) 网络协议栈支持
vxworks基础命令
1.与任务相关的命令sp function,[arg1],...,[arg9]-启动任务,最多接受9个参数,默认的优先级100、堆栈20000字节period n,function,[arg1],...,[arg8]-创建一个周期调用function的任务,周期为n秒,最多接受8个参数repeat m,function,[arg1],...,[arg8]-创建一个反复调用function的任务,调用次数为m,m=0时永久调用,最多也是8个参数ts tidX -挂起任务tr tidX -恢复挂起的任务td tidX -删除任务i tidX -显示任务基本信息,参数为0时显示全部任务ti tidX -显示任务详细信息,包括寄存器、堆栈等tt tidX -显示任务的函数调用关系checkStack tidX -显示任务堆栈使用的历史统计,参数为0时显示全部任务[其中tidX可以为任务ID 也可以为任务名]2、系统信息lkup ["string"] -在系统符号表中查找并列出含有"string"字符的函数及全局变量,有两个特殊参数:0,给出符号表统计;""(空字符串),列出全部符号lkAddr addr -显示addr地址附近的符号表l addr,[n] -显示addr地址开始的n条指令的反汇编,n省略时默认为10条指令h [n] -n为0时列出最近执行的shell命令,默认20条;n非0时,设定shell记录的历史命令的数目d [addr,[number],[width]]-显示addr地址开始的number个单元的内容,width定制每个单元的宽度,可以是1、2、4、8m addr,[width] -按width宽度修改addr地址的内容,width可以是1、2、4、8memShow 1 -显示系统分区上空闲和已分配空间的总数等printErrno value -打印系统定义的错误码的宏3、与网络相关的命令ifShow ["ifname"] - show info about network interfacesinetstatShow - show all Internet protocol socketstcpstatShow - show statistics for TCPudpstatShow - show statistics for UDPipstatShow - show statistics for IPicmpstatShow - show statistics for ICMParpShow - show a list of known ARP entriesmbufShow - show network stack data pool statisticsnetStackSysPoolShow - show network stack system pool statisticsrouteShow - display all IP routes (summary information)mRouteShow - display all IP routes (verbose information)routestatShow - display routing statisticsrouteAdd "destaddr","gateaddr" - add route to route tablerouteDelete "destaddr","gateaddr" - delete route from route table说明:上述大多数命令都可以在help、netHelp中查到。
VxWorks基础
VxWorks应用基础Bootrom和Boot image的区别,Boot image和VxWorks image的联系和区别bootrom 是指on-chip bootrom,在CPU芯片内部,内嵌有小的boot程序(bootloader),类似于PC机主板上的BIOS的存储区域。
和boot image不是一回事。
VxWorks文档中的bootrom区是指boot image存放的位置。
boot image的作用是把VxWorks image 加载到主板。
boot image只初始化很少的硬件系统如串口,网口等。
为加载VxWorks image做准备,当VxWorks系统下载完毕后,b oot image的作用也就完成了。
VxWorks image含有完整的VxWorks OS.是真正运行于目标板上的操作系统。
应用程序运行于VxWorks系统之上。
boot image 和VxWorks image生成在使用BSP文件上的区别在于:在启动顺序中Bootrom调用bootConfig.c,而VxWorks调用usrConfig.c.在ROM中VxWorks运行的方式(和bootrom编译到一起还是单独固化到ROM中),在ROM中的内存分配?VxWorks加载到主板运行,分不同的情况,如果VxWorks是压缩的,加载时解压到RAM的RAM_HIGH_ADRS.如果是ROM based VxWorks,VxWorks image的data段复制到RAM的LOCAL_LOW_ADRS, text部分留在ROM并在ROM中执行。
既不压缩又不ROM based的VxWorks直接copy到RAM_LOW_ADRS运行。
若在config.h中修改系统设置,如增加网卡等,是否需要重新烧bootrom?如果增加其他oem产品呢?如果主板中有Boot image存在则不需要重新烧,用FTP等download加载VxWorks 即可。
VxWorks内核及系统
VxWorks实时内核-IPC
• 管道 1. 在VxWorks中,管道是一种通过虚拟的I/O设备来实现 的消息队列通信机制。 2. 使用函数pipeDevCreate()和pipeDevDelete()来生成和 删除管道,管道一经生成后,任务之间就可以使用标 准I/O操作主要是read()和write()进行通信。 3. 管道的优点在于它是一个I/O设备,与标准的VxWorks I/O一样,可以使用select机制,而有了select机制,一 个任务很方便地使用多个异步I/O设备,如任务要处理 同时从串口、管道、socket接收到的数据,就可以使 用select。
2013年8月13日星期二
5
实时操作系统概述
•
嵌入式实时操作系统功能:
多任务和可抢占的,任务具有优先级 支持可预测的任务同步机制 支持多任务间的通信 具备消除优先级转置的机制 存储器优化管理 OS的(中断延迟、任务切换、驱动程序时延等) 行为是可知的和可预测的,这是指在全负载的情形 下,最坏反应时间可知 7. 实时时钟服务 8. 中断管理服务 1. 2. 3. 4. 5. 6.
存储变量和参数code2012年12月17日星期一14vxworks实时内核多任务调度任务的优先级优先级可以动态调整2012年12月17日星期一15vxworks实时内核多任务调度进行临界区操作的任务将被特别保护等待临界区操作完成后解阻塞进行删除操作的任务删除或终止一个设定了删除保护的任务的任务将被阻塞2012年12月17日星期一16vxworks实时内核多任务调度资源回收必须由应用程序自己来实现任务应该在退出之前进行资源回收当父任务退出时要删除子任务2012年12月17日星期一17vxworks实时内核多任务调度?vxworks中默认的调度算法是基于优先级的抢占调度相同优先级的任务可采用时间片轮转方式2012年12月17日星期一18vxworks实时内核多任务调度2012年12月17日星期一19vxworks实时内核多任务调度tftpdtask55ftp服务器tnettask50任务级的网络功能异常处理任务完成不能在中断中执行的功能内核执行的第一个任务初始化设备启动用户任务并退出2012年12月17日星期一20vxworks实时内核ipc内核提供基本任务间通信机制
VxWorks操作系统及实时多任务程序设计.
VxWorks 操作系统及实时多任务程序设计刘尉悦张万生邢涛王砚方(中国科技大学近代物理系,合肥, 230027摘要 :数字式声纳系统需要实时的显示其搜索、跟踪结果, 同时对用户命令作出及时的响应, 并实时控制前端的硬件。
本文介绍基于 VxWorks 实时操作系统和 X 窗口系统的显示及控制程序设计。
着重介绍本系统中基于 VxWorks 的实时多任务程序设计。
关键词:实时,实时操作系统, VxWorks , X-Window一. 系统概况本系统运行于 VME 总线系统 (MVME177上, 通过 VME 背板总线与各模件交换数据对各处理模件进行控制并把信号处理结果显示。
MVME177模件运行于嵌入式实时操作系统 VxWorks 下,人机交互界面基于 X 窗口系统。
二. 嵌入式实时操作系统 VxWorks 简介由于声纳系统在探测到某些目标后 (例如鱼雷要迅速作出反应, 所以要求控制及显示系统必须是实时操作系统。
实时操作系统, 要求能够随时打断正在执行的任务, 对内部和外部发生的事件在确定的时间内作出响应。
本系统采用的 VxWorks 是由美国 WindRiver 开发的一种类 UNIX 的高性能嵌入式实时操作系统。
它是目前世界上用户数量最大的实时操作系统。
具有优越的技术性能、丰富的应用软件支持、良好的技术服务和可靠的系统稳定性。
VxWorks 的主要性能特点有:1.高度可剪裁的微内核结构 VxWorks 的所需要的存储器空间大约为8KB~488KB(ROM、 620KB~29.3KB(RAM,具有极好的可伸缩性。
2.高效的多任务调度 VxWorks 支持中断驱动的优先级抢占式调度和时间片轮转调度, 并具有确定的、快速的上下文切换能力。
3.灵活的任务间通讯手段支持信号灯、消息队列、管道、信号和套接字等进程间通讯和互斥手段。
4.支持诸如 Ring buffer、 Link list 等共享内存技术。
