【问题标题】:How to use __attribute__((section(“name”))) for a per-cpu global variable如何将 __attribute__((section(“name”))) 用于 per-cpu 全局变量
【发布时间】:2020-09-17 17:57:59
【问题描述】:

我遇到了对每个 cpu 全局变量使用 __attribute__((section(“name”))) 的代码。我已经对其进行了搜索,并了解到它用于在链接器脚本的帮助下将数据放置在指定的内存位置。我不明白的是如何将它用于 per-cpu 数据 - 也就是说,如果将全局变量放在用 __attribute__((section(“name”))) 定义的部分内,那么每个 cpu 都有自己的副本这个全局变量。我可能错了,但我的直觉是链接器脚本与__attribute__((section)) 一起使用来实现这一点。但是我不知道怎么做。一个小的工作示例,或者如何在代码中实现这一点的提示会很棒。

注意:这个问题是关于 C 语言的。

【问题讨论】:

    标签: c gcc linker


    【解决方案1】:

    操作系统/内核以这样一种方式初始化硬件,即该内存位置的数据不是全局共享的,而是特定于每个 CPU 的。据推测,这是通过在每个 CPU 上安装略有不同的页表来实现的。 section 属性所做的只是将变量放入特定的内存区域,但是一旦将底层硬件配置为启用跨 CPU 共享的缺乏,这就是使变量特定于 CPU 所需的全部内容。

    【讨论】:

    • 哦。那么为全局变量保留的虚拟地址映射到每个cpu不同的某个机器页面?
    • 是的,在典型的实现中,物理地址会有所不同。
    猜你喜欢
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 2022-01-06
    • 1970-01-01
    • 2018-01-28
    相关资源
    最近更新 更多