2014-04-14 228 views
0

我在寫一個小的smp內核,現在我正在爲第二個內核添加支持。 這裏是被突然出現OS堆棧和OS堆棧在多核操作系統中

幾個問題

一)我相信每個核心將有自己的堆棧和具有在LDS文件中定義

B)我相信每個核心將有自己的堆(爲malloc的),並且具有在LDS文件中定義

c)中共同的數據結構應該在bss段

d)對於每個CPU變量_per_cpu_area對於每個核心在LDS文件和一個寄存器中設置說r0總是會指向每個cpu部分

e)鎖定核心在bss部分幫助

這些假設是否正確? 請確認或提出任何問題

回答

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... 
0

假設搶佔多任務:

一)我相信每個核心將有自己的堆棧和具有在LDS定義 文件

核心沒有堆棧,它們具有堆棧指針,它們在線程上下文更改時被交換。線程有堆棧。

B)我相信每個核心將有自己的堆(爲malloc的),並且 有在LDS文件中定義

核心沒有堆。過程堆積如山。

C)常用的數據結構應在BSS部分去

也許,取決於是否只讀。

d)對於每個CPU變量,每個核心一個_per_cpu_area在 LDS文件中設置和寄存器說R0總是指向每個CPU部分

CPU的一般不會有變數,除非你的意思是硬件寄存器,它看起來你沒有。在覈

E)鎖在BSS部幫助

核心沒有BSS部分。應用程序有bss部分。如果多個線程可以訪問它們,無論是一個核心還是多個核心,bss中的變量都可能需要鎖定。

您需要谷歌/閱讀更多關於操作系統操作 - 你有一些事情相當困惑。

+0

除了Martin James的最後一條評論之外:去買一本讓Linus Torvolds如此不開心的書:Andrew Tannenbaum撰寫的現代操作系統 - 這個理論有很多解釋。 – marko