RT-Thread系统简介

前言

RT-Thread是一款国产的实时操作系统,我们首先从实时操作系统开始进行介绍,再展开RT-Thread操作系统。

实时操作系统介绍

实时操作系统诞生背景

为了解决两个问题:

  • 一个是早期的CPU任务切换的开销太大,实时调度器可以避免任务频繁切换导致CPU时间的浪费;
  • 另一个是在一些特殊的应用场景中,必须要保证重要的任务优先被执行。
定义

实时操作系统(RTOS)又称,即时操作系统,它会按照排序运行、管理系统资源,并为开发应用程序提供一致的基础。
实时操作系统与一般的操作系统相比,最大的特色就是**“实时性”**,如果有一个任务需要执行,实时操作系统会在较短时间内执行该任务,不会有较长的延时,以此保证了各个任务的及时执行。
实时操作系统中都要包含一个实时任务调度器,这个任务调度器与其他操作系统的最大不同是强调:严格按照优先级来分配CPU时间,并且时间片轮转不是实时调度器的一个必选项。

设计思路
  • 实时的消息、事件处理机制。常见操作系统中,消息队列都是按照FIFO的方式进行调度,但实时操作系统会提供基于优先级的处理方式:依据优先级来决定优先接收信息。
  • 提供内核级的优先级反转处理方式。对于类似信号量一类的API,都能提供抑止优先级翻转的机制,防止操作系统死锁。
  • 减少粗粒度的锁和长期关中断的使用。“锁”主要是指自旋锁一类会影响中断的锁,也包括任何关中断的操作。RTOS通常不允许长期关中断。
  • 系统级的服务也要保证实时性。实时操作系统中允许高优先级的任务优先写入数据,在文件系统提供服务的整个过程中,高优先级的请求被优先处理,这种高优先级策略直到操作完成。
  • 避免提供实时性不确定的API。多数实时操作系统都不支持虚拟内存(page file/swap area),因为缺页中断(page fault)会导致任务调度的不确定性增加。实时操作系统很多都支持分页,但很少会使用虚拟内存,因为一次缺页中断的开销十分巨大(通常都是毫秒级),波及的代码很多,导致用户程序执行的不确定性增加。
  • 提供针对实时系统调度的专用API。
  • 降低系统抖动。因为关中断等原因,操作系统的调度器不会太精确的产生周期性的调度。但优秀的实时操作系统能把调度器的抖动降低到微妙甚至百纳秒一级。
  • 针对实时性设计的SMP和虚拟化技术。实时操作系统的虚拟化能从hypervisor层面上提供虚拟机级别的实时调度,虚拟机上可以是另外一个实时系统,也可以是一个非实时系统。

RT-Thread系统

概述

它是一个嵌入式实时多线程操作系统,基本属性之一是支持多任务。事实上一个处理器核心在某时刻只能运行一个任务,由于每次对一个任务的执行时间很短、任务与任务之间通过任务调度器进行快速的切换,给人造成多个任务在同一时刻同时运行的错觉。
RT-Threa系统中,任务通过线程实现的,RT-Thread中的线程调度器也就是以上提到的任务调度器。

架构

物联网操作系统是指以操作系统内核(RTOS\Linux等)为基础,包括如文件系统、图形库等较为完整的中间件组件,具备低功耗、安全、通信协议支持和云端连接能力的软件平台。
RT-Thread与其他很多RTOS主要区别之一是:它不仅仅是一个实时内核,还具备丰富的中间层组件,如下图所示。
RT-Thread系统简介_第1张图片

  • 内核层:RT-Thread内核,是RT-Thread的核心部分,包括了内核系统中对象的实现,例如多线程及其调度、信号量、邮箱、消息队列、内存管理、定时器等;libcpu/BSP(芯片移植相关文件/板级支持包)与硬件密切相关,由外设驱动和CPU移植构成。
  • 组件与服务层:组件是基于RT-Thread内核之上的上层软件,例如虚拟文件系统、FinSH命令行界面、网络框架、设备框架等。采用模块化设计,做到组件内部高内聚,组件之间低耦合。
  • RT-Thread软件包:运行于RT-Thread物联网操作系统平台上,面向不同应用领域的通用软件组件,由描述信息、源代码或库文件组成。
  • 物联网相关的软件包:Paho MQTT、WebClient、mongoose、WebTerminal 等等。
  • 脚本语言相关的软件包:目前支持 JerryScript、MicroPython。
  • 多媒体相关的软件包:Openmv、mupdf。
  • 工具类软件包:CmBacktrace、EasyFlash、EasyLogger、SystemView。
  • 系统相关的软件包:RTGUI、Persimmon UI、lwext4、partition、SQLite 等等。
  • 外设库与驱动类软件包:RealTek RTL8710BN SDK。

你可能感兴趣的:(RT-Thread系统学习)