2009-12-29 150 views

回答

6

從概念上講,兩者都是相同的數據結構:堆棧。

每個線程有兩個不同棧的原因是因爲在用戶模式下,不允許代碼弄亂內核內存。當切換到內核模式時,內核模式下只能訪問的內存中的不同堆棧用於返回地址等。

如果用戶模式訪問內核堆棧,它可以修改跳轉地址(例如),然後執行系統調用;當內核跳轉到之前修改的地址時,您的代碼將在內核模式下執行!

此外,有關其他進程(用於同步)的安全相關信息/信息可能位於內核堆棧上,因此用戶模式也不應具有對其的讀取訪問權限。

0

典型的現代操作系統的堆棧只是用於存儲返回地址和本地數據的內存區域。它在內核和用戶模式下都有相同的結構,但是每個線程都有自己的內存區域來存儲它的堆棧。上下文切換可以恢復堆棧指針,所以即使線程可以共享其他內存(如果線程在同一進程中),也不會看到另一個線程的堆棧。

線程不必順便使用堆棧。操作系統對如何使用操作系統做出了假設,但該線程不必遵循它們。