1
我一直在試圖理解實現用戶空間線程的機制。我無法理解堆棧和幀的機制。我是來跨兩個解釋線程真正偉大的資源(here和here)以及它是如何實現的,但我還是不明白以下細節:瞭解線程是如何實現的
- 在線程的執行如何使用的機器上下文?我知道它包含一個堆棧指針和一堆寄存器值。但是操作系統如何使用它來執行線程?
- 爲什麼我們需要一個蹦牀功能(mctx_create_trampoline)?在鏈接#2中,他們設置了一個函數作爲信號處理程序來保存機器上下文並啓動線程函數(mctx_create_boot)。
- 基於這些函數如何實現線程可以調用的「yield」函數?另外,我們如何中斷正在運行的線程?我假設你有一個計時器和SIGALRM,當它關閉時調用一個信號處理程序。但是,如果yield函數切換上下文,那麼信號處理程序將不會返回,這將阻止進一步傳遞信號。