u乐平台官网

侵权投诉

RT-Thread操作系统的调度设计原理

RTThread物联网操作系统 2020-09-02 14:14 次阅读

要想使用好RTOS,做出更加稳定可靠的产品,必须非常清楚底层的调度原理。由于RTOS的实时性与可控性,所以只有了解了其核心部分的设计思想,才能用起来得心应手,游刃有余。本文从RT-Thread的调度器设计的运行方式上解释一下调度器的行为,从而更加深刻的理解RT-Thread操作系统的调度时机。

1.调度是什么?

调度一般就是合理的安排、协调资源,统一指挥去完成一件事,而在操作系统中,线程调度就是有多个就绪优先级的任务,找到最高优先级任务,交给去运行。

u乐平台官网 RT-Thread 调度器就是起到判决线程当前的优先级,然后选择当前系统中最高优先级的就绪态的线程交给CPU去管理。

调度又可以细分为两种。可打断调度:关键防止优先级倒置;不可打断调度:先来先服务,不可中断。RT-Thread 属于实时操作系统,所以其调度器实现的是可打断的调度,当有更高优先级的线程或者更重要的任务就行,则可以打断当前任务的执行状态,去执行优先级更高的任务。那么此时,调度的时机就非常的关键了。

2.调度怎么实现?

RT-Thread在创建任务的时候,会指定任务的优先级,一般来说,每个任务都有自己特定的唯一的优先级。所以内核线程对象中有不同的优先级的任务列表。

如果最大指定为32个优先级,那么可以用32位数据类型表示,每一个bit表示一个优先级就绪的状态。使用位图的优点就是速度快,而且内存占用小。

一般来说,调度去找到最高优先级的任务时,就需要去做判断。如何去找到最高优先级的任务。一般来说,有两种办法:

软件计算

硬件计算

这两种的差别仅仅在于计算效率的问题,本质目的并无差别。

u乐平台官网 而用软件计算方法寻找最高优先级有两种实现的策略:

u乐平台官网 1.遍历就绪的队列,找到最小的优先级就绪的队列,寻找的时间不确定,时间复杂度O(n)。

u乐平台官网 2.采用空间换时间的办法,事先做好一个bitmap

