ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

RTOS的基本概念(RT-Thread学习笔记-01)

2021-03-13 14:59:12  阅读:506  来源: 互联网

标签:RT 01 优先级 Thread 中断 RTOS 线程 内核 时间


文章目录


前言

在 RTOS 中,调度与线程是两个最重要概念。


RTOS 的相关术语,简单地分为内核类与线程类的相关术语,理解这些基本概念,是学习 RTOS 的关键一环。

一、内核类概念

在 RTOS 基础上编程,芯片启动过程先运行的一段程序代码,开辟好用户线程的运行环境,准备好对线程进行调度,这段程序代码就是 RTOS 的内核。RTOS 一般由内核与扩展部分组成,通常内核的最主要功能是线程调度,扩展部分的最主要功能是提供应用程序编程接
口 API。

(什么是API?)
操作系统向用户提供了两种接口,分别是用户接口和程序接口。

用户接口即用户向 OS 请求提供特定的服务,而系统则把服务的结果返回给用户。

程序接口又称应用程序接口(Application Programming Interface),即API,该接口是为程序员在编程时使用的,系统和应用程序通过这个接口,可在执行中访问系统中的资源和取得 OS 的服务,它也是程序能取得操作系统服务的唯一途径。简单来说,就是一个程序要用操作系统的功能,就必须要用API。

API 的一个主要功能是提供通用功能集。API同时也是一种中间件,为各种不同平台提供数据共享。

1.调度(Scheduling)

多线程系统中,RTOS 内核(Kernel)负责管理线程,或者说为每个线程分配 CPU 时间,并且负责线程间的通信。

调度就是安排哪个线程该执行了,是内核最重要的职责。每个线程都可以赋予不同的优先级,优先级通常体现为线程的重要程度。其中,0为最优先。

不同的调度算法(Scheduling algorithm)对RTOS 的性能有较大影响,基于优先级的调度算法(Scheduling algorithm based on priority)是 RTOS 常用的调度算法,核心思想是,总是让处于就绪态的、优先级最高的线程先运行。

然而何时高优先级线程掌握 CPU 的使用权,由使用的内核类型确定,基于优先级的内核有不可抢占型和可抢占型两种类型。

2.不可抢占型内核与可抢占型内核

不可抢占型内核(Non-Preemptive Kernel),要求每个线程主动放弃 CPU 的使用权,不可抢占型调度算法也称为合作型多线程,各个线程彼此合作共享一个 CPU。但异步事件还是由中断服务来处理,中断服务可使高优先级的线程由挂起态变为就绪态,但中断服务以后,使用权还是回到原来被中断了的那个线程,直到该线程主动放弃 CPU 的使用权,新的高优先级的线程才能获得 CPU 的使用权。

当系统响应时间很重要时,须使用可抢占型内核(Preemptive Kernel)。在可抢占型内核中,一个正在运行的线程可以被打断,而让另一个优先级更高、且变为就绪态的线程运行。如果是中断服务子程序使高优先级的线程进入就绪态,中断完成时,被中断的线程被挂起,优先级高的线程开始运行。

我的理解:当中断事件发生时,不可抢占型就是插队,可抢占型就是踢人。(好像也不是很切合,更准确的说不是插队,是在办理业务的过程中插入)

3.时钟节拍(时间嘀嗒)

时钟节拍(clock tick),有时中文也直接译为时钟嘀嗒,它是特定的周期性中断,通过定时器产生周期性的中断,以便内核判断是否有更高优先级的线程已进入就绪状态。

4.实时性

硬实时(Hard Real-Time)要求在规定的时间内必须完成操作,是在设计操作系统时保证的,通常将具有优先级驱动的、时间确定性的、可抢占调度的 RTOS 系统称为硬实时系统。软实时(Soft real-time)则没有那么严格,只要按照线程的优先级,尽可能快地完成操作即可。

RTOS 追求的是调度的实时性、响应时间的可确定性、系统高度的可靠性,评价一个RTOS 一般可以从线程调度、内存开销、系统响应时间、中断延迟等几个方面来衡量。

(1)线程调度的时间指标

RTOS 的实时性和多线程能力在很大程度上取决于它的线程调度机制。在大多数商用的实时系统中,为了让操作系统能够在有突发事件时,迅速取得系统控制权以便对事件做出反应,所以大都提供了“抢占式线程调度”功能,也就是操作系统有权主动终止应用程序(应用线程)的执行,并且将执行权交给拥有最高优先级的线程。

调度延时(Scheduling Latency):指当一个更高优先级的线程就绪到这个线程开始运行之间的时间。简而言之,就是一个线程被触发后,由就绪到开始运行的时间。

线程切换时间(Context-switching time):由于某种原因使一个线程退出运行时,RTOS保存它的运行现场信息,并插入相应列表,依据一定的调度算法重新选择一个新线程使之投入运行,这一过程所需时间称为线程切换时间。线程切换时间越短,RTOS 的性能就越高。

恢复时间(Recovery time):指从线程完成后,系统响应到恢复执行主程序所需要的时间。

(2)最小内存开销

在 RTOS 的设计过程中,由于成本限制,嵌入式系统产品内存的配置一般都不大,而在有限的内存空间内不仅要装载 RTOS,还要装载用户程序。因此,最小内存开销是一个重要的指标,这是 RTOS 设计与其他操作系统设计的明显区别之一。

