天天看點

作業系統 — 線程

#線程與程序的比較

1、排程: 在傳統的作業系統中,程序作為資源的基本機關和獨立排程、分派的基本機關;而當引入了程序概念的作業系統時代,将線程作為排程和分派的基本機關,而程序則作為資源擁有的基本機關,這樣使線程基本不擁有資源,他可以“輕裝上陣”,進而可以顯著地提高系統的并發程度。在同一程序中,線程的切換不會引起程序的切換;但是,如果從一個程序中的線程切換到另一個程序中線程的時候,将會引起程序的切換。

2、并發性: 在引入線程的作業系統中,不會影響程序的并發執行,并且在一個程序中可以建立多個線程,線程并發執行,這樣使得作業系統的并發性能顯著提高。

3、資源的擁有: 無論是否引入線程,程序都是系統中擁有資源的一個基本機關。一般而言,線程自己不擁有系統資源(必不可少的資源除外),但是他可以通路隸屬程序的資源(一個程序的代碼段、資料段以及所擁有的系統資源)。

4、系統開銷: 程序的建立或者撤銷時,系統要為之建立和回收程序控制塊,配置設定或回收資源,是以其開銷遠大于線程。類似的,在程序的切換時,設計到目前程序CPU環境的儲存以及新被排程運作程序的CPU環境的設定,而線程的切換則僅僅需要儲存和設定少量寄存器内容,不涉及存儲器管理方面的操作,是以就切換來說,程序也遠高于線程。此外,一個程序中的多個線程具有相同的位址空間,在同步和通信的實作方法線程也比程序容易的多。

#線程的狀态

1、狀态參數:

(1)寄存器狀态:程式計數器PC 和 堆棧指針中的内容;

(2)堆棧:在堆棧中通常儲存有局部變量和傳回位址;

(3)線程運作狀态:用于描述線程處于何種運作狀态;

(4)優先級:描述線程執行的優先程度;

(5)線程專有的存儲器:用于儲存線程自己的局部變量拷貝;

(6)信号屏蔽:對某些信号加以屏蔽;

2、線程運作狀态:

(1)執行狀态:表示線程正獲得處理機而運作;

(2)就緒狀态:指線程已經具備了各種執行條件;

(3)阻塞狀态:執行中因為某件事而受阻;

作業系統 — 線程

#線程的建立與終止

1、在多線程OS環境下,應用程式在啟動時,通常僅有一個線程(初始化線程)在執行,它可根據需求再去建立若幹個線程。在寫建立函數時,要提供相應的參數,例如:指向線程主程式的入口指針、堆棧大小、排程的優先級,傳回一個線程表示符。

2、終止線程方式有兩種:一種是“壽終正寝”;一種為“意外事故”;線程被終止後并不立即釋放它所占用的資源,隻有當該程序中的其他線程觸發了分離函數被終止的線程才與資源分離。

3、雖已被終止但尚未釋放資源的線程,仍可以被需要它的線程所調用,以使被終止線程重新恢複運作。為此調用者線程必須調用一條被稱為“等待線程終止”的連接配接指令,來與該線程進行連接配接。

#多線程OS中的程序