【问题标题】:OS Heap and OS stack in an multicore OS多核操作系统中的操作系统堆和操作系统堆栈
【发布时间】:2014-05-27 23:03:00
【问题描述】:

我正在编写一个小型 smp 内核,现在我正在添加对第二个内核的支持。 以下是一些突然出现的问题

a) 我相信每个核心都会有自己的堆栈,并在 lds 文件中定义

b) 我相信每个核心都有自己的堆(用于 malloc),并且在 lds 文件中定义

c) 常见的数据结构应该放在 bss 部分

d) 对于每个 cpu 变量,要在 lds 文件中设置每个内核的 _per_cpu_area 和一个寄存器说 r0 将始终指向每个 cpu 部分

e) 跨内核锁定以在 bss 部分提供帮助

这些假设正确吗? 请验证或提出任何问题

【问题讨论】:

    标签: operating-system x86 arm multicore


    【解决方案1】:

    假设一个抢占式多任务处理程序:

    a) 我相信每个核心都会有自己的堆栈 在 lds 文件中定义

    核心没有堆栈,它们有堆栈指针,可以在线程上下文更改时交换。线程有栈。

    b) 我相信每个核心都会有自己的堆(用于 malloc),并且 是否在 lds 文件中定义

    核心没有堆。进程有堆。

    c) 常用数据结构应该放在 bss 部分

    也许,取决于是否只读。

    d) 对于每个 cpu 变量,为每个核心设置一个 _per_cpu_area lds 文件和一个寄存器说 r0 将始终指向每个 cpu 部分

    CPU 通常没有变量,除非您指的是硬件寄存器,而您似乎没有。

    e) 跨内核锁定以在 bss 部分提供帮助

    核心没有 bss 部分。应用程序有 bss 部分。 bss 中的 vars 可能需要锁,如果多个线程可以访问它们,无论是一个内核还是多个内核。

    您需要谷歌/阅读有关操作系统操作的更多信息 - 您有些事情相当困惑。

    【讨论】:

    • Martin James 的最后一条评论:去买一本让 Linus Torvolds 如此不高兴的书:Andrew Tannenbaum 的现代操作系统 - 其中解释了很多这个理论。
    【解决方案2】:
    Functions have stacks,
    Processes have heaps,
       where they all shared by those nasty threads...
    Only zero initialized data goes into BSS,
       and you should see Linux's per_cpu...
    

    【讨论】:

      猜你喜欢
      • 2020-09-26
      • 1970-01-01
      • 2015-09-05
      • 2012-05-04
      • 2011-06-22
      • 2011-11-08
      • 2012-02-05
      • 2016-10-21
      • 1970-01-01
      相关资源
      最近更新 更多