4
A
回答
3
在linux中爲每個進程保留不同的內核堆棧有什麼意義?
它簡化了內核空間中進程的搶佔。
爲什麼不爲內核保留一個堆棧?
這將是一個夜間實施先發制人沒有單獨堆棧的母馬。
單獨的內核堆棧並沒有真正強制要求。每個架構都可以隨心所欲地做任何事情。如果在系統調用期間不存在per-emption,那麼單個內核堆棧可能有意義。
但是,* nix有進程,每個進程都可以進行系統調用。但是,Linux允許一個任務在write()
等期間被預佔,另一個任務被調度。內核堆棧是每個進程正在執行的內核工作上下文的快照。
此外,每進程內核堆棧的開銷很小。 A thread_info
或某些從彙編程序獲取進程信息的機制是必需的。這至少是一個頁面分配。通過將內核模式堆棧放在同一位置,一個簡單的掩碼可以從彙編器獲得thread_info
。所以,我們已經需要每個進程的變量和分配。爲什麼不使用它作爲堆棧來存儲內核上下文並在系統調用期間允許搶佔?
1
爲什麼不爲內核保留一個堆棧?
在這種情況下,一次只能有一個進程/線程進入內核。
基本上,每個線程都有自己的堆棧,並且將用戶空間交叉到內核邊界並不會改變這一事實。內核也有它自己的內核線程(不屬於任何用戶空間進程),它們都有自己的棧。
相關問題
- 1. 爲什麼GHC爲每個線程都有一個堆棧?
- 2. linux進程的內核堆棧
- 3. 是否存在每個進程的內核堆棧?
- 4. 進程創建時的Linux進程內核堆棧狀態是什麼?
- 5. 用戶進程的內核堆棧| Linux內核
- 6. 每個進程都有自己的內核堆棧,對吧?
- 7. 在linux中獲取每個進程的堆棧和堆棧的大小
- 8. 在linux中,所有內核進程共享相同的內核堆棧,每個用戶進程都有自己的堆棧,對嗎?
- 9. Linux內核中的堆棧內存
- 10. C++堆棧/堆棧。爲什麼只有一個新操作員?
- 11. 每個進程有多個堆棧?
- 12. 爲什麼在調用方法時,gcc 4.x默認爲linux上的堆棧保留8個字節?
- 13. 關於堆溢出或堆棧溢出的Linux內核行爲
- 14. 兩個進程具有相同的堆棧指針。爲什麼?
- 15. Linux內核中的TCP/IP堆棧
- 16. 在內核調試中訪問進程的內核堆棧給定進程ID
- 17. 堆棧爲空...爲什麼?
- 18. 爲什麼我們需要單獨的內核棧爲每個CPU
- 19. 爲什麼這個堆棧粉碎?
- 20. 爲什麼setjmp不能保存堆棧?
- 21. 爲什麼Linux內核#定義一個符號本身?
- 22. Linux上的Zigbee堆棧(主線內核)?
- 23. 找出爲什麼一個進程花費在win32內核中的時間
- 24. 什麼是Linux堆棧?
- 25. 爲什麼使用兩個堆棧來創建一個隊列?
- 26. 爲什麼Forth每個變量保留兩個單元格?
- 27. 調度 - 每個進程有一個或多個內核堆棧的上下文切換
- 28. 爲什麼單個線程進程在多個處理器/內核上執行?
- 29. Linux內核對進程暫停的時間有什麼保證?
- 30. 爲什麼在將CPU從一個進程切換到另一個進程時需要保留地址空間?
這個問題:http://stackoverflow.com/questions/886807/kernel-stack-for-linux-process有一些相關的信息 –