2017-09-02 22 views

回答

2

如果操作系統無法區分ULT和進程,那麼它的線程表中是否有ULT條目?

否 - 就操作系統而言,用戶級別線程不存在。相反,只有一個線程/進程,通過調用setjmp()和longjmp()來執行「有趣的事情」。

+0

然後TCB的地址被存儲在哪裏以及它如何管理? –

+1

這將是用戶進程內部的數據結構,就像任何其他用戶級別的數據結構一樣。它將由用戶級線程庫管理。 –

+0

好的,謝謝。我明白了:) –

2

操作系統(內核)只知道內核級線程,並沒有用戶級線程的知識。用戶級線程由提供線程功能的用戶庫管理。

例如,Linux不區分線程和進程。可以調度的實體由task_struct數據結構表示。 所以當你的庫想創建一些線程時,它會要求內核創建(使用clone())相應的task_structs。您的庫可能只需要一個task_struct,在這種情況下,您的所有用戶級別線程都複用在同一個task_struct中,或者它可能會爲每個用戶級別線程請求一個task_struct,在這種情況下,每個用戶級別線程都可以被內核用於調度,因爲每個線程有一個task_struct。我們可以說 內核只知道內核級線程。用戶級別的線程由相應的庫創建和管理。

相關問題