zoukankan      html  css  js  c++  java
  • VxWorks多任务功能

    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将被剥夺并分配给另外一个任务。

     

  • 相关阅读:
    Linux防火墙命令
    Linux学习笔记:(三)软件包管理(更新中)
    Linux赋予root权限
    Linux学习笔记:(二)用户和组群账户管理
    Linux目录结构
    Sublime Text3中Package Control Install Package打不开问题
    Linux学习笔记:(一)常用命令大全
    SpringBoot项目中整合Mybatis框架
    IDEA快速创建springboot项目
    java.lang.NoClassDefFoundError: javax/servlet/ServletOutputStream 报错解决
  • 原文地址:https://www.cnblogs.com/xiaobiexi/p/5016964.html
Copyright © 2011-2022 走看看