操作系統-線程
操作系統
線程是為了更好的使多個程序並發執行,同時減少系統的開銷而出現的
線程與進程的比較
- 調度的基本單位
傳統的OS中,進程作為獨立調度和分派的基本單文,每一次調度的時候,都要進行上下文的切換,開銷比較大,而用線程作為獨立運行的基本單文是,線程的切換只需要保存和設置少量的寄存器內容,開銷比進程的銷。在同一進程能切換線程不會引起進程的切換,如果切換到另一個進程的線程,則需要切換進程 - 並發性
在引入線程之后,不僅進程之間可以並發執行,一個進程中的多個線程也可以並發執行,甚至還允許一個進程中所有的線程並發執行,更加有效的提高了系統資源的利用率和系統的吞吐量 - 擁有資源
線程本身不像進程那樣擁有系統資源,僅有一些必不可少的,能保證獨立運行的資源,例如線程控制塊TCB等,除此之外,多個線程共享進程所擁有的資源 - 獨立性
在獨立性方面,線程不夠進程好,進程為了防止進程之間干擾,破壞,每個進程都擁有一個獨立的地址空間和其他資源,而線程是為了提高並發性以及進程相互之間的合作而創建的 - 系統開銷
進程在系統上的開銷主要是創建進程,撤銷進程,進程切換,特別是在進程切換的時候,涉及到上下文的切換,開銷比較大,而由於線程只有少量的資源,在上下文切換的時候,開銷比較小 - 支持多處理機系統
線程的控制塊TCB
線程和進程一樣,擁有控制塊TCB,在TCB中有:
- 線程標識符
每個線程的唯一標識 - 寄存器
包括程序計數器PC,狀態寄存器和通用寄存器的內容 - 線程運行狀態
用於描述線程在哪一個狀態 - 優秀級
描述線程執行的優先級 - 線程專有存儲區
用於線程切換時存放的現場保護信息,和與該新城的統計信息 - 信號屏蔽
對某些信號屏蔽 - 堆棧指針
保存局部變量和返回地址。在線程中設置了兩個專項堆棧的指針
- 指向用戶自己堆棧的指針
在用戶態時,使用用戶自己的用戶棧來保存局部變量和返回地址 - 指向核心棧的指針
在內核態,線程運行在核心態使用系統的核心棧
- 指向用戶自己堆棧的指針
線程的實現方式
- 內核支持線程KST
線程的創建,阻塞,撤銷和切換等都是內核空間實現,在內核控制中也設置了線程控制塊TCB,用來管理內核線程
- 優點
- 能夠同時調度同意進程中的多個線程並執行
- 進程中的一個線程被阻塞的時候,內核可以調度該進程中其他線程占有處理器運行,也可運行其他進程的線程
- 支持線程具有很小的數據結構和堆棧,切換快,開銷小
- 采用了多線程的技術,提高了系統的效率
- 缺點
- 對於用戶的線程切換的話,切換開銷大,需要從用戶態切換到核心態,這是因為用戶線程在用戶態運行,而線程調度和管理在內核實現。
- 優點
-
用戶級線程ULT
線程的創建,阻塞,撤銷和切換等都是用戶空間實現,不需要內核的支持,與內核無關- 優點
- 線程切換不需要轉換到內核空間,在用戶態進行,開銷小
- 用戶線程與OS平台無關
- 調度算法可以使進程專用
- 缺點
- 系統調用的阻塞問題,大多數的系統調用都會使進程阻塞,所以當線程執行系統調用時,進程內所有的線程都會被擇善
- 優點
-
組合方式
- 多對一模型
- 一對一模型
- 多對多模型
- 多對一模型
線程的實現
-
內核支持線程的實現
在僅設置內核支持的線程OS中,一種可能的線程控制方法是系統在創建一個新進程時,為它分配一個任務數據區PTDA,但進程要創建一個線程的時候,就分配一個TCB,將相關信息填入該TCB,並分配資源。在撤銷線程事不立即回收該線程的資源和TCB,在創建新線程時,直接利用這個。 -
用戶級線程的實現
用戶線程在用戶空間實現,所有的用戶線程都具有相同的結構,都運行在一個中間系統上。有兩種方式實現中間系統,運行時系統和內核控制線程- 運行時系統
運行時系統實質是用於管理和控制線程的函數(過程)的集合,所有的函數都駐留在用戶空間,並作為用戶級線程與內核的接口 - 內核控制線程
這種線程有叫做輕型進程LWP,在系統中,LWP不會設置太多,而是把這些LWP做成一個緩沖池,成為“線程池”,當用戶級線程需要與內核通信的時候,借助LWP就可以實現,有LWP實現了內核與用戶級線程直接的隔離
- 運行時系統