【Vxworks操作系统】实时多任务介绍-NO.2

2023-05-16

目录

   实时多任务

1.1  任务生命周期管理

 1.2  任务状态控制

1.3  任务调度

1.4   用户接口

结语:


       实时操作系统是基于多任务任务间通信的概念的操作系统,多任务环境允许一个实时应用由一组各自独立的任务组成,每个任务拥有自己的执行线程和一组系统资源。

   实时多任务

        任务管理和调度是实时操作系统的核心,该模块提供任务生命周期管、控制和调度支持。
    
        任务生命周期管理包括:任务创建、任务删除等。
    
        任务状态控制包括:任务在就:绪态(Ready)、阻塞(Pend)、挂起(Suspend)、延时(Delay)四个状态间的切换,任务优先级设置与获取,任务调度锁定。
    
       任务调度,提供基于优先级抢占式任务调度,在同优先级的任务提供可选的Round-Robin时间片轮转调度。

1.1  任务生命周期管理

   1、任务创建和删除。
    任务创建使用taskSpawn()函数,
    函数原型:  
    int taskSpawn()
    {
        char* name,
        int periority,
        int options,
        int stackSize,
        FUNCPTR entryPt;
        int arg1,
        int arg2,
        int arg3,
        int arg4,
        int arg5,
        int arg6,
        int arg7,
        int arg8,
        int arg9,
        int arg10
        }
    
       该函数共有15参数,分别表示:任务名、任务优先级、任务选项字、任务堆栈大小、任务入口函数、以及任务入口函数的10个可选参数;
    
      任务创建和激活成功后返回任务ID号,失败时返回ERROR;
    
      针对参数有一下要求:
    
    1)任务名:便于记忆,最好是以t或者u开始的一个字符串;
    
    2)任务优先级:0~255之间,最高优先级是0,最低优先级是255,建议创建任务优先级在150之后;
    
    3)任务选项字:当任务有浮点数操作计算或者调用浮点计算函数时,任务选项字是VX_FP_TASK;当任务没有浮点数操作计算,也不调用浮点计算函数时,任务选项字是0;
    
    4)任务堆栈:创建任务时分配的内存,包含了任务控制块(TCB)和任务名,剩余内存是任务堆栈,默认使用0XEE填充,这种初始化填充主要用于任务堆栈检查函数checkStack();
    
    5)任务入口函数:任务创建和激活成功后,系统调用这个函数,最多有10个可选参数,任务入口函数在任务堆栈空间运行,因此必须设置足够大的任务堆栈,并且任务入口函数及其调用函数中不允许使用大量占用空间的数组,结构体变量等。
    
     2、任务删除函数;
    
    taskDelete()
    
    函数原型:
    
    STATUS taskDelete
    {
        int tid;
    }
    taskDelete()只有一个参数,是任务名称,任务删除成功后返回OK,失败时返回ERROR。

 1.2  任务状态控制

      任务状态控制包括:就绪(Ready)、阻塞(Pend)、挂起(Suspend)、延迟(Delay)
    
       内核记录系统中每个任务的当前状态,应用程序的内核函数调用可以使得每个任务从一个状态转换为另一种状态,当任务被创建时,任务进入挂起状态,激活很快,任务可以先创建后激活,还有一种方式是直接使用taskSpawn例程,可以在创建任务的同时激活任务。且任务可以在任何状态下被和删除。
    
    
    一、任务状态情况:
    
    1)READY:任务处于等待获取CPU并执行的状态;
    
    2)PEND:任务等待某种资源而处于阻塞状态;
    
    3)DELAY:任务处于等待一个时间段的状态;
    
    4)SUSPEND:任务处于一个不可执行的状态,该状态主要用于调试,suspend状态除了禁止任务执行外,并不禁止任务的状态迁移,因此,pended-suspend状态的任务
    
    可以被unlock,而处于delayded-suspend状态的任务可以被awake;
    
    5) DELAY + S:任务处于delay-suspend的状态
    
    6)PEND + S:任务处于pended-suspend的状态
    
    7)PEND + T:任务处于pend状态,但有timeout值,一旦超时,任务的pend状态将被清除;
    
    8)PEND + S + T:任务处于pend-suspend状态,但有timeout值,一旦超时,任务的pend状态将被清除;
    
    9)stste + 1:任务处于state状态(stste表示上述状态之一),且有继承优先级1;
    
    引起任务迁移的函数如下:
    
    ready-->pended 【semTake()/msgQReceive】
    
    ready-->delayed 【taskDelay】
    
    ready-->suspend【taskSuspend】
    
    pended-->ready 【semGive()/msgQSend】
    
    pended-->suspend 【taskSuspend】
    
    delayed-->ready 【expired delay 延时耗尽】
    
    delayed-->suspend 【taskSuspend】
    
    suspend-->ready 【taskResume()/taskActivate()】
    
    suspended-->pended 【taskResume】
    
    suspended-->delayed 【taskResume】
    
    二、任务优先级设置
    
    优先级设置函数原型:taskPriorityGet()
    
    STATUS taskPrioritySet()
    {
        int tid;
        int newpPriority
    }
    函数taskPriority()有两个参数,第一个参数是任务的id号,第二个参数是新优先级,优先级范围从0~255,优先级设置成功返回OK,当任务ID非法时返回ERROER;
    
    三、任务优先级获取
    
    任务优先级获取函数原型:
    
    taskPriorityGet()
    
    STATUS taskPriorityGet()
    {
        int tid,
        int *pPriority
    }
    
       函数taskPriorityGet()有两个参数,第一个参数是任务ID号,第二个参数是整型指针,表示优先级地址。任务优先级获取任务时返回OK,当任务非法时返回ERROR。

