2014-06-25 41 views

回答

3

在linux中爲每個進程保留不同的內核堆棧有什麼意義?

它簡化了內核空間中進程的搶佔。

爲什麼不爲內核保留一個堆棧?

這將是一個夜間實施先發制人沒有單獨堆棧的母馬。


單獨的內核堆棧並沒有真正強制要求。每個架構都可以隨心所欲地做任何事情。如果在系統調用期間不存在per-emption,那麼單個內核堆棧可能有意義。

但是,* nix有進程,每個進程都可以進行系統調用。但是,Linux允許一個任務在write()等期間被預佔,另一個任務被調度。內核堆棧是每個進程正在執行的內核工作上下文的快照。

此外,每進程內核堆棧的開銷很小。 A thread_info或某些從彙編程序獲取進程信息的機制是必需的。這至少是一個頁面分配。通過將內核模式堆棧放在同一位置,一個簡單的掩碼可以從彙編器獲得thread_info。所以,我們已經需要每個進程的變量和分配。爲什麼不使用它作爲堆棧來存儲內核上下文並在系統調用期間允許搶佔?

1

爲什麼不爲內核保留一個堆棧?

在這種情況下,一次只能有一個進程/線程進入內核。

基本上,每個線程都有自己的堆棧,並且將用戶空間交叉到內核邊界並不會改變這一事實。內核也有它自己的內核線程(不屬於任何用戶空間進程),它們都有自己的棧。

相關問題