教材:嵌入式系统及应用,罗蕾、李允、陈丽蓉等,电子工业出版社

  • 任务管理与调度

    • 任务管理

      • 任务状态与变迁
      • 任务控制块
      • 任务切换
        • 任务切换基本步骤
        • 任务切换的时机
      • 任务队列
        • 就绪队列
        • 等待队列
      • 任务管理机制

任务管理与调度

任务管理

任务管理是实时内核的主要工作,完成任务创建、任务删除、任务调度、改变任务优先级等工作

任务状态与变迁

  1. 等待(waiting):任务在等待某个事件的发生
  2. 就绪(ready): 任务等待获得处理器资源
  3. 执行(running):任务获得处理器资源,所包含的代码内容正在被执行

  • 任务会在不同的状态之间进行转换,即任务状态的变迁

  • 调度程序本身也需要占用一定的处理时间

任务控制块

  • 任务管理是通过对任务控制块(Task Control Block,TCB)的操作来实现的

  • 任务控制块是包含了任务执行过程中所需要的所有信息的数据结构

  • 任务控制块大都包括这些信息:任务的名字、任务执行的起始地址、任务的优先级、任务的状态、任务的硬件上下文(堆栈指针、PC和寄存器等)、任务的队列指针等内容

  • 为节约内存,任务数量通常需要进行预先配置

  • 按照配置的任务数量初始化任务控制块,形成一个空闲任务控制块链

  • 在任务创建时,实时内核从空闲任务控制块链中为任务分配一个任务控制块

  • 对任务的操作,都是基于对应的任务控制块来进行的

任务切换

  • 任务切换是保存当前任务的上下文,并恢复需要执行的任务的上下文的过程

  • 当发生任务切换时

    • 当前正在运行的任务的上下文就需要通过该任务的任务控制块保存起来
    • 把需要投入运行的任务的上下文从对应的任务控制块中恢复出来
  • 任务切换将导致任务状态发生变化

任务切换基本步骤

  1. 保存任务上下文环境
  2. 更新当前运行任务的控制块内容,将其状态改为就绪或等待状态
  3. 将任务控制块移到相应队列(就绪队列或等待队列)
  4. 选择另一个任务进行执行(调度)
  5. 改变需投入运行任务的控制块内容,将其状态变为运行状态
  6. 恢复需投入运行任务的上下文环境

任务切换的时机

  1. 中断、自陷
  2. 运行任务因缺乏资源而被阻塞
  3. 时间片轮转调度时
  4. 高优先级任务处于就绪时

任务队列

  • 任务队列通过任务控制块实现对系统中所有任务的管理

  • 队列由任务控制块构成

就绪队列

在基于优先级的调度处理中,要获得当前具有最高优先级的就绪任务

  • 方式一:任务就绪时,把就绪任务的任务控制块放在就绪队列的末尾

    • 调度程序需要从就绪队列的头部到尾部进行一次遍历,才能获得就绪队列中具有最高优先级的任务
  • 方式二:就绪队列按照优先级从高到低的顺序排列
    • 新的就绪任务到达时,需要插入到就绪队列的合适位置,确保就绪队列保持优先级从高到低排列的顺序性
  • 在这两种处理方式中,所花费的时间与任务数量有密切的关系,具有不确定性

  • 为提高实时内核的确定性,可采用一种被称为优先级位图的就绪任务处理算法

等待队列

  • 单等待队列

    • 资源对应的事件发生时,实时内核需要扫描整个等待队列,搜索等待该资源的任务,并按照一定的策略选取任务,把任务的任务控制块放置到就绪队列
    • 如果系统的资源和任务比较多,搜索等待该资源的任务所需要的时间就比较长,会影响整个系统的实时性
  • 多等待队列
    • 资源对应的事件发生时,能够在较短的时间内确立等待该资源的任务等待队列
  • 单就绪队列和单等待队列

  • 单就绪队列和多等待队列

任务管理机制

  • 任务管理用来实现对任务状态的直接控制和访问

  • 内核的任务管理是通过系统调用来体现,主要包括任务创建、任务删除、任务挂起、任务唤醒、设置任务属性等内容

  • 创建任务的过程即为分配任务控制块的过程
    • 在创建任务时,通常需要确定任务的名字和任务的优先级等内容,确立任务所能使用的堆栈区域
    • 任务创建成功后,通常会为用户返回一个标识该任务的ID,以实现对任务的引用管理
  • 删除任务把任务从系统中去掉,释放对应的任务控制块

  • 挂起/唤醒任务把任务变为等待状态,可通过唤醒任务操作把任务转换为就绪状态

  • 设置任务属性可以用来设置任务的抢占、时间片等特性,以确定是否允许任务在执行过程中被抢占或是对同优先级任务采用时间片轮转方式运行等

  • 改变任务优先级用来根据需要改变任务的当前优先级

  • 获取任务信息获得任务的当前优先级、任务的属性、任务的名字、任务的上下文、任务的状态等内容,便于用户进行决策

