這兩天在寫這篇blog的時候,順帶復習操作系統的資料,遇到了一個之前沒有弄明確的問題,就是關於內核級線程與用戶級線程。在查閱了一些資料之后,發表一下我個人簡單介紹。
線程已經在很多系統中實現。到那時各個操作系統實現方式不全然同樣。
比方在有的系統中,特倍是一些數據庫管理系統如IBM的infomix系統。所實現的用戶級線程(UserLevel Threads ,ULT);而還有一些系統如(Mac os的前身Macintosh和OS/2操作系統)所實現的是內核支持線程 ( Kernel Supported threads, KST);還有一些是Solaris操作系統,則同一時候實現了這兩中類型的線程。
KST:
內核支持線程是在核心空間實現的。內核為每一個線程在核心空間中設置了一個線程控制塊,用來登記該線程的線程標識符、寄存器值、狀態、優先級等信息。全部對線程的操作,如創建、撤消和切換等。都是通過系統功能調用由內核中的相應處理程序完畢;設置了內核支持線程的系統,其調度是以線程為單位進行的。
長處:
在多處理器系統中,內核能夠同一時候調度同一進程中多個線程並行運行到多個處理器中;假設進程中的一個線程被堵塞,內核能夠調度同一個進程中的還有一個線程。內核支持線程具有非常小的數據結構和堆棧,線程的切換比較快。切換開銷小;內核本身也能夠使用多線程的方式來實現。
缺點:
即使CPU在同一個進程的多個線程之間切換。也須要陷入內核,因此其速度和效率不如用戶級線程。
ULT:
用戶級線程僅存在於用戶空間中,與內核無關。就內核而言。它僅僅是管理常規的進程—單線程進程。而感知不到用戶級線程的存在;每一個線程控制塊都設置在用戶空間中。全部對線程的操作也在用戶空間中由線程庫中的函數完畢。無需內核的幫助;設置了用戶級線程的系統,其調度仍是以進程為單位進行的。
長處:
線程的切換無需陷入內核,故切換開銷小。速度非常快;線程庫對用戶線程的調度算法與OS的調度算法無關。因此,線程庫可提供多種調度算法供應用程序選擇使用。用戶級線程的實現與操作系統平台無關。
缺點:
系統調用的堵塞問題:相應用程序來講。一個線程的堵塞將導致整個進程中全部線程的堵塞;多線程應用無法享用多處理機系統中多個處理器帶來的長處。
組合方式:
內核支持多KST線程的建立、調度和管理,同一時候,也同意用戶應用程序建立、調度和管理用戶級線程;一些內核支持線程相應多個用戶級線程,程序猿可按應用須要和機器配置對內核支持線程數目進行調整,以達到較好的效果。
長處:
同一個進程內的多個線程能夠同一時候在多處理器上並行運行;在堵塞一個線程時。並不須要將整個進程堵塞。
兩者比較:
(1)內核支持
用戶級線程可在一個不支持線程的OS中實現。
內核支持線程則須要得到OS內核的支持。
(2)處理器分配
在多處理機環境下。對用戶級線程而言主。內核一次僅僅為一個進程分配一個處理器。進程無法享用多處理機帶來的長處;
在設置有內核支持線程時,內核可調度一個應用中的多個線程同一時候在多個處理器上並行運行,提高程序的運行速度和效率。
(3)調度和線程運行時間
設置有內核支持線程的系統,其調度方式和算法與進程的調度十分類似,僅僅只是調度單位是線程;
對僅僅設置了用戶級線程的系統,調度的單位仍為進程。
因此,在條件同樣的情況下,內核支持的線程通常比用戶級線程得到很多其它的CPU運行時間。
(4)切換速度
用戶級線程的切換,通常發生在一個應用程序的諸線程之間,而不須要陷入內核,並且切換的規則也非常easy,切換速度比內核支持線程至少快一個數量級。
(5)系統調用
在典型OS中,很多系統調用都會引起堵塞。
當一個用戶級線程運行這些系統調用時,被堵塞的將是整個進程;當一個內核支持線程運行這些系統調用時。內核僅僅堵塞這個線程。但仍可調度其所屬進程的其它線程運行。
非常多是從CC的ppt上拷貝的,希望會有幫助!