核心級執行緒(KLT)和使用者級執行緒(ULT)

2021-08-18 02:00:12 字數 1381 閱讀 9168

tags: klt ult 核心級執行緒 使用者級執行緒

引言:本文涉及到作業系統的核心模式和使用者模式,如果不太懂的話,可以參看我的這篇文章核心模式和使用者模式,其中簡單的進行了介紹。

首先說一下執行緒對於程序的優勢,這其實就是執行緒出現的意義。程序是資源擁有的基本單位,程序切換需要儲存程序狀態,會造成資源的消耗。同一程序中的執行緒,共享程序獲取的部分資源。在同一程序中,執行緒的切換不會引起程序切換,執行緒的切換需要的資源少於程序切換,可以提高效率。

純核心級執行緒特點:

程序中的乙個執行緒被阻塞,核心能排程同一程序的其他執行緒(就緒態)占有處理器執行

多處理器環境中,核心能同時排程同一程序的多執行緒,將這些執行緒對映到不同的處理器核心上,提高程序的執行效率。

應用程式執行緒在使用者態執行,執行緒排程和管理在核心實現。執行緒排程時,控制權從乙個執行緒改變到另一線程,需要模式切換,系統開銷較大。

所以執行緒的建立,訊息傳遞,排程,儲存/恢復上下文都有執行緒庫來完成。核心感知不到多執行緒的存在。核心繼續以程序為排程單位,並且給該程序指定乙個執行狀態(就緒、執行、阻塞等)。

純使用者級執行緒的特點:

執行緒切換不需要核心模式,能節省模式切換開銷和核心資源。

允許程序按照特定的需要選擇不同的排程演算法來排程執行緒。排程演算法需要自己實現。

由於其不需要核心進行支援,所以可以跨os執行。

不能利用多核處理器有點,os排程程序,每個程序僅有乙個ult能執行

乙個ult阻塞,將導致整個程序的阻塞。

jacketing技術可以解決ult乙個執行緒阻塞導致整個程序阻塞。

jacketing的目標是把乙個產生阻塞的系統呼叫轉化成乙個非阻塞的系統呼叫。例如,當程序中的乙個執行緒呼叫io中斷錢,先呼叫乙個應用級的i/o jacket例程,而不是直接呼叫乙個系統i/o。讓這個jacket例程檢查並確定i/o裝置是否忙。如果忙,則jacketing將控制權交給該程序的執行緒排程程式,決定該執行緒進入阻塞狀態並將控制權傳送給另乙個執行緒(若無就緒態執行緒咋可能執行程序切換)。

可以看出,使用者級執行緒和核心級執行緒都有各自的優點和缺點,在應用上主要表現為:

組合策略:

由作業系統核心支援核心級多執行緒,由作業系統的程式庫來支援使用者級多執行緒,執行緒建立完全在使用者空間建立,現成的排程也在應用程式內部進行,然後把使用者級多執行緒對映到(或者說是繫結到)一些核心級多執行緒。程式設計人員可以針對不同的應用特點調節核心級執行緒的數目來達到物理並行性和邏輯並行性的最佳方案。

使用者級執行緒和核心級執行緒

根據在使用者空間還是在核心實現多執行緒機制,執行緒又被分為使用者級執行緒 user level thread 和核心級執行緒 kernel level thread 有關執行緒的所有管理工作都有在使用者級實現的執行緒庫來支援。使用者級執行緒庫是用於使用者級執行緒管理的例程包,支援執行緒的建立 終止,...

使用者級執行緒和核心級執行緒

執行緒有3種實現模型 使用者級或應用程式級執行緒 核心級執行緒 使用者級和核心級混合執行緒 圖6 1顯示了3種執行緒實現模型。圖6 1 a 顯示了使用者級執行緒,圖6 1 b 顯示了核心級執行緒,圖6 1 c 則顯示了使用者執行緒和核心執行緒的混合。這些實現之間的較大的區別之一就是它們的模式以及要指...

使用者級執行緒和核心級執行緒

6.1.1 使用者級執行緒和核心級執行緒 執行緒有3種實現模型 使用者級或應用程式級執行緒 核心級執行緒 使用者級和核心級混合執行緒 圖6 1顯示了3種執行緒實現模型。圖6 1 a 顯示了使用者級執行緒,圖6 1 b 顯示了核心級執行緒,圖6 1 c 則顯示了使用者執行緒和核心執行緒的混合。這些實現...