作業系統中的執行緒種類

TwcatL_tree發表於2020-10-24

執行緒在現在作業系統中使用非常廣泛,但是在各個系統中實現的方式各有不同,如infomix實現的是使用者級執行緒,而macintosh實現的是核心支援執行緒,比如Solaris OS兩者都實現了。

1.核心支援執行緒(Kernel Supported Threads)
在OS中的所有程式,無論是系統程式還是使用者程式,都是在作業系統核心的支援下執行的,是與核心緊密相關的。而核心支援執行緒KST同樣也是在核心的支援下執行的,它們的建立、阻塞、撤消和切換等,也都是在核心空間實現的。為了對核心執行緒進行控制和管理,在核心空間也為每個核心執行緒設定了一個執行緒控制塊,核心根據該控制塊而感知某執行緒的存在,並對其加以控制。當前大多數OS都支援核心支援執行緒。

這種執行緒實現方式主要有四個主要優點:

在多處理器系統中,核心能夠同時排程同一程式中的多個執行緒並行執行
如果程式中的一個執行緒被阻塞了,核心可以排程該程式中的其它執行緒佔有處理器執行,也可以執行其它程式中的執行緒
核心支援執行緒具有很小的資料結構和堆疊,執行緒的切換比較快,切換開銷小
核心本身也可以採用多執行緒技術,可以提高系統的執行速度和效率。
核心支援執行緒的主要缺點是:對於使用者的執行緒而言,其模式切換的開銷較大,在同一個程式中,從一個執行緒切換到另一個執行緒時,需要從使用者態轉為使用者程式的執行緒在使用者態執行,而執行緒排程和管理是在核心實現的,系統開銷較大。

2.使用者級執行緒(User Level Threads)
使用者級執行緒是在使用者空間中實現的。對執行緒的建立、撤消、同步與通訊等功能,都無需核心的支援,即使用者級執行緒是與核心無關的。在一個系統中的使用者級執行緒的數目可以達到數百個至數千個。由於這些執行緒的任務控制塊都是設定在使用者空間,而執行緒所執行的操作也無需核心的幫助,因而核心完全不知道使用者級執行緒的存在。

值得說明的是,對於設定了使用者級執行緒的系統,其排程仍是以程式為單位進行的。在採用輪轉排程演算法時, 各個程式輪流執行一個時間片,這對諸程式而言貌似是公平的。但假如在程式A中包含了一個使用者級執行緒,而在另一個程式B中含有100個使用者級執行緒,這樣,程式A中執行緒的執行時間將是程式B中各執行緒執行時間的100倍:相應地,其速度要快上100倍, 因此說實質上並不公平。

假如系統中設定的是核心支援執行緒。如排程便是以執行緒為單做進行的,在採用輪轉法排程時,是各個執行緒輪流執行一個時間片。同樣假定程式A中只有一一個丙核支援執行緒,而在程式B中有100個核心支援執行緒。此時程式B可以獲得的CPU時間是程式A的100倍,且程式B可使100個系統呼叫併發工作

課外題:

某系統支援核心級執行緒,且處理器採用時間片輪轉排程演算法。該系統現有程式A和程式B,且程式A擁有2個執行緒、程式B擁有100個執行緒,那麼程式A執行時間一般應為程式B執行時間的1/50。

某系統不支援核心級執行緒但支援使用者級執行緒,且處理器採用時間片輪轉排程演算法。該系統現有程式A和程式B,且程式A擁有1個執行緒、程式B擁有100個執行緒,那麼程式A執行時間一般應為程式B執行時間的1。

相關文章