1.3  任务调度

       多任务需要一个调度算法在就绪任务之间分配CPU,VxWorks的默认调度算法是基于优先级的可抢占调度,但是用户也可以在相同优先级任务之家选择Round-Robin调度算法;
    
    1)可抢占的优先级调度
    
       使用可抢占优先级调度时,每个任务都有自己的优先级,内核保证将CPU分配给优先级最高的任务并运行该任务,这个调度是可抢占的,如果有一个比当前任务优先级更高的任务就绪时,内核马上保存当前任务的上下文,切换到高优先级任。
    
    
    2)Round-Robin调度算法;
    
       可抢占优先级调度可以由Round-Robin调度算法扩充,Round-Robin调度算法尝试在所有相同优先级就绪任务之间平等共享CPU,Round-Robin调度使用时间片成组地在相同优先级任务之间公平分配CPU,每个组中的每个任务执行指定的时间间隔或者时间片,然后在另一个任务执行相同的时间,循环往复。Round-Robin调度由函数kernelTimeSize()启动,将时间片或者时间间隔作为参数。这个时间间隔是每个任务在放弃CPU给相同优先级之间执行的所有时间。如果一个任务在它的时间片被高优先级任务抢占,它的运行计数器被保存。当任务重新执行时就恢复;
    
    3)抢占锁
    
      内核可以通过调用taskLock()和taskUnlock()来使调度器生效和失效。当一个任务调taskLock()使调度器失效,任务运行时没有基于优先级的抢占发生,然而,如果任务被阻塞或者被悬置时,调度器就从就绪队列中去取出最高优先级的任务运行,当设置禁止抢占的任务接触阻塞,再次开始运行时,抢占又被禁止。抢占锁阻止了任务上下文切换但并不封锁中断处理。抢占所可以用于完成互斥,但是为了保证系统响应应该保持抢占锁定的时间最短。

1.4   用户接口


     1、任务调度控制函数:
        
            1)kernelTimeSlice():控制Round-Robin调度;
        
            2)taskPerioritySet():改变任务优先级;
        
            3)taskLock():取消任务调度;
        
            4)taskUnlock():启动任务调度;
        
        2、任务创建函数:
      
 
            1)taskSpawn():创建和激活一个新任务;
            
            2)taskInit():初始化一个新任务;
            
            3)taskActivate():激活一个已经初始化的任务;
            
        3、任务名称和ID函数:
        
            1)taskName():得到和任务ID相关的任务名称;
            
            2)taskNameTold():得到和任务名称相关的任务ID;
            
            3)taskIDSelf():得到调用任务的ID;
            
            4)taskIdVerify():检验特定任务的存在性;
            
        4、任务选项函数:
        
            1)taskOptionsGet():检验任务选项;
            
            2)taskOptionsSet():设置任务选项;
            
        5、任务信息函数:
        
            1)taskIdListGet():将所有激活任务的id填充一个数组;
            
            2)taskInfoGet():得到一个任务的信息;
            
            3)taskPriorityGet():检查任务的优先级;
            
            4)taskRegsGet():检查任务的寄存器;
            
            5)taskRegsSet():设置任务的寄存器;
            
            6)taskIsSuspended():检查任务是否挂起;
            
            7)taskIsReady():检查任务是否就绪;
            
            8)taskTcb():得到任务控制块指针;
            
        6、任务删除函数:
        
            1)exit():终止调用任务,释放内存空间(只是任务堆栈和任务控制块);
            
            2)taskDelete():终止指定的任务,释放内存空间(只是任务堆栈和任务控制块);
            
            3)taskSafe():从删除中保护调用任务;
            
            4)taskUnsafe():撤销taskSafe()(使得调用任务对于删除可用)
            
        7、任务控制函数
        
            1)taskSuspend():挂起一个任务u;
            
            2)taskResume():重新激活一个任务;
            
            3)taskRestart():重启一个任务;
            
            4)taskDelay():延时一个任务,延时单位是滴答;
            
            5)nanosleep():延时一个任务,延时单位是ns;
            
        8、任务扩展函数
        
            1)taskCreatHookAdd():添加一个函数,在任务创建时调用;
            
            2)taskCreatHookDelete():删除一个原先添加的任务创建函数;
            
            3)taskSwitchHookAdd():添加一个函数,在任务切换时调用;
            
            4)taskSwitchHookDelete():删除一个原先添加的任务切换函数;
            
            5)taskDeleteHookAdd():添加一个函数,在任务删除时调用;
            
            6)taskDeleteHookDelete():删除一个原来添加的任务删除函数;
            
            

