嵌入式OS入门笔记-以RTX为案例:六.RTX的任务调度
嵌入式OS入门笔记-以RTX为案例:六.RTX的任务调度
上一篇笔记介绍了一些绕开排程器(或调度程序,scheduler)来进行时间管理的一些小方法。这一篇详细介绍RTX的任务调度原理。
RTX主要有三种调度方式:
- Pre-emptive: 抢断式
- Round robin: 轮转式
- Co-operative: 合作式
在正式介绍这些方式之前。先看一下RTX的进程优先等级设置。
1.RTX的优先度
每个task在创建之初都会有一个优先级(os_tsk_create(task_name,priority);)。优先级是一个从0到255的整形数据,该数据越高的task。优先级越高。每个优先级都有一个先入先出的队列结构。
详细说来:
首先,RTX并不能处理高速中断(FIQ。ARM处理器中最高优先级的中断),相反地,当高速中断发生时。RTX内核可能会被打断。
然后到普通中断,普通中断并非一个进程,所以不须要设定优先度,但普通中断一定会打断进程。
然后就到优先度为2-255的进程,这些进程会依照先入先出的顺序执行。低优先度的进程不能打断高优先度的进程,但高优先度的进程会打断低优先度的进程。假设当前最高优先度是x。但全部优先度为x的进程都处于等待状态,那么排程器就会考虑下一优先度(x-1)的进程。但一旦任一x进程进入就绪状态。排程器会打断低优先度进程。
优先度为1的进程时轮转进程,以下介绍到轮转排程时会记录它与优先度为2-255进程的差别。
优先度为0的进程为空暇进程。
当没有进程运行时,RTX会运行它,并提升其优先度到1.
几个特殊进程的优先度:os_idle_demon(void) 的优先度永远为0, RTX实在没进程可跑才会执行这个进程。os_error (U32 err_code)的优先度永远为255。用于处理错误的。这两个进程原型都在RTX_CONFIG.C文件里。
另外,除了创建时给进程分配优先级。优先级也是能够通过调用下面服务改变:
os_tsk_prio(taskID,priority);用于改变其它进程的优先度。
os_tsk_prio_self(priority); 用于改变当前进程的优先度。
2.RTX的调度
搞清楚RTX的优先级后,事实上RTX的调度不难理解。
1. pre-emptive
每个进程都有不同的优先级。最高优先级的进程会执行,排程器不会终止它。所以它会执行直到它自行中止挂起(blocked),或者被更高优先级的进程打断。
自行挂起的办法事实上我们上一节介绍过,就三个:os_tsk_pass();, os_dly_wait(delay_time);和os_itv_wait(void);.假设其被中止挂起。其余优先级最高的进程会执行。这个配置的办法就是除能在RTX_CONFIG.C中的Round-Robin Task
Switching项。
2. Round robin
每个进程的优先级都是1。每个进程都会被分配到一个时间片,在执行完这个时间片后,该进程就会增加优先级为1的队列的末端,然后队列最前端的进程继续执行。
时间片由RTX_CONFIG.C中的Round_Robin Timeout[ticks]决定。准确时间是Round_Robin Timeout[ticks]×Time tick value[us] (μs). 如上图所看到的。那么时间片就是10000×5=50000μs.配置该排程须要使能Round-Robin Task switching项。
3. Co-operative
这个是全部进程都是同样的优先度(比如1,)且除能了轮转式排程。
在这样的合作模式下,进程不会被排程器挂起,仅仅能自己中止。
3.小结
事实上RTX的任务调度非常灵活,最经常使用的就是轮转和抢断式调度混用: 一部分进程的优先度是大于2的。其它进程的优先度是1(轮转式排程)。也就是说假设优先度大于2的进程就绪了,优先执行,假设没有就绪的大于2的进程,那么就先执行轮转式的进程。并且加上不同的进程间能够相互调节进程的优先度,所以调度的自由度非常大的。
另一些具体的细节问题,比如优先度反转等问题,在记录到进程间通讯后。再具体记录一下吧。
嵌入式OS入门笔记-以RTX为案例:六.RTX的任务调度的更多相关文章
- 嵌入式OS入门注意事项-同RTX案件:九.关于优先-翻转,继承和天花板
嵌入式OS入门注意事项-同RTX案件:九.关于优先-翻转,继承和天花板 涉及当调度优先级,会有很多问题,本文中,优先调度和一些战略的主要问题,以应付. 有几个概念如下:(priority invers ...
- HTML入门笔记案例展示(1)
一: html标签&html书写规则 Html 的标签 分为如下 这两种 : 单标签: 单标签一般 用于特殊的含义, 例如 : <br/> 表示换行, <hr/> ...
- MySQL入门笔记
MySQL入门笔记 版本选择: 5.x.20 以上版本比较稳定 一.MySQL的三种安装方式: 安装MySQL的方式常见的有三种: · rpm包形式 · 通用二进制 ...
- React.js入门笔记
# React.js入门笔记 核心提示 这是本人学习react.js的第一篇入门笔记,估计也会是该系列涵盖内容最多的笔记,主要内容来自英文官方文档的快速上手部分和阮一峰博客教程.当然,还有我自己尝试的 ...
- redis入门笔记(2)
redis入门笔记(2) 上篇文章介绍了redis的基本情况和支持的数据类型,本篇文章将介绍redis持久化.主从复制.简单的事务支持及发布订阅功能. 持久化 •redis是一个支持持久化的内存数据库 ...
- redis入门笔记
redis入门笔记 参考redis实战手册 1. Redis在windows下安装 下载地址:https://github.com/MSOpenTech/redis/tags 安装Redis 1.1. ...
- C++ 快速入门笔记:进阶编程
C++入门笔记:高级编程 文件和流 打开文件 void open (const char *filename, ios::openmode mode); ios::app 追加模式.所有写入都追加到文 ...
- golang微服务框架go-micro 入门笔记2.4 go-micro service解读
本章节阐述go-micro 服务发现原理 go-micro架构 下图来自go-micro官方 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go- ...
- Centos7——docker入门(笔记)
docker 入门(笔记) 一.Docker是什么? 官方原话: Docker provides a way to run applications securely isolated in a co ...
随机推荐
- 【Javascript下载文件的Post实现】
/** *从服务器上下载数据 *@param paras Json格式的键值对参数 */ downLoadFromServer: function (paras) { //init a new win ...
- Linux进程间通信——使用信号
一.什么是信号 用过Windows的我们都知道,当我们无法正常结束一个程序时,可以用任务管理器强制结束这个进程,但这其实是怎么实现的呢?同样的功能在Linux上是通过生成信号和捕获信号来实现的,运行中 ...
- Sublime Text Packages Control 安装
一.简单的安装方法 使用Ctrl+`快捷键或者通过View->Show Console菜单打开命令行,粘贴如下代码: import urllib.request,os; pf = 'Packag ...
- vmware配置安装JDK、Tomcat以及项目部署
1.安装JDK1.7 JDK:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 安 ...
- Swift主题色顶级解决方案
一.常规主题色使用点 应用在发布前都会对主题色进行设置,以统一应用的风格(可能有多套主题).在主题色设置上有几个方面,如下: 1. TabBar部分,设置图片高亮.文本高度颜色2. Navigatio ...
- TNS-12541,TNS-12560,TNS-00511,TNS-12542,TNS-12560,TNS-00512数据库启动监听报错
第 1章 数据库server监听错误 1.1.1数据库监听错误 1.1.1.1 问题及现象 server环境为ORACLE11G RAC环境,系统启动后,监听没起来. [oracle@RAC4 ~ ...
- uva 10161 Ant on a Chessboard 蛇形矩阵 简单数学题
题目给出如下表的一个矩阵: (红字表示行数或列数) 25 24 23 22 21 5 10 11 12 13 20 9 8 7 14 19 3 2 3 6 15 18 2 1 4 5 16 17 1 ...
- 微信朋友圈分享js代码最新2015年无错版
最近微信对分享做了进一步规范,导致很多分享都不起作用了,今天跟大家分享,2015年最新修无错的! 以下是主要微信分享页面代码:(其中红色部分主要懒友自己填写自己哈.) <?php require ...
- 有用的HTML+CSS片段
HTML5页面模板 现在国外很多制作新网站直接使用了HTML5代码,当然我们也得跟上,下面是一个常用的HTML5默认模板,就像你用Dreamweaver新建一个HTML文件时的代码,只不过现在这个是H ...
- 【最大流】【HDU2883】【kebab】
题意: 有一个烧烤机,每次最多能烤 m 块肉,现在有 n 个人来买烤肉,每个人到达时间为 si,离开时间为 ei,点的烤肉数量为 ci,点的烤肉所需烘烤时间为 di, 每个人要烤的肉可以分成若干份在同 ...