嵌入式系统 - 任务管理
教材:嵌入式系统及应用,罗蕾、李允、陈丽蓉等,电子工业出版社
- 任务管理与调度
- 任务管理
- 任务状态与变迁
- 任务控制块
- 任务切换
- 任务切换基本步骤
- 任务切换的时机
- 任务队列
- 就绪队列
- 等待队列
- 任务管理机制
- 任务管理
任务管理与调度
任务管理
任务管理是实时内核的主要工作,完成任务创建、任务删除、任务调度、改变任务优先级等工作
任务状态与变迁
- 等待(waiting):任务在等待某个事件的发生
- 就绪(ready): 任务等待获得处理器资源
- 执行(running):任务获得处理器资源,所包含的代码内容正在被执行
任务会在不同的状态之间进行转换,即任务状态的变迁
调度程序本身也需要占用一定的处理时间
任务控制块
任务管理是通过对任务控制块(Task Control Block,TCB)的操作来实现的
任务控制块是包含了任务执行过程中所需要的所有信息的数据结构
任务控制块大都包括这些信息:任务的名字、任务执行的起始地址、任务的优先级、任务的状态、任务的硬件上下文(堆栈指针、PC和寄存器等)、任务的队列指针等内容
为节约内存,任务数量通常需要进行预先配置
按照配置的任务数量初始化任务控制块,形成一个空闲任务控制块链
在任务创建时,实时内核从空闲任务控制块链中为任务分配一个任务控制块
对任务的操作,都是基于对应的任务控制块来进行的
任务切换
任务切换是保存当前任务的上下文,并恢复需要执行的任务的上下文的过程
当发生任务切换时
- 当前正在运行的任务的上下文就需要通过该任务的任务控制块保存起来
- 把需要投入运行的任务的上下文从对应的任务控制块中恢复出来
- 任务切换将导致任务状态发生变化
任务切换基本步骤
- 保存任务上下文环境
- 更新当前运行任务的控制块内容,将其状态改为就绪或等待状态
- 将任务控制块移到相应队列(就绪队列或等待队列)
- 选择另一个任务进行执行(调度)
- 改变需投入运行任务的控制块内容,将其状态变为运行状态
- 恢复需投入运行任务的上下文环境
任务切换的时机
- 中断、自陷
- 运行任务因缺乏资源而被阻塞
- 时间片轮转调度时
- 高优先级任务处于就绪时
任务队列
任务队列通过任务控制块实现对系统中所有任务的管理
队列由任务控制块构成
就绪队列
在基于优先级的调度处理中,要获得当前具有最高优先级的就绪任务
- 方式一:任务就绪时,把就绪任务的任务控制块放在就绪队列的末尾
- 调度程序需要从就绪队列的头部到尾部进行一次遍历,才能获得就绪队列中具有最高优先级的任务
- 方式二:就绪队列按照优先级从高到低的顺序排列
- 新的就绪任务到达时,需要插入到就绪队列的合适位置,确保就绪队列保持优先级从高到低排列的顺序性
在这两种处理方式中,所花费的时间与任务数量有密切的关系,具有不确定性
为提高实时内核的确定性,可采用一种被称为优先级位图的就绪任务处理算法
等待队列
- 单等待队列
- 资源对应的事件发生时,实时内核需要扫描整个等待队列,搜索等待该资源的任务,并按照一定的策略选取任务,把任务的任务控制块放置到就绪队列
- 如果系统的资源和任务比较多,搜索等待该资源的任务所需要的时间就比较长,会影响整个系统的实时性
- 多等待队列
- 资源对应的事件发生时,能够在较短的时间内确立等待该资源的任务等待队列
单就绪队列和单等待队列
单就绪队列和多等待队列
任务管理机制
任务管理用来实现对任务状态的直接控制和访问
内核的任务管理是通过系统调用来体现,主要包括任务创建、任务删除、任务挂起、任务唤醒、设置任务属性等内容
- 创建任务的过程即为分配任务控制块的过程
- 在创建任务时,通常需要确定任务的名字和任务的优先级等内容,确立任务所能使用的堆栈区域
- 任务创建成功后,通常会为用户返回一个标识该任务的ID,以实现对任务的引用管理
删除任务把任务从系统中去掉,释放对应的任务控制块
挂起/唤醒任务把任务变为等待状态,可通过唤醒任务操作把任务转换为就绪状态
设置任务属性可以用来设置任务的抢占、时间片等特性,以确定是否允许任务在执行过程中被抢占或是对同优先级任务采用时间片轮转方式运行等
改变任务优先级用来根据需要改变任务的当前优先级
获取任务信息获得任务的当前优先级、任务的属性、任务的名字、任务的上下文、任务的状态等内容,便于用户进行决策
嵌入式系统 - 任务管理相关推荐
- 【转载】学习嵌入式系统需要具备的条件、方法及步骤
事先说明,我并不是对嵌入式有多大的兴趣,但我非常希望自己能一直向底层前进,不停地去探究最底层的奥秘. 查阅了很多资料,似乎嵌入式最附合自己对底层的探求,或许它是,或许不是,但对于现在的我而言最重要的是 ...
- 学习嵌入式系统需要具备的条件、方法及步骤
2019独角兽企业重金招聘Python工程师标准>>> 1.将C和C++学好学精(语言层次): 2.将数据结构.算法.操作系统学扎实(内功层次): 3.爬山成功后,深入学习.理解.运 ...
- 【复习资料】单片机与嵌入式系统原理及应用
嵌入式系统的概念 第一种定义:嵌入式系统是以应用为中心.计算机技术为基础,软硬件可裁剪,适应应用系统对功能.可靠性.成本.体积.功耗严格要求的专用计算机系统. 第二种定义:把基于处理器(通用处理器和嵌 ...
- 嵌入式系统之操作系统篇
1 .嵌入式软件基础 (1)嵌入式软件的特点: A.规模较小. B.开发难度大. C.实时性和可靠性要求高. D.要求固化存储. (2)嵌入式软件分类: A. 系统软件:控制和管理嵌入式系统资源,如嵌 ...
- 计算机三级嵌入式系统易错题总结
1.IP是中文 知识产权的英文缩写 2.有线电视的视频编码:MPEG-2,互联网视频编码:MPEG-4 AVC 3.ARM处理器异常中断处理中用于软中断的指令助记符是:SWI,用于断点中断指令助记符是 ...
- 计算机三级之嵌入式系统学习笔记6
嵌入式系统的软件结构 简单的轮询结构 应用程序重复循环检查每个外部输入条件,一旦有需要处理的任务,则进行相应的处理 带中断的轮询结构(中断驱动结构或前后台结构) 当有外部事件(例如温度传感器报警)发生 ...
- 嵌入式系统开发学习步骤(Linux高级编程学习顺序)
2019独角兽企业重金招聘Python工程师标准>>> 嵌入式系统开发学习步骤(Linux高级编程学习顺序) 1.Linux 基础 安装Linux操作系统 Linux文件系统 Lin ...
- 嵌入式系统之ucLinux与uc/os-II的比较
ucLinux VS uc/os ucLinux 编译后的可执行文件可以控制在几百K量级 uClinux的内核可以在Flash上直接运行:就是把uClinux的内核的可执行映象烧写到flash上,系统 ...
- 时间触发嵌入式系统设计模式 读书笔记
1 下载地址: https://download.csdn.net/download/longzitailang8/10496129 本书前所未有地提出一整套软件模式,为开发嵌入式软件系统提供帮助.书 ...
- 如何区分嵌入式系统和嵌入式操作系统
一 什么是嵌入式系统 嵌入式系统一般指非pc系统,有计算机功能但又不称之为计算机的设备或器材.它是以应用为中 心,软硬件可裁减的,适应应用系统对功能.可靠性.成本.体积.功耗等综合性严格要求的专用计 ...
最新文章
- (C++)1012 数字分类
- android studio离线配置gradle插件_Gradle 扫盲与 Task 基础
- 干货 | 顾险峰:对抗生成网络的几何理论解释(附视频PPT)
- 面绘制经典算法:MarchingCube实现(C++ OpenGl代码篇)
- CL_THTMLB_COLOR_UTIL
- 还有前景吗_喷码机行业还有前景吗 2021喷码机市场份额有多大
- java文件编译为class文件需要键入什么命令_cmd命令行 编译Java 文件
- 客座编辑:谢波峰(1976-),男,中国人民大学财政金融学院副教授,中国人民大学金融与财税电子化研究所执行所长。...
- 采用随机的'User-Agent'提高博客的访问量
- MySQL-(1)查看用户权限、(2)用户授权、(3)删除用户权限 语法格式总结
- java集合-TreeSet排序方式
- UiPath PDF操作
- 如何在手机浏览器中实现条形码/QR码扫描
- sl400升级win10_联想SL400全安装WIN7(官方最完美教程).doc
- 1m照片的宽和高是多少_照片常见标准尺寸大全
- php 七牛云 视频加水印
- 无敌!确定恋爱关系的搞笑招式
- php时区问题,php时区问题
- 食堂自助点餐系统NABCD
- C语言连接MySQL数据库实例
热门文章
- 个人小程序 给头像戴圣诞帽
- 怎么用dw做html网页模板,使用Dreamweaver制作网页的20个技巧
- 排名缘何像风中摇摆的树叶一样岌岌可危
- “采菊东篱下,悠然见南山”----南山路上品太古 总结
- 什么情况下选用mysql_在MySQL中,‘%’可以用在什么情况下?
- python字典forward_python工具库库介绍-bidict: 双向字典
- Java编译环境安装
- 关于选课系统的的界面设计、类图设计、数据库设计。
- 魔兽世界选择服务器未响应,魔兽世界7.0军团再临常见技术性问题解决方案汇总...
- 敏捷 绩效_管理敏捷团队绩效的四个技巧