这是一个简单的问题:freeRTOS 是否像“真正的”Linux 系统那样处理多个进程中的多个线程?
5 回答
FreeRTOS 不是 Linux,也不假装是,尽管它本身就是一个跨平台标准内核,因为它支持 26 个不同的内核——但它是为微控制器而不是微处理器设计的。但是,这些内核中的大多数不使用 MMU,因此没有进程的概念。如果您愿意,所有任务都是在单个“进程”中运行的“线程”。这就是为什么我使用术语“任务”以免引起混淆。虽然有支持使用 MPU 的 FreeRTOS 版本,这允许内存分区和访问权限,如 MMU,但在线性而不是虚拟地址空间中。
FreeRTOS 使用一个简单的优先级调度程序,在此处记录。
我不确定像 Linux 那样处理线程是什么意思,但是如果每个线程都具有相同的优先级,那么它们应该被公平地分配 CPU 时间。
是的,rmmh 是正确的,具有相似优先级的任务也将被分配 CPU 时间。这可以从以下网站看到:
http://www.freertos.org/implementation/a00007.html
另外一点,FreeRTOS,顾名思义,是一个实时操作系统。话虽如此,FreeRTOS 可以配置为像 Linux 那样的分时系统执行,反之亦然。
希望有帮助。干杯!
不。(免费)RTOS 通常没有与 Linux 等通用 GPOS 相同的进程和线程概念。经常使用术语“任务”来避免混淆。
也就是说,您可能会看看FreeRTOS coroutines,它们是 FreeRTOS 中的一种执行线程内部任务。
每个进程/线程/任务都有自己的堆栈。FreeRTOS 为此目的从堆中分配内存。这是 FreeRTOS 在从 Task_A 到 Task_B 进行上下文切换时所做的: (1) 将 CPU 寄存器中的所有内容推送到 Task_A 的堆栈中。(2) 使CPU堆栈指针指向Task_B的堆栈,而不是Task_A。(3) Task_B 的堆栈顶部有 CPU 寄存器,表示当 Task_B 进入睡眠状态时 CPU 的“已保存状态”。现在是时候将这些值恢复到 CPU 寄存器了。(4) 继续运行任务 B。
这种上下文切换通常在 FreeRTOS 中非常频繁地发生。这样,FreeRTOS 操作系统可以确保所有具有最高优先级的任务都获得 CPU 时间的份额。当较高优先级的任务无法运行时,具有较低优先级的任务会获得 CPU 时间,例如。当他们等待队列、信号量、..
据我所知,FreeRTOS 不支持多核。FreeRTOS 通常在只有一个 CPU 内核的微型微控制器上运行。