【问题标题】:Multicore ARM: how to assign a critical task to one dedicated core多核 ARM:如何将关键任务分配给一个专用内核
【发布时间】:2018-02-15 17:15:22
【问题描述】:

假设一个嵌入式系统项目,我有一个多核 ARM 处理器(为简单起见,假设 2 个内核在 2 个内核之间有一个未共享的缓存)。假设我的系统包含一个关键任务和几个非关键任务。

因此,我可以将关键任务专门分配给“核心 1”吗?以及所有其他“核心 2”?

如果是这样,从实现的角度来看,如何做以及最佳实践是什么[假设我使用 C]?我应该使用图书馆(如果是的话)?实时操作系统?

【问题讨论】:

  • 您应该能够为您正在运行的线程设置核心亲和性,以确保您的操作系统将其放置到您想要的核心上。 en.wikipedia.org/wiki/Processor_affinity
  • 有 id 寄存器,你当然可以将代码隔离到一个内核,如果 id register = core0 则做其他事情。但是...如果是裸机,如果不是裸机,那么您需要知道您正在使用的操作系统是如何工作的,这是一个不同的问题,和/或该操作系统可能没有该功能。所以这个问题写得太宽泛了,但从技术角度来看,是的,你可以做这样的事情。
  • “两个核心之间的非共享缓存” - 你的意思是,每个核心都有自己的私有缓存?
  • @Vroomfondel 是的 [在 L2 和 L3 级别]

标签: arm embedded multicore rtos


【解决方案1】:

好的,我看到你也在 EE 板上问过这个问题。他们给出了同样的答案,我也想给你。使用某种操作系统来处理线程关联。如果您的 RTOS 或您拥有的任何东西不支持此功能,请查看它并查看它实际上是如何处理进程/线程调度的。

通常,系统上的每个 CPU 都会被分配某种处理任务调度的线程。这个线程是操作系统设置的第一件事。随意研究一些微内核,看看这是如何为您的特定处理器完成的。您还可以在 ARM 文档中为您的特定 CPU 找到设置此线程的秘诀。

但是,我冒昧地假设这远远超出了为项目分配给您的任何任务的范围。我希望你在得到的东西中具有某种亲和力。为已知操作系统设置亲和性是几秒钟的任务。在完全没有操作系统的裸机系统上设置关联性要复杂得多。

原问题: https://electronics.stackexchange.com/questions/356225/multicore-arm-how-to-assign-a-critical-task-to-one-dedicated-core#comment854845_356225

【讨论】:

  • 非常感谢迈克尔,实际上,与 EE 中的答案相比,您的答案增加了细节。我很快就会将此案标记为已解决。
【解决方案2】:

如果您不需要实时功能,您可以在具有 Linux 内核的设备上轻松完成此操作。

看到这个问题here

【讨论】:

    猜你喜欢
    • 2015-09-12
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    相关资源
    最近更新 更多