参考文献:
【1】邱玮,熊谱翔,朱天龙. 嵌入式实时操作系统:RT-Thread设计与实现[M]. 北京:机械工业出版社,2019.
RT-thread线程的概念
是操作系统中最小的调度单位,线程调度算法是基于优先级的全抢占式多线程调度算法,即在系统中除了中断处理函数、调度器上锁部分的代码和禁止中断的代码不可抢占外,系统的其他部分都可以抢占,包括线程调度器自身。支持256个优先级。
rt中并不存在运行状态,就绪和运行状态是等同的
常见的调度算法
时间片轮转调度算法(RR):
给每个进程固定的执行时间,根据进程到达的先后顺序让进程在单位时间片内执行,执行完成后便调度下一个进程执行,时间片轮转调度不考虑进程等待时间和执行时间,属于抢占式调度。优点是兼顾长短作业;缺点是平均等待时间较长,上下文切换较费时。适用于分时系统。
先来先服务调度算法(FCFS):
根据进程到达的先后顺序执行进程,不考虑等待时间和执行时间,会产生饥饿现象。属于非抢占式调度,优点是公平,实现简单;缺点是不利于短作业。
优先级调度算法(HPF):
在进程等待队列中选择优先级最高的来执行。常被用于批处理系统中,还可用于实时系统中。
RT系统启动流程:分4个部分
- 初始化与系统相关的硬件
- 初始化系统内核对象:定时器、调度器、信号等
- 创建main线程,对各类模块依次初始化
- 初始化定时器线程、空闲线程,并启动调度器(为系统提供心跳)
RT内存管理:
动态内存堆管理和静态内存池管理(三种算法只能选择一种)
- 小内存管理算法
分配内存时切割相匹配的内存块,分割出来的空闲内存块还给堆管理系统。每个内存块都包含一个管理用的数据头,用双向链表的方式把空闲块与使用块链接起来。用户线程分配内存块的时候链表指针如果指向内存块大小不足,则继续通过链表找到下一个内存块,下一个如果太大,分配器将内存块进行拆分。释放的时候分配器会查看前后相邻的内存块是否空闲,然后合成一个大的空闲内存块。 - slab管理算法
- memheap管理算法