我正在编写一个小的smp内核,现在我正在添加对第二个内核的支持。 以下是一些正在出现的问题
a)我相信每个核心都有自己的堆栈,并且在lds文件中定义
b)我相信每个核心都有自己的堆(对于malloc),并且在lds文件中定义
c)常见的数据结构应该放在bss部分
d)对于每个cpu变量,每个核心的_per_cpu_area要在lds文件中设置,寄存器说r0总是指向每个cpu部分
e)锁定核心以获得bss部分的帮助
这些假设是否正确? 请验证或提出任何问题
答案 0 :(得分:1)
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...
答案 1 :(得分:0)
假设有一个先发制人的多任务:
a)我相信每个核心都有自己的堆栈,并且具有be 在lds文件中定义
核心没有堆栈,它们有堆栈指针,可以在线程上下文更改时进行交换。线程有堆栈。
b)我相信每个核心都有自己的堆(对于malloc) 在lds文件中定义
核心没有堆积。流程有很多。
c)常见的数据结构应该放在bss部分
也许,取决于只读。
d)对于每个cpu变量,要设置每个核心的_per_cpu_area lds文件和寄存器说r0总是指向每个cpu部分
CPU通常没有变量,除非你的意思是硬件寄存器,而你似乎并不是这样。
e)锁定核心以获得bss部分的帮助
核心没有bss部分。应用程序有bss部分。如果多个线程可以访问它们,那么bss中的Vars可能需要锁定,无论是一个核心还是更多核心。
你需要谷歌/阅读有关操作系统操作的更多信息 - 你有些事情比较困惑。