结语:

       以上就是对VxWorks实时多任务的介绍啦,接下来的篇章我将展开来讲一讲VxWorks任务间间通信的结构和使用方式,希望与各位读者朋友一起探讨进步,我是指尖比比,我们下个好文再见!!!
       
    
    
    
    
    
    
    
    
    
    

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Vxworks操作系统】实时多任务介绍-NO.2 的相关文章

  • springboot错误: 找不到或无法加载主类

    IDEA如果遇到创建完springboot后 要简单运行 xff0c 却出现找不到或者无法加载主类的这种情况 请再maven那边先clean下 gt 然后再打包package 这样再重新运行就好啦 记得是在Maven gt Lifecycl
  • Linux驱动简介和开发流程--Linux驱动学习(1)

    Linux驱动简介和开发流程 学习笔记 Linux 驱动的分类 Linux三大设备驱动 1 字符设备驱动 IO的传输过程是以字符为单位的 xff0c 没有缓冲 比如I2C SPI都是字符设备 2 块设备驱动 IO传输过程中是以块为单位的 跟
  • 性能优化与内存优化

    性能优化 主要以这四个方向进行优化 xff1a 稳定流畅耗损apk 瘦身 稳定 避免内存溢出异常捕获反馈机制 流畅 卡顿的原因 xff1a 布局复杂动画过多View 的过度绘制UI 耗时操作频繁 GC 耗损 减少没必要的网络访问或合并相关网
  • java 实现快速排序

    1 介绍 快速排序是对冒泡排序的一种改进 它的基本思想是 xff1a 通过一趟排序将要排序的数据分割成独立的两部分 xff0c 其中一 部分的所有数据都比另外一部分的所有数据都要小 xff0c 然后再按此方法对这两部分数据分别进行快速排序
  • 计算机网络——FTP网络服务器

    目录 一 实验目的与要求 二 实验内容与方法 三 实验步骤与过程 一 实验目的与要求 学习安装 使用FTP服务器软件和FTP客户端软件 xff0c 掌握基本的FTP传输数据的控制方式 xff0c 能对FTP协议数据包抓取并进行分析 实验环境
  • 树莓派踩坑之VNC Timed out waiting for a response from the computer

    笔者纯小白入坑树莓派 xff0c 今天在通过VNC viewer 对树莓派进行远程操作时遇到了超时报错 xff0c 报错如下 xff1a VNC Timed out waiting for a response from the compu
  • 系统System.img解包和重新打包过程

    系统System img解包和重新打包过程 把system img转换成ext4格式 simg2img system img system ext4 img 挂载ext4到systemMount目录进行修改 sudo mount syste
  • 腾讯地图 API 调用入门

    本文仅为腾讯地图 API 调用入门 xff0c 如需进阶学习 xff0c 请在腾讯位置服务网站上进行学习 登陆网址 https lbs qq com 点击右上角的登陆按钮 xff0c 需要进行注册按照流程进行就好 完成之后 xff0c 选择
  • QT安装过程中遇到的问题

    问题描述 xff1a 安装了qt安装包后sudo qt opensource linux x64 5 14 2 run显示找不到命令 解决办法 xff1a 把这个文件变成可执行文件 chmod 43 x qt opensource linu
  • 解决Idea升级安装过程中出现Missing essential plugin: com.intellij (platform prefix: null) 的问题

    在进行idea从2020 2升级到2022 1安装成功启动的时候会报这个错 xff1a Missing essential plugin com intellij platform prefix null Please reinstall
  • 吐血整理!SpringMVC常用简单注解(超详细)

    注解解析直达目录 1 用于接收前端给后端的json数据 64 RequestBody 1 1需求分析1 2具体情境1 3最佳实操1 4运行结果以及分析 2 获取restful风格url中的参数值 64 PathVariable 2 1需求分
  • Expression #1 of ORDER BY clause is not in SELECT list, references column ‘d.dept_no‘ which is not i

    问题 xff1a 34 Expression 1 of ORDER BY clause is not in SELECT list references column 39 d dept no 39 which is not in SELE
  • Ubuntu 安装和配置 git

    安装 sudo apt get update y sudo apt get upgrade y sudo apt install git 检查 git version 配置 git config global user name 34 用户
  • Centos检查进程是否关闭的shell脚本

    在运维工作当中会遇到程序打不开或者不工作的类似情况 xff0c 有部分原因是因为维持这个服务的某个进程关闭了 xff0c 这时候需要检查哪些进程是否挂掉了 xff0c 由于进程较多一个个来检查的话效率太慢 在这里给伙伴们安利一个简单实用的检
  • 基于SpringBoot和vue的移动端音乐网站的设计与实现

    1 xff0c 项目介绍 基于SpringBoot和vue的移动端音乐网站拥有两种角色 xff0c 分别为管理员和用户 用户 xff1a 歌单分类 xff1b 歌手分类 xff1b 仿网易云音乐播放 xff1b 音乐收藏 xff1b 音乐评
  • 前端-01Html5基本知识

    1 基本 1 1 第一个前端程序 内容 lt html gt lt head gt lt title gt 我的网页 lt title gt lt head gt lt body gt Hello 我的第一个网页 lt body gt lt
  • 使用maven来进行JavaSE增删改查

    首先得搞清楚maven是什么 xff1f Maven是一款服务于Java平台的自动化构建工具 Maven 作为 Java 项目管理工具 xff0c 可以用作包管理 xff0c 可以支持整个项目的开发 打包 测试及部署等一系列行为 maven
  • 银河麒麟桌面操作系统V10上安装的docker常规使用及注意事项

    前言 本文介绍银河麒麟桌面系统V10上docker的常规使用及注意事项 一 docker信息 银河麒麟桌面系统V10预装的docker xff0c 且开机自动启动了docker服务 查看服务状态 systemctl status docke
  • 背包九讲PDF

    本资料仅限个人学习交流使用 xff0c 不得用于商业用途 背包九讲PDF xff1a https pan baidu com s 17rTxMwCo9iSTOW77yucdXQ 提取码 xff1a xbqa 转载于 https www cn
  • electron在Windows、Linux和KYLIN操作系统下的不同表现

    一 electron简介 Electron 是一个由 Github 开发 用 HTML xff0c CSS 和 JavaScript 来构建跨平台桌面应用程序的框架 xff0c 然后这些应用程序可以打包在macOS Windows和Linu

