所有進程共享的內核堆棧還是每個進程都有獨立的內核堆棧?如果這個堆棧指針存儲在哪個進程的每個進程是分開的?在task_struct中?linux進程的內核堆棧
21
A
回答
17
只有一個普通的內核內存。其中每個進程都有自己的task_struct +內核堆棧(默認8K)。
在上下文切換中,舊的堆棧指針保存在某處,並且實際的堆棧指針指向要運行的新進程的棧頂(或底部,取決於硬件體系結構)。
12
This old article表示每個進程都有自己的內核堆棧。看到爲什麼這似乎是一個非常好的設計評論。
我試過reading the current source來確定,但由於內核堆棧是「隱含的」,它在task_struct
中不可見。這在文章中提到。
此答案已經過編輯,以結合評論中的智慧。謝謝。
2
Robert Love的書「Linux kernel Development」對進程內核棧有很好的解釋。
是的,每個進程都有自己的內核堆棧,如果我沒有錯,它的指針就存儲在thread_info結構中。但我並不確定,結構task_struct存儲在進程內核堆棧的開始或結束處,具體取決於CPU架構。
乾杯。 Carlos Maiolino
1
我認爲每個進程都有自己的內核模式堆棧。驅動程序正在內核模式下執行,在執行驅動程序時有時會阻塞進程。操作系統可以安排另一個進程運行。預定的進程可以再次調用驅動程序。如果內核堆棧是共享的,兩個進程正在使用內核堆棧,事情會混淆起來。很久以來,我對這個問題感到困惑。起初我認爲內核堆棧是共享的,一些書籍說。讀完Linux內核開發之後,看到一些驅動程序代碼,我開始認爲內核堆棧不共享。
相關問題
- 1. 用戶進程的內核堆棧| Linux內核
- 2. Linux上的Zigbee堆棧(主線內核)?
- 3. Linux內核中的TCP/IP堆棧
- 4. 進程創建時的Linux進程內核堆棧狀態是什麼?
- 5. 在內核調試中訪問進程的內核堆棧給定進程ID
- 6. DCE是否擁有自己的Linux內核堆棧,還是使用主機的Linux內核堆棧?
- 7. 關於堆溢出或堆棧溢出的Linux內核行爲
- 8. 內核堆棧與用戶模式應用程序堆棧
- 9. 是否存在每個進程的內核堆棧?
- 10. Linux內核進程管理
- 11. 瞭解從進程內核堆棧獲取task_struct指針
- 12. Linux內核中的硬件中斷堆棧上半部分?
- 13. linux內核如何強制實現堆棧大小限制?
- 14. 破壞內核堆棧的函數
- 15. 如何在較新的Linux內核中查找堆棧內存段
- 16. Linux堆棧大小
- 17. 進程虛擬內存 - 堆棧和堆之間的空間
- 18. Linux 2.6內核進程管理
- 19. Linux內核頁面故障棧回溯
- 20. Linux內核編程
- 21. Linux - 獲取線程的堆棧內存的開始和結束
- 22. linux上進程的堆棧大小與pthread,fork和exec有關
- 23. Linux中進程的堆棧大小是否有限制
- 24. 用戶線程(OS Windows)的內核模式堆棧是什麼?
- 25. 線程堆棧和進程堆棧有什麼區別
- 26. Linux 3.0的TCP堆棧接收緩衝區的內核體系結構
- 27. 堆棧進出
- 28. Linux進程創建:用戶模式堆棧
- 29. Linux核心中的通用堆棧實現
- 30. 從FreeBSD的內核核心轉儲中提取用戶空間線程堆棧
我嚴重懷疑這可以改變。內核堆棧是一個非共享空間,系統調用可以放置它們的數據。如果你要在進程之間共享它們,幾個內核例程可以同時使用同一個堆棧 - >數據損壞。 – 2009-05-20 08:33:18
我認爲每個進程都需要自己的內核堆棧,因爲幾個不同的進程可能會同時執行系統調用,而您不希望它們混淆。 – 2009-05-20 08:34:19
每個進程都有自己的內核堆棧,每個內核堆棧都有其關聯的進程。它從未改變過。 這就是爲什麼在「ps」中有一些類似僞造的過程。 – 2009-05-20 08:41:17