3
A
回答
6
從概念上講,兩者都是相同的數據結構:堆棧。
每個線程有兩個不同棧的原因是因爲在用戶模式下,不允許代碼弄亂內核內存。當切換到內核模式時,內核模式下只能訪問的內存中的不同堆棧用於返回地址等。
如果用戶模式訪問內核堆棧,它可以修改跳轉地址(例如),然後執行系統調用;當內核跳轉到之前修改的地址時,您的代碼將在內核模式下執行!
此外,有關其他進程(用於同步)的安全相關信息/信息可能位於內核堆棧上,因此用戶模式也不應具有對其的讀取訪問權限。
0
典型的現代操作系統的堆棧只是用於存儲返回地址和本地數據的內存區域。它在內核和用戶模式下都有相同的結構,但是每個線程都有自己的內存區域來存儲它的堆棧。上下文切換可以恢復堆棧指針,所以即使線程可以共享其他內存(如果線程在同一進程中),也不會看到另一個線程的堆棧。
線程不必順便使用堆棧。操作系統對如何使用操作系統做出了假設,但該線程不必遵循它們。
相關問題
- 1. 用戶線程(OS Windows)的內核模式堆棧是什麼?
- 2. 用戶進程的內核堆棧| Linux內核
- 3. ptrace會中斷CPU上下文,用戶空間堆棧還是內核堆棧?
- 4. C程序的堆棧和堆內存
- 5. 轉儲內核模塊堆棧
- 6. 如何在內核模塊中生成用戶堆棧跟蹤
- 7. linux進程的內核堆棧
- 8. 內存分配,堆棧和堆棧
- 9. 看到應用程序線程使用的堆棧和堆量
- 10. 使用C/C++/Java程序理解堆棧和堆棧
- 11. 矢量,堆棧與堆棧(C++)
- 12. Android應用程序堆棧未清除
- 13. 應用程序日誌堆棧
- 14. Android應用程序堆棧視圖
- 15. Python堆棧爲堆棧格式
- 16. 堆棧在java中使用堆棧
- 17. 堆棧溢出調用堆棧#timememoryfunctionlocation 10.0000143728
- 18. 與堆棧
- 19. 堆棧與AddUniqueItem
- 20. JVM - 堆棧和堆棧
- 21. 希望堆棧堆棧?
- 22. 與Susy堆棧內容每
- 23. Linux內核中的堆棧內存
- 24. 調用堆棧
- 25. 繪製堆棧和線程程序堆
- 26. C++堆棧與堆分配
- 27. 角HTML5模式堆棧
- 28. 服務堆棧IRequiresHttpRequest模式
- 29. 如何添加核心數據堆棧到WatchKit應用程序
- 30. 堆棧或堆