随机推荐

  • vscode 终端美化

    1 进入网站 Base16 Terminal Colors for Visual Studio Code 2 选择自己喜欢的主题 点击Copy to clipboard 3 打开vscode 设置 输入setting 在 settings
  • kali美化与配置

    kali linux简单美化 前言 xff1a kali linux是一个神奇的系统 xff0c 里面含有大量的工具 xff08 虽然python很容易就可以做出来 xff09 xff0c 但是像msf这样的大作还是很有参考价值的 好不容易
  • ubuntu开机进入循环登录状态的解决方案

    ubuntu进入循环登陆的解决方案 1 出现问题的原因2 解决问题的方法2 1 登陆进入CLI2 2 检查 etc environment环境变量 1 出现问题的原因 我出现的这个问题的原因是由于修改系统的环境变量 etc profile
  • Tomcat 7.X安装教程(简单易懂)

    Tomcat 7 X安装教程 简单易懂 步骤1 下载Tomcat7 x版本 官网7 x下载地址 https tomcat apache org download 70 cgi https aoian lanzous com iCWyymcn
  • 社区医疗管理系统(JDBC+eclipse)

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 项目预览1 登陆界面2 首页3 修改密码和查看个人信息4 用户管理5 居民信息 二 导入步骤1 下载文件2 数据库导入3
  • linux shell 常用命令

    linux shell 终端操作命令 shutdown 默认1分钟内关机 43 n表示n分钟后关机 输入后可以打shutdown c 进行取消 shutdown h now表示立即关机sudo 在命令前书写 xff0c 表示已管理员的权限运
  • Shell脚本——kafka集群启停

    部署kafka集群的服务器名称为 xff1a node101 node102 node103 批量启动 停止zookeeper xff0c 查看zookeeper开启状态 在 opt module zookeeper bin 目录中 xff
  • Shell脚本——批量关闭服务器

    服务器名称为 xff1a node101 node105 node110 node113 bin bash array 61 102 103 104 105 110 113 101 xff09 for i 61 0 i lt array i
  • 设置文件夹共享

    本文使用共享文件夹名称为 xff1a test 1 右键文件夹 xff0c 点击 属性 xff0c 菜单栏选择 共享 xff0c 点击下面的 共享 S 按钮 2 选择要共享的用户 xff08 此处选择 Everyone xff0c 可以根据
  • Ubuntu16.04的图形化界面无法启动问题

    昨晚在 Ubuntu 下试图安装笔记本触控板的驱动的时候 xff0c 突然 Ubuntu 的图形化界面不见了 xff0c 尝试了 Ctrl 43 Alt 43 F1 F2 F3 无果 xff0c 又在一些博客的指导下尝试在命令行使用 sta
  • Shell脚本——设置ssh免密

    功能 xff1a 实现多台linux主机之间root用户的免密设置 主机名 xff1a node101 node106 在node101上切换至root用户 xff0c 编写以下脚本内容 xff1a bin bash 使用root用户 在n
  • 解析ET6接入ILRuntime实现热更

    1 介绍 ILRuntime项目为基于C 的平台 xff08 例如Unity xff09 提供了一个纯C 实现 xff0c 快速 方便且可靠的IL运行时 xff0c 使得能够在不支持JIT的硬件环境 xff08 如iOS xff09 能够实
  • Python 实现用网页展示多个结果表数据

    Python 实现用网页展示多个表格的数据 前言 一 效果图 二 代码 1 引入库 2 函数定义 3 主程序 前言 实现方法是利用pandas to html 与表格展示的美化相结合 使数据展示更美观 一 效果图 示例 二 代码 本文将使用
  • error while loading shared libraries

    问题描述 我在调试配置一个Linux计算环境的程序时候 xff0c 安装配置好相关的库 xff0c 但是在执行运行程序命令时候报错如下 xff1a error span class token keyword while span load
  • 要求在数组中间删除一个数字

    span class token comment 要求在数组中间删除一个数字 span span class token keyword var span arr span class token operator 61 span span
  • Ubuntu常见问题及解决办法

    在刚开始使用Ubuntu系统时 xff0c 总会遇到各种各样的小问题 xff0c 这里整理了一些遇到的问题及解决办法 xff0c 不断更新中 xff01 xff01 xff01 目录 一 创建文件夹权限不够 1 1 问题描述 1 2 解决办
  • 计算机网络考试题库

    第1章 计算机网络概论 1 xff0e 在20世纪50年代 xff0c 和 xff08 xff09 技术的互相结合 xff0c 为计算机网络的产生奠定了理论基础 2 xff0e 从传输范围的角度来划分计算机网络 xff0c 计算机网络可以分
  • Spring,搭建Spring环境

    控制反转 xff1a 控制了对象的创建 xff0c 反转 xff1a 反转的是获取对象的方式 xff0c 从自己创建对象变为由Spring工厂推送 1 搭建Spring环境 xff0c 导入依赖 spring aop xff1a 开发AOP
  • 【Vxworks操作系统】系统介绍与系统组成-NO.1

    目录 1 VxWorks系统介绍 2 VxWorks特点 3 vxWorks操作系统的组成 1 xff09 实时操作系统核心Wind 2 xff09 I O系统 3 xff09 文件系统 4 xff09 板级支持包 xff08 BSP xf
  • 【Vxworks操作系统】实时多任务介绍-NO.2

    目录 实时多任务 1 1 任务生命周期管理 1 2 任务状态控制 1 3 任务调度 1 4 用户接口 结语 xff1a 实时操作系统是基于多任务和任务间通信的概念的操作系统 xff0c 多任务环境允许一个实时应用由一组各自独立的任务组成 x