其他分享
首页 > 其他分享> > RTOS介绍------十、Multicore Systems

RTOS介绍------十、Multicore Systems

作者:互联网

Concepts

Asymmetric multiprocessing 非对称多核 (AMP) 和 symmetric multiprocessing 对称多核 (SMP)的区别。
在这里插入图片描述

AMP 是一种编程范式,它使用多个内核或处理器同时运行多个任务。 它需要一个核心/处理器作为运行操作系统 (OS) 的主核。 它将工作发送到其他核,称为辅核。 请注意,这些内核可能是也可能不是相同的架构。 事实上,您可以在不同的计算机上设置 AMP 配置。

SMP 也是一种范式,它允许多线程程序在多个内核上运行。 但是,在 SMP 中,每个内核运行操作系统的副本。 每个核中的调度程序独立运行,从共享列表中选择运行任务。 SMP 要求内核紧密耦合,通常共享 RAM 和其他资源。 因此,您通常会发现 SMP 构建在同一架构的多个内核之上。

ESP-IDF 是对 FreeRTOS 的修改,配置用于 SMP 操作。 ESP32 使用 Xtensa LX6 处理器,您遇到的大多数变体都包含两个内核。
在这里插入图片描述

ESP-IDF 操作系统支持将任务固定到内核,这意味着您可以分配其中一个内核来运行特定任务。 它还支持“无关联”的任务,这意味着该任务可以在任一核心上运行。

ESP32 中的内核标记为“Core 0”和“Core 1”。 Core 0 被称为“Protocol Core”或“PRO CPU”。 在默认的 ESP32 应用程序中,与协议相关的任务(如 WiFi 和蓝牙)分配给此内核。 Core 1 被称为“Application Core”或“APP CPU”,负责运行用户应用程序。

注意这是默认行为。 当然也可以自由地将任务分配给任一核或为任务选择“无关联”。 但是,对于大多数微控制器应用程序,我们建议将任务固定到内核(您将很快看到)。

每个内核都维护自己的中断列表、定时器列表,如果是运行 ESP-IDF,还包括调度程序。 RAM 在内核之间共享,但为 Core 0 缓存留出一部分 RAM,为 Core 1 缓存留出另一部分。

每当任一核中的调度程序运行时,它都会查看任务的共享列表以查看哪个任务处于就绪状态。 它将选择 处于就绪状态并具有最高优先级的任务。 但是,只有当该任务的 xCoreID 字段为“无关联”或与调用处理器核心编号匹配时,它才会运行该任务。

因为您的特定双核微控制器可能与 ESP32 不同,我建议您阅读处理器的文档。 这是一篇很棒的文章,向您展示了 ESP-IDF 在 ESP32 中的工作原理:https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/freertos-smp.html

对于许多通用操作系统,将任务列为“无关联”并让调度程序选择它运行在哪个内核上通常更容易。 这样做的好处是更易于使用,并且会在平衡处理负载的同时自动优化任务之间的 CPU 使用时间。

但是,许多处理器(包括 ESP32)要求中断服务程序(ISR)在设置中断的内核中运行。 结果,你可能不知道什么时候会打断一个“无关联”的任务。 此外,每当任务移动到不同的核心时,新核心都会遇到缓存未命中,并且需要使用该任务的数据更新其缓存。

在这里插入图片描述
这些问题使得精确预测处理器中任务的时间变得更加困难。 如果您的应用程序需要高确定性,您可能希望将任务固定到核心。

Recommended Reading

introduction-to-rtos-solution-to-part-12-multicore-systems:https://www.digikey.com/en/maker/projects/introduction-to-rtos-solution-to-part-12-multicore-systems/369936f5671d4207a2c954c0637e7d50
ESP-IDF FreeRTOS SMP Changes: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/freertos-smp.html
ESP32 Interrupt Allocation (specifically, see the “Multicore Issues” section): https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/intr_alloc.html
Adding simple mutlicore support to FreeRTOS: https://www.freertos.org/2020/02/simple-multicore-core-to-core-communication-using-freertos-message-buffers.html

标签:Core,ESP32,RTOS,SMP,任务,Multicore,内核,------,运行
来源: https://blog.csdn.net/cesare20/article/details/122737225