使用者空間實現執行緒 核心實現執行緒 執行緒的排程

2021-06-29 10:39:58 字數 2399 閱讀 2508

1、在使用者空間中實現執行緒

(1)特點:把整個執行緒包放在使用者空間,核心對執行緒包一無所知。從核心角度考慮,就是按正常的方式管理,即單執行緒程序(存在執行時系統)

(2)優點

1、使用者級執行緒包可以在不支援執行緒的作業系統上實現。 2、

;進而,它

可以呼叫執行緒排程程式來選擇另乙個要執行的執行緒

。儲存該執行緒狀態的過程和排程程式都只是本地過程,所以啟動它們比進行核心呼叫效率更高

。另一方面,不需要陷阱,不需要上下文切換,也不需要對記憶體快取記憶體進行重新整理,這使得執行緒排程非常快捷。

在使用者空間管理執行緒時,每個程序都需要有其專用的執行緒表,用來跟蹤該程序中的執行緒。與程序表類似,執行緒表記錄各個執行緒的屬性,如每個執行緒的程式計數器,堆疊指標,暫存器和狀態等,執行緒表由執行時系統管理,當乙個執行緒轉換到就緒狀態或阻塞狀態是,在該執行緒表中存放重新啟動該執行緒所需的資訊,與核心在程序表中存放程序的資訊完全一樣。

當某個執行緒做了一些會引起在本地阻塞的事情

之後,例如等待程序中另乙個執行緒完成某些工作,

它呼叫乙個執行時系統的過程

,這個過程檢查該執行緒是否必須進入阻塞狀態

。如果是,。

(3) 

允許每個程序有自己定製的排程演算法。

(4) 

具有較好的可擴充套件性,這是因為在核心空間中核心執行緒需要一些固定**空間和堆疊空間,當核心執行緒的數量非常大,就會出現問題。

(3)缺點

執行緒發生i/o或頁面故障引起的阻塞時,如果呼叫阻塞系統呼叫則核心由於不知道有多執行緒的存在,而會阻塞整個程序從而阻塞所有執行緒。注(阻塞呼叫是指呼叫結果返回之前,當前執行緒會被掛起。函式只有在得到結果之後才會返回。)

在乙個單獨的程序內部,沒有時鐘中斷,所以不能用輪轉排程的方式排程執行緒

。如果乙個執行緒開始執行,那麼在該程序中的其他執行緒就不能執行,除非第乙個執行緒自動放棄

cpu。

下面是執行緒包實現圖

2、在核心中實現執行緒

(1)特點:

在核心中實現執行緒,此時不再需要執行時系統。另外,

每個程序中也沒有執行緒表

,相反,

在核心中用來記錄系統中所有執行緒的執行緒表

。當乙個執行緒阻塞時,核心可以根據其選擇,可以執行同乙個程序中的另乙個執行緒,或者執行另乙個程序中的執行緒

。而在使用者級執行緒中,

執行時系統始終執行自己程序中的執行緒,直到核心剝奪它的

cpu為止。

當某個執行緒希望建立乙個新執行緒或撤銷乙個已有執行緒時,它進行乙個系統呼叫。在核心中實現執行緒時,核心必須維護兩個表,傳統的程序表以便跟蹤程序的狀態和執行緒表。

(2)優點:

核心執行緒不需要任何新的,非阻塞系統呼叫。另外,如果某個程序中的執行緒引起了頁面故障,核心可以很方便地檢查該程序是否有任何其他可執行的執行緒,如果有,在等待所需要的頁面從磁碟讀入時,就選擇乙個可執行的執行緒執行。

(3)核心級

執行緒的缺點是

:應用程式執行緒在使用者態執行,而執行緒排程和管理在核心實現

。在同一程序中,控制權從乙個執行緒轉移到另乙個執行緒,需要使用者態

-核心態

-使用者態的模式切換,系統開銷較大。(應用程式執行緒和執行緒排程管理,都在同一程序內)

綜上:使用者級執行緒和核心級執行緒之間的差別在於效能。使用者級執行緒的切換需要少量的機器指令,而核心級執行緒需要完整的上下文切換,修改記憶體映像,使快取記憶體失效,這導致了若干數量級的延遲。另一方面,在使用核心級執行緒時,一旦執行緒阻塞在i/o就不需要像在使用者級執行緒中那樣將整個程序掛起。

所有能夠阻塞執行緒的呼叫都以系統呼叫的形式實現,代價可觀。

當乙個執行緒阻塞時,核心根據選擇可以執行另乙個程序的執行緒,而使用者空間實現的執行緒中,執行時系統始終執行自己程序中的執行緒。

說明:由於核心建立執行緒代價大,故有執行緒**。

執行緒排程

當若干程序都有多個執行緒時,存在兩個層次的並行,程序和執行緒。這樣的系統中排程處理有本質的區別,是使用者級執行緒還是核心級執行緒。

對於使用者級執行緒,核心並不知道有執行緒存在,所以核心還是和以前一樣地操作,選取乙個程序,假設為a,並給予a時間片控制,a的執行緒排程程式決定哪個執行緒執行,假設為a1。由於多道執行緒不存在時鐘中斷,所以,這個執行緒可以按其意願任意執行多長時間。如果該執行緒用完了程序的全部時間片,核心就會選擇另乙個程序執行。

對於核心級執行緒而言,核心選擇乙個特定的執行緒執行,它不用考慮該執行緒屬於哪個程序,不過,如果有必要的話,它可以這樣做。對被選擇的執行緒賦予乙個時間片,而且,如果超過了時間片,就會強制掛起該執行緒。

在使用者空間中實現執行緒

有兩種主要的方法實現執行緒包 在使用者空間中和在核心中。前者是把整個執行緒包放在使用者空間中,核心對執行緒包一無所知,仍按正常的單執行緒程序方式管理。在使用者空間中實現執行緒包的優點 1 使用者級執行緒包可以在不支援執行緒的作業系統上實現。2 3 允許每個程序有自己定製的排程演算法。4 具有較好的可...

執行緒實現的兩種方式 使用者空間和核心中

特點 整個執行緒包放入使用者空間中,核心對執行緒包一無所知。從核心角度考慮,就是按正常的方式管理,即單執行緒程序 優點 1 使用者級執行緒包可以在不支援執行緒的作業系統上實現 2 執行緒切換比核心快更多 3 允許每個程序有自己定製的排程演算法 缺點 執行緒發生i o或頁面故障引起的阻塞時,如果呼叫阻...

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

讀書看到下面這一段,不太理解,就搜了一下,學了很多東西。img 執行緒的實現可以分為兩類 使用者級執行緒 user level thread 和核心線執行緒 kernel level thread 後者又稱為核心支援的執行緒或輕量級程序.使用者執行緒指不需要核心支援而在使用者程式中實現的執行緒,其不...