实时操作系统RTOS实现多任务调度原理

很多朋友长时间使用裸机编程,切换过来学习RTOS,就对其中很多概念产生误解。

大部分人开始学习RTOS实时操作系统时,对RTOS中的一些概念都不太理解。

一上来就是临界段、调度、信号量、互斥锁等这些概念,相信大部分初学者都是懵的。

不太懂这些概念很正常,一下子懂了,我倒反而觉得不正常。

1什么是多任务

这里大部分人应该都是从裸机阶段过来的,裸机系统一般也称之为单任务系统、轮询系统前后台系统

这个概念相信大家都能明白,轮询就是在一个大while循环里执行。前后台系统就是在执行while时,有中断(前台)响应的系统。

int main(void){  /* 初始化 */ while(1) {    /* 循环处理多项事情 */ }}

那么,什么是多任务呢?

当多任务操作系统使用某种任务调度策略允许两个或更多进程并发共享一个处理器时,事实上处理器在某一时刻只会给一件任务提供服务

因为任务调度机制保证不同任务之间的切换速度十分迅速,因此给人多个任务同时运行的错觉。

---来自百度百科

初学者可以理解为:有类似上面的多个轮询系统

如下代码,将大while中的多项事情,分为几个事情,分别处理

void Task1(void){  /* 初始化 */  while(1)  {    /* 处理事情1 */  }}void Task2(void){  /* 初始化 */  while(1)  {    /* 处理事情2 */  }}

这里就要牵涉到各个任务之间的切换:任务调度

2任务调度

说任务调度之前,先说一插曲:

我开始学RTOS时,觉得CPU这么短时间(1ms)在各个任务之间来回切换,而且切换还需要执行那么多代码,这样CPU还能执行多少代码啊?

其实,我当时太低估了处理器的能力。

拿STM32F103跑72M来说,1ms时间可以执行的代码有多少,你们心里有概念吗?

沿着这个问题,大家进一步思考其实都能明白,区区那切换(任务调度)的几行代码对于CPU速度来说,这个处理时间可以忽略不计(当然,这是相对高速处理而言。如果低频的处理器,这个时间可能相对较长)。

任务调度

任务调度可以分抢占调度和轮询调度

在RTOS中,为了使任务得到实时响应,一般使用抢占调度方式,我们拿UCOS为例:

你会发现只程序执行过程中,如果有高优先级任务带来,高优先级任务就会打断低优先级任务。

直到高优先级任务执行完,低优先级任务才得到相应。

这里有人可能会问:如果高优先级一直或长时间执行可以吗?

答案是:NO

这里就关系到任务优先级分配,以及任务设计问题。

一般来说,高优先级任务是在等待一个事件的触发,执行一件紧急,而不会太耗时的事情

太耗时任务一般留给低优先级任务,在系统不忙时慢慢处理。

调度过程

我们设置系统滴答为1ms时间,那么系统就会间隔1ms检查一次就绪任务中优先级更高的任务。

这个1ms滴答是由定时器中断产生,一般像在STM32由内核滴答定时器产生。

如上图,他在(2)的位置就检测到有更高优先级任务(7)就绪,此时就会跳转到任务(7)去执行。

------------ END ------------
(0)

相关推荐

  • 实时操作系统RTOS相比裸机的几点优势

    经常有初学读者问一些关于RTOS的问题,比如:我现在要不要学习RTOS? 学习RTOS有什么好处? 我的项目要不要跑RTOS? 问这些问题,其实归根结底还是对RTOS理解的不够,项目开发的经验还不足等 ...

  • 图解FreeRTOS 原理系列之任务管理器基本框架

    本文主要学习梳理FreeRTOS任务管理器的基本原理,大体框架. 内核任务管理器需求 先来对比一下裸奔系统与RTOS应用系统的编程模型,看看两种编程的不同画风. 裸奔系统 在不用RTOS的单片机应用开 ...

  • 提高RTOS应用程序稳定可靠的几点技巧

    我们在编写RTOS应用程序的过程中,经常会遇到这些困难,包括正确确定系统中有多少任务.如何设置优先级.协调任务行为.避免常见陷阱,有时只是为了让应用程序正常工作,而忽略一些问题. 如今,近三分之二的嵌 ...

  • 实时操作系统的滴答Tick设置多少才合适?

    最近有读者问了这么一个问题:为啥RTOS的系统滴答(Tick)默认配置都是1000,我配置为100.10000,或者2000可以不? 相信很多初学者都有这个疑问,包括我初学RTOS也曾困惑滴答配置不同 ...

  • RTOS实现多任务调度的基本原理

    很多朋友长时间使用裸机编程,切换过来学习RTOS,就对其中很多概念产生误解. 大部分人开始学习RTOS实时操作系统时,对RTOS中的一些概念都不太理解. 一上来就是临界段.调度.信号量.互斥锁等这些概 ...

  • RTOS的调度原理

    我们这一系列的微信推送,仅仅是为了可以帮助大家快速地对操作系统有一个感性层面上的认识.当然,让人更好地记住一样复杂的东西,就是寻找另一样简单的东西来解释它.但是,这种方式的解释,是完全不符合教育应该有 ...

  • 实时内核(Core)和实时操作系统(RTOS)有何不同?

    大家都知道什么是实时操作系统,但是,大家熟知的实时操作系统,站在更广的角度来看,其实它就是一个实时内核. 一.实时内核和实时操作系统 一个实时内核是管理微处理器(MPU).微控制器(MCU)或数字信号 ...

  • 视频教程 |《嵌入式实时操作系统μC/OS原理与实践》(卢有亮主讲)

    EEWORLD 电子资讯 犀利解读 技术干货 每日更新 <嵌入式实时操作系统μC/OS原理与实践>视频教程为电子科技大学副教授卢有亮主讲.采用循序渐进,逐层深入的方法一步一步教您学习UCO ...

  • 实时操作系统ThreadX全中文手册上线了

    对于很多初学者来说,学习一门技术非常头疼的一件事,就是面对英文资料和手册. 不但初学者,对于有一定工作经验的工程师来说,想要深入理解技术,遇到英文资料和手册同样头疼. 最近,实时操作系统ThreadX ...

  • 深度探索Linux操作系统:系统构建和原理解析

    前言 对于编译内核而言,一条make命令就足够了.构建内核最困难的地方不是编译,而是编译前的配置.配置内核时,通常我们都能找到一些参考. 比如,对于桌面系统,可以参考主流发行版的内核配置,比如,对于嵌 ...

  • 介绍国内外几家物联网操作系统RTOS

    近两年很多公司都在布局物联网相关的产品,相信IoT相关的从业人员,以及我公众号的读者都应该能感受到今年物联网的快速发展. 可能你们不是很关注IoT的发展,但我从事嵌入式开发,同时我又在维护公众号,所以 ...

  • 操作系统原理基础知识

    操作系统原理   我们每天都同操作系统打交道,了解一些操作系统原理上的知识是绝对有必要的,它可以让你了解操作系统内部是怎么工作的,为什么会出现这样那样的问题,为我们解决这些问题提供思路.     本文 ...