我正在编写一个小的smp内核,现在我正在添加对第二个内核的支持。下面是一些正在出现的问题
a)我相信每个内核都会有自己的堆栈,并在lds文件中定义
b)我相信每个内核都会有自己的堆(用于malloc),并在lds文件中定义
c)公共数据结构应该放在bss部分
d)对于每个cpu变量,将在lds文件中设置每个核心的_per_cpu_area和一个寄存器,例如r0将始终指向每个cpu段。
e) bss部分中需要帮助的跨核心锁定
这些假设是正确的吗?请验证或提出任何问题
发布于 2014-04-14 15:12:34
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...发布于 2014-04-14 21:42:18
假设一个抢占式多任务处理机:
a)我相信每个内核都会有自己的堆栈,并在lds文件中定义。
内核没有堆栈,它们有堆栈指针,这些指针在线程上下文变化时交换。线程有堆栈。
b)我相信每个内核都会有自己的堆(对于malloc),并在lds文件中定义。
内核没有堆。进程有堆。
c)公共数据结构应该放在bss部分
可能,取决于是否为只读。
d)对于每个cpu变量,将在lds文件中设置每个内核的_per_cpu_area和一个寄存器,例如r0将始终指向每个cpu段。
CPU通常没有变量,除非你指的是硬件寄存器,看起来你没有。
e)跨核心的锁定将在bss部分中得到帮助
核心没有bss部分。应用程序有bss部分。如果多个线程可以访问bss中的Vars,那么它们可能需要锁,而不管是一个内核还是多个内核。
你需要Google/阅读更多关于操作系统操作的信息--你对一些事情相当困惑。
https://stackoverflow.com/questions/23052426
复制相似问题