我在寫一個小的smp內核,現在我正在爲第二個內核添加支持。 這裏是被突然出現OS堆棧和OS堆棧在多核操作系統中
幾個問題一)我相信每個核心將有自己的堆棧和具有在LDS文件中定義
B)我相信每個核心將有自己的堆(爲malloc的),並且具有在LDS文件中定義
c)中共同的數據結構應該在bss段
d)對於每個CPU變量_per_cpu_area對於每個核心在LDS文件和一個寄存器中設置說r0總是會指向每個cpu部分
e)鎖定核心在bss部分幫助
這些假設是否正確? 請確認或提出任何問題
我在寫一個小的smp內核,現在我正在爲第二個內核添加支持。 這裏是被突然出現OS堆棧和OS堆棧在多核操作系統中
幾個問題一)我相信每個核心將有自己的堆棧和具有在LDS文件中定義
B)我相信每個核心將有自己的堆(爲malloc的),並且具有在LDS文件中定義
c)中共同的數據結構應該在bss段
d)對於每個CPU變量_per_cpu_area對於每個核心在LDS文件和一個寄存器中設置說r0總是會指向每個cpu部分
e)鎖定核心在bss部分幫助
這些假設是否正確? 請確認或提出任何問題
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...
假設搶佔多任務:
一)我相信每個核心將有自己的堆棧和具有在LDS定義 文件
核心沒有堆棧,它們具有堆棧指針,它們在線程上下文更改時被交換。線程有堆棧。
B)我相信每個核心將有自己的堆(爲malloc的),並且 有在LDS文件中定義
核心沒有堆。過程堆積如山。
C)常用的數據結構應在BSS部分去
也許,取決於是否只讀。
d)對於每個CPU變量,每個核心一個_per_cpu_area在 LDS文件中設置和寄存器說R0總是指向每個CPU部分
CPU的一般不會有變數,除非你的意思是硬件寄存器,它看起來你沒有。在覈
E)鎖在BSS部幫助
核心沒有BSS部分。應用程序有bss部分。如果多個線程可以訪問它們,無論是一個核心還是多個核心,bss中的變量都可能需要鎖定。
您需要谷歌/閱讀更多關於操作系統操作 - 你有一些事情相當困惑。
除了Martin James的最後一條評論之外:去買一本讓Linus Torvolds如此不開心的書:Andrew Tannenbaum撰寫的現代操作系統 - 這個理論有很多解釋。 – marko