http://blog.chinaunix.net/uid-23741326-id-84935.html

VxWorks的任务有优先级的概念,其任务调度也是基于优先级考虑的,是抢占式的,VxWorks的任务有256个等级,0—255,数目越小表示优先级越高。高优先级的任务可以打断低优先级的任务而抢先执行,只有在高优先级的任务执行完后,低优先级的任务才可以执行。其调度算法有两种:完全抢占式的和循环分配式的。完全抢占式的是除了高优先级任务可以打断低优先级任务外,在相同优先级的任务之间,不可以相互打断,并且同优先级任务不是同时执行的,只有等该任务执行完后,与其相同优先级的任务才可以执行;循环分配式除了具有抢占功能之外,相同优先级的任务是可以同时执行的,即系统时间片是在它们之间平均分配的,这样,相同优先级的任务可以同时执行。可以调用kernelTimeSlice()函数来设定该调度方式,并且参数是相同优先级任务执行的时间片。

VxWorks中任务具有很多种状态,如下表所示:

状态

描述

READY

此任务状态在等待执行

PEND

此任务状态是由于一些资源不可用而被阻塞

DELAY

此任务状态是休眠一段时间

SUSPEND

此任务状态是挂起

BREAK

此任务状态是停止(暂停),通常是在任务中设置了断点。

各种状态的组合

详细请见原文档

为了防止任务被误删除,VxWorks还提供了taskSafe()函数和taskUnsafe()函数,调用taskSafe()的任务不能被删除,应用在其它地方调用taskDelete()函数时会出错。只有该任务在调用了taskUnsafe()后,任务才能被删除。另外,VxWorks还可以对任务的优先级动态的修改,即可以在执行过程中,调用taskPrioritySet()函数对任务的优先级进行修改。对于任务的创建,VxWorks还提供了不同的方法,用户可以调用taskSpawn()函数在创建完任务后立即执行它,或者调用taskCreate()taskActivate()函数把创建任务和执行任务分成两步来实行,即在调用taskCreate()后,任务只是被创建而没有执行,所以用户可以在需要的时候调用taskActivate()来恢复任务的执行。下面是VxWorks任务相关函数一览表:

函数名

功能

kernelTimeSlice( )

控制轮询式调度程序

taskLock( )

取消任务的再调度

taskUnlock( )

允许任务的再调度

taskSpawn( )

生成(创建和激活)一个新任务

taskCreate( )

创建一个新任务,但不激活它。

taskActivate( )

激活一个已经创建的任务

taskSuspend( )

挂起一个任务

taskResume( )

恢复挂起任务的执行

taskRestart( )

重新开始一个任务的执行(即从头执行)

taskDelay( )

延时任务,延时单位是时间片

taskIdSelf( )

得到调用任务的id(正在运行的)

taskIdVerify( )

验证一个指定任务是否存在

taskOptionsGet( )

获得用户自定义任务参数

taskOptionsSet( )

设置用户自定义任务参数

taskIdListGet( )

将所有活动状态的任务id填写到个数组中

taskInfoGet( )

得到一个任务的信息

taskPriorityGet( )

获得任务的优先级

taskPrioritySet( )

改变任务优先级

taskRegsSet( )

设置一个任务的寄存器(但是不能被当前任务使用)

taskIsSuspended( )

检查一个任务是否在悬挂状态(suspended.)

taskIsReady( )

检查一个任务是否准备运行就绪

exit( )

结束正在运行任务,释放内存*

taskDelete( )

结束制定的任务,释放内存*

taskSafe()

保护当前任务,防止被删除

taskUnsafe( )

取消taskSafe( )操作,即能够删除当前任务

nanosleep( )

延时任务,延时单位是时间片

时间片


对于任务来讲,只有相同优先级任务下的循环分配式才存在时间片的概念:时间片就是系统分配给各任务的时间,如果该时间内某任务未完成,CPU将被剥夺并分配给另外一个任务。