嵌入式系统 - 任务管理相关推荐

  1. 【转载】学习嵌入式系统需要具备的条件、方法及步骤

    事先说明,我并不是对嵌入式有多大的兴趣,但我非常希望自己能一直向底层前进,不停地去探究最底层的奥秘. 查阅了很多资料,似乎嵌入式最附合自己对底层的探求,或许它是,或许不是,但对于现在的我而言最重要的是 ...

  2. 学习嵌入式系统需要具备的条件、方法及步骤

    2019独角兽企业重金招聘Python工程师标准>>> 1.将C和C++学好学精(语言层次): 2.将数据结构.算法.操作系统学扎实(内功层次): 3.爬山成功后,深入学习.理解.运 ...

  3. 【复习资料】单片机与嵌入式系统原理及应用

    嵌入式系统的概念 第一种定义:嵌入式系统是以应用为中心.计算机技术为基础,软硬件可裁剪,适应应用系统对功能.可靠性.成本.体积.功耗严格要求的专用计算机系统. 第二种定义:把基于处理器(通用处理器和嵌 ...

  4. 嵌入式系统之操作系统篇

    1 .嵌入式软件基础 (1)嵌入式软件的特点: A.规模较小. B.开发难度大. C.实时性和可靠性要求高. D.要求固化存储. (2)嵌入式软件分类: A. 系统软件:控制和管理嵌入式系统资源,如嵌 ...

  5. 计算机三级嵌入式系统易错题总结

    1.IP是中文 知识产权的英文缩写 2.有线电视的视频编码:MPEG-2,互联网视频编码:MPEG-4 AVC 3.ARM处理器异常中断处理中用于软中断的指令助记符是:SWI,用于断点中断指令助记符是 ...

  6. 计算机三级之嵌入式系统学习笔记6

    嵌入式系统的软件结构 简单的轮询结构 应用程序重复循环检查每个外部输入条件,一旦有需要处理的任务,则进行相应的处理 带中断的轮询结构(中断驱动结构或前后台结构) 当有外部事件(例如温度传感器报警)发生 ...

  7. 嵌入式系统开发学习步骤(Linux高级编程学习顺序)

    2019独角兽企业重金招聘Python工程师标准>>> 嵌入式系统开发学习步骤(Linux高级编程学习顺序) 1.Linux 基础 安装Linux操作系统 Linux文件系统 Lin ...

  8. 嵌入式系统之ucLinux与uc/os-II的比较

    ucLinux VS uc/os ucLinux 编译后的可执行文件可以控制在几百K量级 uClinux的内核可以在Flash上直接运行:就是把uClinux的内核的可执行映象烧写到flash上,系统 ...

  9. 时间触发嵌入式系统设计模式 读书笔记

    1 下载地址: https://download.csdn.net/download/longzitailang8/10496129 本书前所未有地提出一整套软件模式,为开发嵌入式软件系统提供帮助.书 ...

  10. 如何区分嵌入式系统和嵌入式操作系统

    一 什么是嵌入式系统  嵌入式系统一般指非pc系统,有计算机功能但又不称之为计算机的设备或器材.它是以应用为中 心,软硬件可裁减的,适应应用系统对功能.可靠性.成本.体积.功耗等综合性严格要求的专用计 ...

最新文章

  1. 自动驾驶系统关系与自动泊车原理
  2. Debussy的安装
  3. jenkins需安装插件总结
  4. java等待欢迎界面_android welcome欢迎界面3秒后自动跳转
  5. react服务端/客户端,同构代码心得
  6. mysql 4.0.21 下载_W2K下安装 MYSQL 4.0.21 手记
  7. springmvc登路示例(注解)
  8. word中怎样单独删除某一页的页码
  9. 二进制码和格雷码转换问题
  10. 木马万能查杀清除方法,木马专杀
  11. python查火车票_Python实现12306火车票查询系统
  12. pycharm提示 进程已结束,退出代码 -1073740791 (0xC0000409)
  13. 10.23 每日打卡
  14. 安装Docker所遇到的问题
  15. 爬取前程无忧数据,并存入数据库
  16. 2021年上海值得去的66家规模互联网大厂公司全名简称
  17. [git]Windows环境下 git Github 快速入门
  18. echarts 球形水波_ECharts 水球图教程
  19. 【可解释机器学习】Shapley Values and SHAP (SHapley Additive exPlanations)
  20. python 协程详解教程

热门文章

  1. W3C(万维网联盟)
  2. 红外编解码模块YS-NEC使用
  3. 参照物中找趋势(大道至简之十七)
  4. Echarts图的图例为自定义图片
  5. snapchat_如何查看谁查看了Snapchat故事并对其进行了截图
  6. 华为freelance耳机充不进电修理
  7. Qt获取windows文档、下载、图片等目录路径
  8. php 双引号 转义字符,php中的单引号、双引号和转义字符
  9. 【LeetCode】1056. Confusing Number 解题报告(C++)
  10. linux wipe命令,如何使用wipefs命令擦除磁盘上的签名