u乐平台官网 例如系统中最大有8个优先级,那么bitmap如下:

 1const rt_uint8_t __lowest_bit_bitmap[] =
 2{
 3    /* 00 */ 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
 4    /* 10 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
 5    /* 20 */ 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
 6    /* 30 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
 7    /* 40 */ 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
 8    /* 50 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
 9    /* 60 */ 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
10    /* 70 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
11    /* 80 */ 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
12    /* 90 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
13    /* A0 */ 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
14    /* B0 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
15    /* C0 */ 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
16    /* D0 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
17    /* E0 */ 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
18    /* F0 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0
19};
一般每一位代表一个就绪的状态,所以__rt_ffs程序的设计如下
 1int __rt_ffs(int value)
 2{
 3     (value == 0) return 0;
 4
 5    if (value & 0xff)
 6        return __lowest_bit_bitmap[value & 0xff] + 1;
 7
 8    if (value & 0xff00)
 9        return __lowest_bit_bitmap[(value & 0xff00) >> 8] + 9;
10
11    if (value & 0xff0000)
12        return __lowest_bit_bitmap[(value & 0xff0000) >> 16] + 17;
13
14    return __lowest_bit_bitmap[(value & 0xff000000) >> 24] + 25;
15}

如果当前系统的线程状态为0b0110 0000,那么转换成十六进制就是0x60,根据表中的状态此时的最高优先级是5+1=6。所以可以得出系统的优先级,此时计算的复杂度为O(1)。

虽然 RT-Thread 是支持同等优先级的,但是在具体的业务逻辑的设计中,在使用RTOS常用的设计方法中,一般都是要求程序的运行逻辑是可预测的,就是在程序执行的过程中,可以预测到程序下一步的动作。所以rtos中同等优先级,按照时间片轮训的这种方式设计业务逻辑的情况并不多。使用相同优先级会增加系统的业务逻辑的复杂性。

3.什么时候系统做调度?

RT-Thread 是抢占式的系统调用,所以系统什么时候去做的调度非常的关键。系统调度行为具体又分为主动调度和被动调度两种。

u乐平台官网 3.1 任务主动block

u乐平台官网 当A线程在正常运行时,主动放弃CPU的使用权,比如去执行rt_thread_delay或者等待一个IPC消息时,当前线程会主动放弃CPU资源,此时去系统中寻找已经就绪的最高优先级的线程进行调度。

这种方式应用的场景比较丰富,比如当前线程没有获取到资源时,需让出CPU的使用权,或者事情做完了,主动让出CPU的使用权,这就是系统做调度的时机。

A线程的优先级要高于B线程的优先级,所以在A放弃CPU使用权后,已经就绪的最高优先级线程B就开始执行了。

3.2 被更高优先级的任务唤醒

u乐平台官网 这种方式就是当比当前运行线程的优先级高的线程处于就绪态时,高优先级的就绪态线程会被唤醒,低优先级线程将暂停运行,此时会调度到比当前线程更高的优先级线程中去。

按照理解A线程是正在运行的线程,此时更高任务优先级的线程C就绪处于就绪状态了。比如创建了一个比A优先级更高的C进程,并startup C线程,此时会执行rt_schedule()将线程切换到优先级更高的C线程。此时A线程运行状态以及处理器寄存器u乐平台官网状态压栈,更高优先级的C线程的状态以及处理器寄存器状态出栈,并且开始运行C线程。

3.3 yield放弃cpu使用

首先理解一下什么是yield,解释成让出,放弃比较合理。该出让只针对于同等优先级的线程。

这种情况只适用于A线程的优先级等于B线程的优先级的情况。因为RTT支持同等优先级的方式创建线程,相同的优先级的切换是靠时间片轮询来进行的。所以,当A线程正常运行的时候,如果执行了yield函数,那么只相当于将A线程的时间片消耗完,此时同等优先级的D线程开始运行。 由于在RTOS中,需要的是完成任务的确定性与可靠性,同等优先级的情况比较有限,所以这一块应用的不多。

3.4 中断中执行调度

以上的三种属于主动进行调度的过程,其系统的执行流程都是可以预测的,但是中断去执行调度却是比较特殊。是被动调度。

这种方式是在中断中执行调度的,当A线程正常运行时,此时来了一个中断,由于中断的优先级是高于线程的。所以,中断处理事情,如果在中断中执行了调度函数,那么在中断退出后,将直接切换到当前系统中更高优先级的线程去运行。如果如果当前系统的最高优先级还是A,那么中断退出后,执行的最高优先级线程依然是A。若存在线程E线程优先级高于A并且处于就绪状态,此时,中断退出后,切换到E线程去执行。

4.调度做了哪些事情?

系统进行调度的时候做了哪些事情?

u乐平台官网 第一步:查找当前系统中当前以及就绪的最高优先级的线程,若有高于当前运行系统运行的线程栈则执行线程切换

第二步:关闭中断,将系统当前运行状态以及处理器的寄存器压入栈空间

第三步:找到需要运行的线程的PC指针,并找到栈起始处弹出栈空间中的寄存器状态

第四部:打开中断,执行异常ret,让系统恢复执行

u乐平台官网 此时,就切换到已经就绪的更高优先级的线程去运行了。

5.总结

RT-Thread 线程的调度器是整个系统的灵魂,整个操作系统在运行过程中何时切换线程、什么情况下去处理任务,以及做更高效的业务逻辑的应用都离不开系统调度。掌握了调度器运行的规律,并且合理的使用线程调度时机,可以设计出更加稳定可靠的产品。通过阅读代码,就能预测程序下一步的执行动作。真正的做到手中有粮,心中不慌。

u乐平台官网原文标题:​RT-Thread的线程调度与管理分析

文章出处:【微信号:RTThread,微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

       FPGA 的用处比我们平时想象的用处更广泛,原因在于其中集成的模块种类更多,而不仅仅是原来的简...
发表于 09-08 22:43 0次 阅读

基于μC/OS-II和Simulink开发环境实现OSEK顺应性软件的设计

现在V型开发模式已成为使用最广的汽车软件开发流程标准。这一标准流程得到许多工具的支撑,有来自Math....
的头像 电子设计 发表于 09-08 18:32 283次 阅读

使用51单片机实现一个水箱控制系统的设计说明

本单片机系统设计的目的是应用单片机控制技术,以8051单片机为核心控制庆丰热电公司的800立方米的水....
发表于 09-08 18:08 21次 阅读
使用51单片机实现一个水箱控制系统的设计说明

基于VxWorks操作系统实现PC/104-CAN适配卡的驱动系统设计

PC/104-CAN适配卡主要由CAN控制器(SJA1000)、光电隔离(6N137),收发驱动器(....
的头像 电子设计 发表于 09-08 17:51 277次 阅读

目前全球有超过20亿台计算机正在使用Windows XP

截至八月,全球有1.26%的计算机使用19年的操作系统。值得注意的是,就市场份额而言,Windows....
发表于 09-08 17:28 146次 阅读

Linux的成功,必不可少的几个条件

那时候Linus自己攒了一套386,但是找不到好用,廉价/免费的操作系统用。当时社区里当然也有一票免....
的头像 嵌入式ARM 发表于 09-08 15:04 53次 阅读

微软告诉你:Win 10操作系统中无法卸载预装应用

你是不是有这样的疑问,为什么Windows 10上预装的应用无法卸载呢(过去几年,微软强塞进来的预装....
发表于 09-08 13:58 84次 阅读

基于CPU-319F组态的SMC模块介绍

组态一个PROFINET网络下的SMC阀导EX245模块,SMC EX245网络阀导分,铜缆和光缆口....
的头像 机器人及PLC自动化应用 发表于 09-08 11:09 40次 阅读

Window 10操作系统的v1999和1903受追捧,占比已接近80%

对于不少用户来说,虽然微软已经发布了5月更新,但是很多人还是在Windows 10系统上停留在v19....
发表于 09-08 09:19 100次 阅读

深度学习将对音频处理产生深远影响 亚马逊团队深度噪声抑制挑战赛中获胜

人们普遍认为,深度学习最终将对音频处理产生深远影响。 虽然仍有很多挑战,比如数据增强,感知相关的....
的头像 LiveVideoStack 发表于 09-08 09:13 62次 阅读

广域网网络可满足绝大多数需求场景

刘韵洁认为,该成果可以满足未来工业自动化、工业遥操作、全息通信、车路协同等业务微秒级时延抖动保障需求....
发表于 09-07 15:56 70次 阅读

Window XP系统已推出20年,仍有千万人使用

Windows XP的推出可以追溯到2001年,在瞬息万变的计算机世界中,已经是20岁的“老古董”了....
发表于 09-07 14:25 168次 阅读

银河麒麟V10是全球首款实现具有内生安全体系的操作系统?

截至目前,麒麟软件累计申请发明专利320多项,这些发明专利涵盖操作系统安全、进程通信、文件系统等一系....
发表于 09-07 11:45 358次 阅读

龙芯推出主流国产处理器的全系列计算机软硬件产品

同方股份相关负责人表示,作为国家信息技术应用创新的重要参与方之一,同方股份切入的方式是通过构建“自主....
发表于 09-07 11:31 354次 阅读

如何使用grep命令的多种搜索模式及搜索多个字符串

今天向大家介绍一个非常有用的技巧,那就是使用 grep 命令查找多个字符串。简单介绍一下,grep ....
发表于 09-07 11:24 68次 阅读

Linux UI界面:自定义 GNOME 主题

GNOME 是一个相当简单和精简的 Linux 图形用户界面(GUI),很多用户喜欢它的简约外观。虽....
发表于 09-07 11:12 74次 阅读

如何实现Linux操作系统的回收站(附源码)

Linux 下 rm 命令是表示删除一个文件,而Linux是没有回收站机制,所以文件一旦删除的话,就....
发表于 09-07 09:44 132次 阅读

你真的了解银河麒麟操作系统吗

导读:提到国产操作系统,银河麒麟算是出现频率非常高的词了,可小伙伴们有花时间了解吗?
的头像 嵌入式ARM 发表于 09-07 09:30 341次 阅读

发那科PMC梯形图语言编程说明书

在讲述编程操作前,对顺序程序的功能进行简要说明所谓顺序程序是指对机床及相关设备进行逻辑控制的程序。在....
发表于 09-07 08:00 28次 阅读
发那科PMC梯形图语言编程说明书

PC电源接口正确连接的教程说明

PC电源的课堂文章,我们已经做过好几期的内容了,有涉及到电源PFC电路、EMI电路、模组接口、80P....
发表于 09-06 12:17 88次 阅读
PC电源接口正确连接的教程说明

中国传感器产业链逐渐完善,2021年市场规模将近3000亿元

在这十大园区中,长三角地区上榜6个;另外4个分布于北京、郑州、武汉和重庆。这个格局也基本反映了我国传....
发表于 09-06 11:26 391次 阅读

基于飞凌嵌入式开发板的交通信号控制机的设计与实现

交通信号机, 主控制箱由 3块板组成:电源板 ( 包含电源和主控制两个部分 ) 、灯驱板和检测板,细....
发表于 09-06 10:37 296次 阅读

Linux新发布用于容器托管的操作系统Bottlerocket的详细介绍

随着我们的客户越来越多地使用容器来运行其工作负载,设计Linux发行版以从头开始运行容器已经变得很流....
发表于 09-06 09:54 123次 阅读
Linux新发布用于容器托管的操作系统Bottlerocket的详细介绍

芯通嵌入式设备能够进行软硬件迁移

8月18日14:00-15:20,兆芯携手研华科技、华电众信、瑞强信息等企业就能源行业的相关迁移应用....
的头像 兆芯 发表于 09-06 09:20 180次 阅读

5G会带来对创新链的支配权,从根产业带来根经济的发展

科技日报社副社长房汉廷应邀出席了此次论坛,并作了题为“5G的经济效应及对贸易方式的颠覆”的主题演讲。
发表于 09-06 09:18 61次 阅读
5G会带来对创新链的支配权,从根产业带来根经济的发展

RedBoot引导程序在SmartARM2200开发板中的移植参考研究

eCos(embedded Configurable operating system)最初是由Cy....
的头像 电子设计 发表于 09-05 12:23 1505次 阅读

Symbian和WinCE操作系统的内存管理技术研究

Symbian操作系统是智能手机市场中的主要成员,其市场份额超过70%。该操作系统由英国Symbia....
的头像 电子设计 发表于 09-05 12:21 472次 阅读

SDCC编译器和FreeRTOS实时操作系统的优缺点及应用研究

FreeRTOS是为小型嵌入式系统开发的一个开放源代码、免费的实时操作系统内核。其内核大部分使用C语....
的头像 电子设计 发表于 09-05 12:16 641次 阅读

Win95的25年发展史:如何打败Win10操作系统

Windows 95诞生25周年了。虽然Win95并非是首款Windows系统,但很多Win系统的经....
发表于 09-05 10:36 962次 阅读

华为已确定海外市场的战略扩张计划,年底将在海外开50家店

9月3日晚,华为在IFA 2020开幕活动中举办了名为“对欧洲的愿景和承诺”演讲,虽然没有带来新品比....
发表于 09-05 10:13 712次 阅读

最好的国产系统能否与Windows 10一战?又该如何发展?

上周,统信软件旗下的UOS操作系统正式推出UOS V20个人版,并开启99元预售活动。统信UOS虽名....
发表于 09-05 09:19 191次 阅读

Arm提出R8处理器将广泛用于调制解调器子系统内部的5G连接u乐平台官网

微架构的另一大变化是加入了MMU,这使得Cortex-82实际上可以作为Linux等丰富操作系统的通....
发表于 09-04 16:44 354次 阅读
Arm提出R8处理器将广泛用于调制解调器子系统内部的5G连接u乐平台官网

三星代工IBM最新处理器芯片

来源:半导体行业圈 国际商业机器公司(IBM)周一宣布推出一款新的数据中心处理器芯片,处理能力将提高....
的头像 旺材芯片 发表于 09-04 16:34 1101次 阅读

The Linley Group列为2011年全球领先DSP IP付运厂商

全球领先的硅产品知识产权(SIP)平台u乐平台官网和数字信号处理器(DSP)内核授权厂商CEVA公司宣布....
发表于 09-04 16:06 254次 阅读

41项测试一次过!宁畅八款服务器获Windows Server权威认证

这八款产品涵盖了宁畅旗舰机架服务器R620/R610/R420系列,人工智能服务器X640/X620....
发表于 09-04 16:04 165次 阅读

微机原理及应用的复习题资料合集

本文档的主要内容详细介绍的是微机原理及应用的复习题资料合集免费下载。
发表于 09-04 15:27 67次 阅读
微机原理及应用的复习题资料合集

英特尔推基于Evo平台电脑,配备“世界上最好的轻薄型笔记本处理器”

近日,英特尔通过线上发布会正式推出了第11代酷睿处理器“Tiger Lake”,并将其定义为“世界上....
发表于 09-04 15:07 438次 阅读
英特尔推基于Evo平台电脑,配备“世界上最好的轻薄型笔记本处理器”

CPU与GPU的区别

异构计算(Heterogeneous Computing)在80年代中期就已产生,其定义更加宽泛。异....
的头像 电子工程技术 发表于 09-04 15:03 310次 阅读

使用RT-Thread Studio来实现疫情监控平台

开发板用的是我在大四时自己设计的STM32开发板——NiceDay,基于STM32F103RET主控....
的头像 RTThread物联网操作系统 发表于 09-04 14:49 159次 阅读

RT-Thread Smart和Linux相比

操作系统有用户态和内核态两种运行空间,进程空间互相隔离,用户态与内核态相互隔离,驱动、应用程序、服务....
的头像 RTThread物联网操作系统 发表于 09-04 14:36 598次 阅读

如何通过SD卡和ymodem串口升级固件

使用TouchGFX 4.14.0 Designer添加设置界面。增加进度条,和两个按钮,以及固件版....
的头像 RTThread物联网操作系统 发表于 09-04 14:32 55次 阅读

智能经济助推移动互联网行业升级,百度赋能力度再升级

百度集团执行副总裁沈抖、百度联盟总经理陈一凡、百度集团副总裁袁佛玉出席会议。
发表于 09-04 14:29 270次 阅读

Vulkan图形处理过程中遇到的问题

在本篇文章中,我们将提到Vulkan 图形处理过程中夹杂计算任务时遇到的各式问题。为更准确地了解我们....
的头像 Imagination Tech 发表于 09-04 11:45 163次 阅读

新手必知:什么是 Linux 中的桌面环境?

在桌面 Linux 世界中,最常用的术语之一就是 桌面环境(Desktop Environment)....
发表于 09-04 10:58 105次 阅读

实现物联网安全的关键是什么?

幸运的是,对于开发者来说,设备监控软件正变得可以让开发者投入到他们的物联网设计中,从而使他们能够专注....
发表于 09-04 10:36 397次 阅读

ST这个系列的微控制器对于很多工程师来说都不陌生,该系列主流8位微控制器适用于工业,消费类和计算机市场的各种应用,尤其是大...
发表于 09-03 17:58 101次 阅读

多任务实时操作系统RTX51 Tiny的概念和应用问题探究

μVision是德国Keil公司开发的单片机IDE软件,最初主要用于8051系列单片机,目前也有支持....
的头像 电子设计 发表于 09-03 17:48 485次 阅读

功率智能型硬件u乐平台官网实现均衡系统总响应度及功耗

随着对移动和有线设备的能源效率需求的增长,系统开发人员会越来越多地使用功率智能型硬件u乐平台官网,而更加....
的头像 电子设计 发表于 09-03 17:22 474次 阅读

电视流媒体平台和设备将成为视频流媒体的主导力量

Strategy Analytics电视流媒体平台服务最新发布的研究报告指出,全球电视流媒体和视频流....
发表于 09-03 17:01 254次 阅读

前言TL2837x-EasyEVM是一款基于广州创龙SOM-TL2837x核心板所设计的高端单/双核浮点开发板,它为用户提供了SOM-TL...
发表于 09-03 16:05 0次 阅读

  内部中断:一般是由硬件错误或者运算过程中出错引起的,一般是不可避免的;   外部中断:是处理器的外设发出的中断请求,如...
发表于 09-01 16:46 0次 阅读

概述       PSoC®5LP在单芯片Armu乐平台官网中为性能提供了卓越的价格,降低了系统成本并简化了系统设...
发表于 09-01 11:13 101次 阅读

在学习8086汇编时,我在虚拟机上安装了MS-DOS(假设就是在真实的8086计算机的DOS里,就是想知道在真实的那种DOS里的情...
发表于 08-28 08:06 0次 阅读

  1、用于可加载VxWorks映象的BOOTROM   用于可加载VxWorks映象的BOOTROM包含两部分:起始引导程序(Bo...
发表于 08-25 11:23 505次 阅读

1、目标板加电运行(汇编语言)目标板加电之后,程序指针指向RESET中断程序入口处,开始执行初始化程序romInit.s,设置机器...
发表于 08-25 11:22 505次 阅读

AN0029—如何在擦除或者编程过程中保证CPU重要内容正常运行 概述 有些应用有着严格实时需求,需要在操作闪存擦除/编程时...
发表于 08-24 11:31 505次 阅读

64位操作系统win7安装arduino驱动装不上呢
发表于 08-18 01:04 0次 阅读

TMS320VC5501 定点数字信号处理器

TMS320VC5501(5501)定点数字信号处理器(DSP)基于TMS320C55x™DSP生成CPU处理器内核。 C55x™DSP架构通过增加并行性和全面关注降低功耗来实现高性能和低功耗。 CPU支持内部总线结构,该结构由一个程序总线,三个数据读总线,两个数据写总线以及专用于外设和DMA活动的附加总线组成。这些总线能够在一个周期内执行最多三次数据读取和两次数据写入。并行,DMA控制器可以独立于CPU活动执行数据传输。 C55x™CPU提供两个乘法累加(MAC)单元,每个单元能够进行17位×17位乘法运算。单循环。额外的16位ALU支持中央40位算术/逻辑单元(ALU)。 ALU的使用受指令集控制,提供优化并行活动和功耗的能力。这些资源在C55x CPU的地址单元(AU)和数据单元(DU)中进行管理。 C55x DSP代支持可变字节宽度指令集,以提高代码密度。指令单元(IU)从内部或外部存储器执行32位程序提取,并为程序单元(PU)排队指令。程序单元解码指令,将任务指向AU和DU资源,并管理完全受保护的管道。预测分支功能可避免执行条件指令时的管道刷新。 5501外设...
发表于 10-09 14:55 253次 阅读
TMS320VC5501 定点数字信号处理器

RTThread物联网操作系统

文章:105 被阅读:441819u乐平台官网

关注 79人关注
亚洲城ca88官网 betway必威官网 必威官网体育 188体育官网 365bet体育官网 hg0088官网 龙虎国际|官网 米乐体育官网 千亿网站官网 betway体育|u乐平台官网