(3)系统响应时间(System response time)

系统响应时间(System response time):指系统发出处理要求到系统给出应答信号的时间,也就是从线程请求产生到线程完成之间的时间间隔,需要满足一定的时间约束。控制要满足一定的实时性要求,就是响应时间小于临界时间。

系统响应时间由反应时间处理时间两个方面组成。对应于计算控制的实时系统,反应时间指外部中断提交到 CPU 开始处理的时间,处理时间指 CPU 完成处理的时间。提高系统的响应时间,可以从缩短反应时间和处理时间两个方面入手。反应时间是电信号的传导时间,对于不同速度的处理器,这个时间相差不大。

(4)中断延迟

中断是一种硬件机制,用于通知 CPU 发生了一个异步事件。CPU 一旦识别出一个中断,保存线程上下文后,跳至该中断服务程序 ISR 执行,处理完这个中断后,返回到就绪列表中具有最高优先级的线程执行。当 RTOS 运行在核心态或执行某些系统调用的时候,不会因为外部中断的到来而立即执行中断服务程序的,只有当 RTOS 重新回到用户态时才响应外部中断请求,这一过程所需的最大时间就是中断禁止时间

中断延迟(Interrupt latency)时间:是指系统确认中断开始直到执行中断服务程序第一条指令为止,整个处理过程所需要的时间。中断禁止时间越短,则中断延迟时间也就会越短,那么系统的实时性也会越高

5.代码临界段

代码临界段也称为临界区,是指处理时不可分割的代码,一旦这部分代码开始执行,则不允许任何中断打扰。为确保临界段代码的执行,在进入临界段之前要关中断,且临界段代码执行完后应立即开中断

二、线程类概念

1.线程的基本含义

线程是RTOS调度的基本单元,通过设定各个线程的运行规则,交给RTOS管理,这就是基于RTOS编程的基本思想。在面向对象编程的过程中,线程就是一个个独立、相互作用的功能清晰的小程序模块。在单CPU下,某一时刻只运行单个线程。线程在不同的情况也可以被称为任务(Task)或其他名词,但本质没有区别。

2.线程的上下文及线程切换

线程的上下文(Context),即 CPU 内寄存器。当多线程内核决定运行另外的线程时,它保存正在运行线程的当前上下文,这些内容保存在RAM中的线程当前状况保存区(Task’s Context Storage Area),也就是线程自己的堆栈之中。入栈工作完成以后,就把下一个将要运行线程的当前状况从其线程栈中重新装入 CPU的寄存器,开始下一个线程的运行,这一过程叫做线程切换或上下文切换。

3.死锁

死锁指两个或两个以上的线程无限期地互相等待对方释放其所占资源。死锁产生的必要条件有四个,即资源的互斥访问资源的不可抢占资源的请求保持以及线程的循环等待。死锁解决问题的方法是破坏产生死锁的任一必要条件,例如规定所有资源仅在线程运行时才分配,其他任意状态都不可分配,破坏其资源请求保持特性。

死锁是必须避免的。

4.线程间通信

线程间的通信是指线程间的信息交换,其作用是实现同步及数据传输。同步是指根据线程间的合作关系,协调不同线程间的执行顺序。线程间通信的方式主要有事件、消息队列、信号量、互斥量等。需要下来好好花时间学习。

5.线程优先级

在一个多线程系统中,每个线程都有一个优先级(Priority)。

优先级驱动(Priority-Driven):在一个多线程系统中,正在运行的线程总是优先级最高的线程。在任何给定的时间内,总是把 CPU 分配给优先级最高的线程。

优先级反转(Priority- Inversion):当一个线程等待比它优先级低的线程释放资源而被阻塞时,这种现象被称为优先级反转,这是一个需要在编程时必须注意的问题。优先级继承技术可以解决优先级反转问题,目前市场上大多数商用操作系统都使用优先级继承技术。

优先级继承(Priority-Inheritance):优先级继承是用来解决优先级反转问题的技术。当优先级反转发生时,较低优先级线程的优先级暂时提高,以匹配较高优先级线程的优先级。这样,就可以使较低优先级线程尽快地执行并且释放较高优先级线程所需要的资源。

6.资源、共享资源与互斥

资源(Resources):任何为线程所占用的实体均可称为资源。资源可以是输入/输出设备,例如打印机、键盘及显示器;资源也可以是一个变量、结构或数组等。

共享资源(Shared Resources):可以被一个以上线程使用的资源叫做共享资源。为了防止数据被破坏,每个线程在与共享资源打交道时,必须独占资源,即互斥

互斥(Mutual Exclusion):互斥是用于控制多线程对共享数据进行顺序访问的同步机制。在多线程应用中,当两个或更多的线程同时访问同一数据区时,就会造成访问冲突,互斥能使它们依次访问共享数据而不引起冲突。

总结

该笔记内容主要来源于王宜怀编《嵌入式实时操作系统—基于 RT-Thread 的 EAI&IoT 系统开发》

标签:RT,01,优先级,Thread,中断,RTOS,线程,内核,时间
来源: https://blog.csdn.net/qq_35222498/article/details/114706315

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有