一、線程的引入
多處理機OS中
進程回顧:
1)進程是一個擁有資源的獨立單位;
2)是一個可獨立調度和分派的基本單位。
進程一系列操作:
1)創建進程:分配除CPU以外的全部資源(如內存、I/O設備等),建立PCB
2)撤銷進程:資源回收,撤銷PCB
3)進程切換:保留當前進程的CPU環境,設置新選中進程的CPU環境
進程是一個資源的擁有者,創建、撤銷及切換,需要巨大的時空開銷,從而限制了OS中的進程數目,進程切換也不能過於頻繁。
引入線程目的:爲了更好地提高程序的並行執行程度,減少程序在併發執行時所付出的時空開銷,使OS具有更好的併發性。
不僅併發執行,而且減少時空開銷。
將進程的兩個作用分開,進程作爲擁有資源的獨立單位;線程作爲獨立調度和分配的基本單位,減少切換開銷。
二、線程與進程的比較
1.調度的基本單位
1)傳統OS,進程同時作爲擁有資源的獨立單位和調度與分配的基本單位,每次調度,上下文切換,開銷巨大;
2)引入線程的OS,線程作爲調度與分配的基本單位,線程切換,僅需保存和設置少量寄存器的內容,開銷遠小於進程開銷;
同一進程中的線程切換,不會引起進程切換;但不同進程中的線程切換,必然引起進程的切換。
2.併發性
1)傳統OS,進程之間併發;
2)引入線程的OS,不僅進程之間能併發,不同進程的多個線程以及同一進程的多個線程都能併發。
3.擁有資源
1)傳統OS,進程作爲擁有資源的獨立單位;
2)引入線程的OS,進程還是擁有資源的基本單位,線程僅有一點必不可少的、能保證獨立運行的資源。如寄存器及堆棧;
線程除了擁有自己的少量資源外,還允許多個線程共享該進程擁有的資源。如地址空間、文件、I/O設備等。
4.獨立性
同一進程的不同線程之間的獨立性遠小於不同進程之間的獨立性。
5.系統開銷
1)創建和撤銷進程時,爲之分配和回收PCB、分配和回收資源;創建線程時,分配和回收寄存器和堆棧,開銷小得多
2)進程的切換,涉及進程上下文的切換;線程切換開銷小得多
6.支持多處理機系統
一個進程的多個不同線程可以分配到多個處理機上。
三、線程的狀態和線程控制塊
1.線程的三個狀態
線程之間也存在着共享資源和相互合作的制約關係,致使線程也有間斷性。
三種基本狀態:執行狀態、就緒狀態及阻塞狀態。狀態之間切換同進程。
2.線程控制塊(TCB)
如PCB一樣,將所有用於控制和管理線程的信息記錄在TCB中。如線程標識符、寄存器、優先級及堆棧指針等。
3.多線程OS的進程屬性
1)進程是一個可擁有資源的基本單位;
2)多個線程可併發執行;
3)進程已不是可執行的實體。把線程作爲獨立運行與調度處的基本單位。
所謂進程處於“執行”狀態,實際上是指進程中的某線程正在執行;
對進程所施加的與進程狀態相關的操作也對其線程起作用。
四、線程的實現方式
1.用戶級線程(User-Level Thread,ULT)
有關線程管理的所有工作都由應用程序完成,內核意識不到線程的存在。應用程序可以通過線程庫設計成多線程程序。
2.內核級線程(Kernel-Level Thread,KLT)
線程管理的所有工作由內核完成,應用程序沒有進行線程管理的代碼,只有一個到內核級線程的編程接口。
3.組合方式
線程創建完全在用戶空間完成,線程的調度和同步也在應用程序中進行。
一個應用程序中的多個用戶級線程被映射到一些內核級線程(<=用戶級線程數目)上。5