VxWorks多任务功能的更多相关文章

  1. VxWorks 6.9 内核编程指导之读书笔记 -- 多任务(二)

    VxWorks的系统任务 VxWorks在引导时启动的系统任务依赖于配置,有些总是运行.任务集与VxWorks的基本配置相关,很少的任务常用于可选的组件. 注意:别挂起.删除或改变任何系统任务的优先级 ...

  2. VxWorks 引导程序

    前言:vxworks 的一些文件,如 usrconfig.c 在 config,comp目录中均有出现,因编译方式而选择某一个文件,命令行方式采用 config 目录文件,tornado 图形界面配置 ...

  3. 为什么有些应用非VxWorks不可

          实时操作系统(RTOS)是专用于对时间精确度敏感的操作系统.典型的情况是,这种应用需要从传感器收集数据.做出分析并对关键性设备进行控制,例如飞机.列车.手术刀.这类控制必须精准,不容许出现 ...

  4. iOS 9之分屏多任务(Split View)

    金田(github 示例源码) 多任务(multitasking)算是iOS9中最引人瞩目的核心新特性了,之前越狱版用户就用过类似的插件,微软的 苏菲 (Windows Surface)系列也有分屏多 ...

  5. iOS 9 分屏多任务:入门(中文版)

    本文转载至 http://www.cocoachina.com/ios/20150714/12555.html 本文由钢铁侠般的卿哥(微博)翻译自苹果官方文档:Adopting Multitaskin ...

  6. BSP

    1       BSP概述 BSP即Board Support Package,板级支持包.它来源于嵌入式操作系统与硬件无关的设计思想,操作系统被设计为运行在虚拟的硬件平台上.对于具体的硬件平台,与硬 ...

  7. 锁相关知识 & mutex怎么实现的 & spinlock怎么用的 & 怎样避免死锁 & 内核同步机制 & 读写锁

    spinlock在上一篇文章有提到:http://www.cnblogs.com/charlesblc/p/6254437.html  通过锁数据总线来实现. 而看了这篇文章说明:mutex内部也用到 ...

  8. 在Xcode中使用Git进行源码版本控制

    http://www.cocoachina.com/ios/20140524/8536.html 资讯 论坛 代码 工具 招聘 CVP 外快 博客new 登录| 注册   iOS开发 Swift Ap ...

  9. 鸟哥的Linux私房菜——基础学习篇 —— 笔记2

    at 语法 == 注意,输入at之后便进入命令行模式 ------- 不管怎么样,只会执行一次. [test @test test]# at [-m] TIME (输入工作指令)[test @test ...

随机推荐

  1. Database项目中关于Procedure sp_refreshsqlmodule_internal的错误

    最近项目中发现一怪问题,使用DB项目发布数据库时,总提示 “(110,1): SQL72014: .Net SqlClient Data Provider: Msg 1222, Level 16, S ...

  2. Foundations of Qt Development 学习笔记 Part1 Tips1-50

    1. 信号函数调用的时候仅仅会发送出信号,所以不需要执行 ,所以对于信号声明就行,但是不需要进行定义. 2. 只有槽函数可以声明为public,private,或者是protected的,而信号不行. ...

  3. Activity传递参数——传递复杂数据(Bunble包)

    一.新建一个空的工程 二.在主界面中添加一个按钮 三.新建一个空的activity,并命名为TheAty 四.修改MainActivity.java中的onCreate函数 protected voi ...

  4. python-数据处理的包Numpy,scipy,pandas,matplotlib

    一,NumPy包(numeric python,数值计算) 该包主要包含了存储单一数据类型的ndarry对象的多维数组和处理数组能力的函数ufunc对象.是其它包数据类型的基础.只能处理简单的数据分析 ...

  5. sysbench安装for oracle

    RHEL7.2+ 1.依赖包安装 * autoconf * automake * cdbs * debhelper (>= 9) * docbook-xml * docbook-xsl * li ...

  6. jQuery学习_具备吸附功能的拖曳框

    在线演示:http://sandbox.runjs.cn/show/2drrwkrx 关键点:保持一个不变,鼠标拖动时与边框的距离 === 鼠标左击时与边框的距离 源码: <!DOCTYPE h ...

  7. MySQL免安装版安装配置、修改密码

    一:MySQL的下载安装 1.1 下载 我下载的是 ZIP Archive 版的,win7 64位的机器支持使用,而且相对而言,简单.干净. 首先,进入MySQL的官方网址,依次点击Downloads ...

  8. 【模板】NOIP模板汇总

    图论 数据结构 数学 其他: 洛谷模板:a,b两个字符串,求b串在a串中出现的位置 #include<iostream> #include<cstdio> #include&l ...

  9. Linux性能评测工具之一:gprof篇介绍

    转:http://blog.csdn.net/stanjiang2010/article/details/5655143 这些天自己试着对项目作一些压力测试和性能优化,也对用过的测试工具作一些总结,并 ...

  10. terraform 阿里云基本使用

    1. 预备环境 安装了terraform 的软件的操作系统(windows linux mac 均可) 具有阿里云账户的 access_key secret_key 2. 配置 // terrafor ...