這是我目前所了解的......
- 每個行程都有自己的內核堆疊(空間)
- 執行緒具有獨立的堆疊記憶體并共享其他(堆代碼等...)
- 內核堆疊中的內容是其行程稍后的背景關系切換的一些正式資訊
這是我感到困惑的部分......
如果執行緒只有自己的堆疊記憶體,作業系統如何管理執行緒的背景關系切換?如果行程 A 有 10 個執行緒,所有這些執行緒的資訊都寫在行程 A 的內核空間中?當執行緒過多時,不會導致內核空間記憶體不足?
請讓我知道我在這里缺少什么。
謝謝。
uj5u.com熱心網友回復:
- 每個行程都有自己的內核堆疊(空間)
是的。
- 執行緒具有獨立的堆疊記憶體并共享其他(堆代碼等...)
是的,大致。
- 內核堆疊中的內容是其行程稍后的背景關系切換的一些正式資訊
否。在代表該執行緒執行的系統呼叫執行期間,與執行緒關聯的內核堆疊用作呼叫堆疊。據我所知,它不涉及執行緒之間的背景關系切換,也不直接涉及從用戶模式到內核模式的切換。
如果Thread只有自己的堆疊記憶體,OS如何管理執行緒的背景關系切換?
與管理行程間背景關系切換的方式相同。內核維護這樣做所需的資訊(在每個執行緒的基礎上并不是特別多),盡管據我所知不在執行緒的內核堆疊上。但這可能是術語上的分歧 - 您似乎已經將“內核堆疊”與“內核空間”一起識別,但是內核維護更多的每執行緒資料而不僅僅是內核堆疊。
如果行程 A 有 10 個執行緒,所有這些執行緒的資訊都寫在行程 A 的內核空間中?當執行緒過多時,不會導致內核空間記憶體不足?
我不確定您對事物的看法是否正確,但是是的,可以同時處于活動狀態的執行緒數量受可用資源的限制。細節是內核和執行緒實作的屬性。可以有每個行程和全域限制。
實際上,如果可用記憶體(物理和虛擬)足夠,在 Linux 上運行并使用本機執行緒的行程可以擁有數千個執行緒。內核堆疊通常每個只有幾 kB;這些通常不是限制因素。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/379250.html
