• 任务管理与调度

    • 任务管理

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

任务管理与调度

任务管理

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

任务状态与变迁

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

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

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

任务控制块

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

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

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

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

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

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

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

任务切换

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

  • 当发生任务切换时

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

任务切换基本步骤

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

任务切换的时机

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

任务队列

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

  • 队列由任务控制块构成

就绪队列

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

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

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

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

等待队列

  • 单等待队列

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

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

任务管理机制

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

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

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

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

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

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

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

嵌入式设计---(2)任务管理与调度相关推荐

  1. 嵌入式设计与开发项目-DS18B20温度传感器程序设计

    嵌入式设计与开发项目-DS18B20温度传感器程序设计 一.实现的功能 二.根据功能实现代码 1.主文件main.c 2.DS18B20的头文件"ds18b20.h" 3.DS18 ...

  2. 赛灵思 Xilinx Versal 自适应计算加速平台嵌入式设计教程

    嵌入式设计教程 教程 描述 Versal 自适应计算加速平台 (UG1305) 本教程旨在提供有关将赛灵思 Vivado® Design Suite 流程应用于 Versal™ VMK180/VCK1 ...

  3. 蓝桥杯嵌入式设计与开发历届客观题答案

    该页面由pdf转换而来,阅读效果不佳,你可以在这里下载pdf原件:https://download.csdn.net/download/dvs_dn/85085622 你也可以在百度文库免费下载该文档 ...

  4. 嵌入式设计,硬件和软件哪个重要?

    我国拥有世界上最大的消费电子产品市场.随着经济水平的提高和消费结构的改变,人们对消费电子产品的要求越来越高,如产品的灵活性.可控性.耐用性.高性价比等,这些都可以通过合理.有效的嵌入式系统设计和优化来 ...

  5. 2.25嵌入式设计(总结)

    于2020年2月25日,我第一次接触了嵌入式设计的学习.在老师的讲解下了解到了嵌入式设计的前景非常美好,充分吸引了我对嵌入式设计的学习兴趣. 首先要说一下什么是嵌入式技术.嵌入式技术是以应用为中心,以 ...

  6. FPGA Vs 单片机 -- 嵌入式设计的另一种方法

    大多数工程师在嵌入式系统中使用微控制器开始他们的旅程.有了微控制器,人们可以在一个集成电路上得到一个完整的微型计算系统.CPU,RAM,ROM 和输入/输出外围设备都在一个单拇指大小的 SoC 上.这 ...

  7. 嵌入式设计与开发项目-ADC键盘扫描程序设计

    嵌入式设计与开发项目-ADC键盘扫描程序设计 一.实现的功能 二.根据功能实现代码 1.主文件main.c 2.ADC按键程序的头文件"adc.h" 3.ADC按键程序的源文件&q ...

  8. 嵌入式设计与开发项目-DHT11温湿度传感器程序设计

    嵌入式设计与开发项目-DHT11温湿度传感器程序设计 一.实现的功能 二.根据功能实现代码 1.主文件main.c 2.DHT11温湿度的头文件"dht11.h" 3.DHT11温 ...

  9. Atmel跑Linux的arm芯片,Atmel针对Linux的低成本嵌入式设计推出新

    Atmel针对Linux的低成本嵌入式设计推出新 来源:dengzhiyu 作者:华仔 浏览:957 时间:2016-08-10 14:18 标签: 摘要: AtmelCorporation日前宣布推 ...

最新文章

  1. Clumpify:能使 Fastq 压缩文件再缩小 30% 并加速后续分析流程
  2. 如何实现容器透明,内容不透明?
  3. bootstrap table php,bootstrap table Tooltip
  4. simplexml php,php的simplexml
  5. Nginx使用Expires增加浏览器缓存加速(转)
  6. run在java_Java语言start和run方法的区别
  7. [html] 怎样在页面上实现一个圆形的可点击区域?
  8. 解不等式之代数和不等式
  9. redis实现轮询算法_【07期】Redis中是如何实现分布式锁的?
  10. java php html,java和html的区别是什么
  11. 机器学习数据预处理代码汇总(最新更新20年3月1日)
  12. Jmeter脚本录制和压测
  13. 旧版创维电视怎么投屏?不用数据线就能投屏的方法
  14. Ubuntu(Linux) 磁盘分区方案
  15. Java 计算月份天数
  16. Salient Object Detection Driven by Fixation Prediction 论文解读
  17. Python第三课小节
  18. 转载:一个程序员的顿悟
  19. html 获取下一个兄弟节点,JS/JQuery获取当前元素的上一个/下一个兄弟级元素等元素的方法...
  20. Jenson不等式及其在EM估计与KL散度中的应用

热门文章

  1. STM32--MPU内存保护单元(一)
  2. 云端服务器怎么维护,云端服务器怎么维护
  3. 召回率和精确率(recall and precision)
  4. oracle 命令分析
  5. 斐波那契数列的性质整理
  6. HTML5 canvas游戏工作原理
  7. Java学习个人备忘录之构造函数this
  8. springmvc整理
  9. 获取oracle 里的表名与字段
  10. 人月神话读感/摘抄 四