【作業系統】程式的描述與控制[執行緒](4)

愛吃老談酸菜的DV發表於2020-11-07

寫在前面
資料來源於我的作業系統老師,WYQ老師

2.8 執行緒及其實現

1.執行緒的基本概念
2.執行緒的實現及控制

引入程式 的目的:
使多個程式能併發執行,提高資源利用率和系統吞吐量。
引入執行緒 的目的:
應用的需要/ 開銷的考慮/ 效能的提升

開銷的考慮

(1)程式相關的操作:

  • 建立程式
  • 撤消程式
  • 程式通訊
  • 程式切換
    → 時間/空間開銷大,限制了併發度的提高。

(2)執行緒的開銷小

  • 建立一個新執行緒花費時間少(撤銷亦如此)
  • 兩個執行緒切換花費時間少
  • 執行緒之間相互通訊無須呼叫核心(同一程式內的執行緒共享記憶體和檔案)

效能的提升

  • 多個執行緒,有的計算,有的I/O,進一步提高併發度。
  • 充分利用多處理器的優勢。

1.執行緒的概念

在同一程式增加了多個執行序列(執行緒)
在這裡插入圖片描述
(1)執行緒:程式中的一個執行實體,是CPU的排程單位,有時將執行緒稱為輕量級程式
程式與執行緒

  • 程式是資源分配單位
  • 執行緒是CPU執行單位
    多執行緒優點
  • 切換速度快(地址空間不變)
  • 系統開銷小
  • 通訊容易(共享資料空間)
    在這裡插入圖片描述
    在這裡插入圖片描述
    (2)執行緒模型
    每個執行緒擁有自己的棧:區域性變數、返回地址
    (3)執行緒控制塊
  • TCB(Thread control block)
    標誌執行緒存在的資料結構, 其中包含對執行緒管理需要的全部資訊.
  • 內容
    執行緒標識、執行緒狀態
    排程引數、現場(通用暫存器,PC,SP)
  • 存放位置
    使用者級執行緒:目態空間
    核心級執行緒:管態空間

(4)執行緒的屬性:併發性、共享性、動態性

  • 輕型實體:只有一點必不可少的、能保證獨立執行的資源
  • CPU排程的基本單位
  • 可併發執行
  • 共享程式資源

(5)執行緒的優點

  • 快速切換;
  • 易於通訊;
  • 並行度高;
  • 節省記憶體;
  • 減少管理開銷。

(6)執行緒的基本狀態

  • 執行狀態
  • 就緒狀態
  • 阻塞狀態

(7)執行緒的建立和終止

  • 執行緒的建立
    利用執行緒建立函式(或系統呼叫);
    建立成功後,返回一個執行緒識別符號。

  • 執行緒的終止方式
    自願退出
    被其它執行緒強行終止

(8)執行緒與程式的比較

  • 執行緒:作為CPU排程單位。
    執行緒只擁有必不可少的資源,如:執行緒狀態、暫存器上下文和棧
    同樣具有就緒、阻塞和執行三種基本狀態
  • 程式:其它資源分配單位(儲存器、檔案、IO等)。
  • 排程:執行緒作為CPU排程的基本單位,而程式只作為其它資源分配單位。
  • 併發性:程式之間可以併發,且一個程式的多個執行緒之間亦可併發。
  • 擁有資源:程式間相互獨立,同一程式的各執行緒間共享資源。某程式內的執行緒在其它程式不可見。
  • 系統開銷:執行緒上下文切換比程式上下文切換要快得多。

練習題

1. 執行緒機制中,一個程式可以對應多個執行緒,一個執行緒也可以對應若干個程式。
解答: 錯!
一個程式可以擁有若干個執行緒,執行緒從屬於該程式,同一程式內所有執行緒共享該程式的地址空間,而不同程式之間的地址空間是完全獨立的,如果一個執行緒可以對應若干個程式,那麼也就意味著不同程式之間的地址空間可以共享,這顯然是不合適的。

2.執行緒的實現及控制

  • 使用者級執行緒——User-level thread
  • 核心級執行緒——Kernel-level thread
  • 混合執行緒——Hybrid approach

(1)使用者級執行緒和核心支援執行緒

  • 核心支援執行緒,它們是依賴於核心的,即無論是使用者程式中的執行緒,還是系統程式中的執行緒,它們的建立、撤消、切換都由核心實現。
  • 使用者級執行緒,對於這種執行緒的建立、撤消、和切換,都不用系統呼叫來實現。核心並不知道使用者級執行緒的存在。

(2)核心級執行緒

  • 所有執行緒管理由核心完成
  • 沒有執行緒庫,但核心提供API
  • 核心維護程式和執行緒的上下文
  • 執行緒之間的切換需要核心支援
  • 以執行緒為基礎進行排程
    在這裡插入圖片描述
    當一個執行緒想去建立一個新執行緒或撤消已存在的執行緒時,它發出一個核心呼叫,完成建立和回收工作。
    實現方法:
  • 基於系統呼叫
  • 建立、撤銷、狀態轉換由作業系統完成

優點:

  • 對多處理器,核心可以同時排程同一程式的多個執行緒
  • 某執行緒阻塞,其它執行緒仍可執行

缺點:

  • 應用程式執行緒在使用者態執行,而執行緒排程和管理在核心實現,在同一程式中,控制權從一個執行緒傳送到另一個執行緒時需要使用者態-核心態-使用者態的模式切換,系統開銷較大。
  • 排程演算法不能靈活控制

(3)使用者級執行緒
在這裡插入圖片描述
執行時系統:用於管理和控制執行緒的函式集合。
(4)執行緒庫
提供執行緒執行管理系統:

  • 建立、撤消執行緒
  • 線上程之間傳遞訊息和資料
  • 排程執行緒執行
  • 保護和恢復執行緒上下文

使用者級的執行緒庫能在不支援執行緒的作業系統中實現執行緒

  • 切換效率高
  • 允許每一個程式有自已定製的排程演算法

實現方法:

  • 基於library函式,系統不可見
  • 執行緒建立、撤銷、狀態轉換在目態完成
  • TCB在使用者空間,每個程式一個系統棧

優點:

  • 不依賴於作業系統,排程靈活
  • 切換無須從目態到管態,速度快
  • ULT可執行在任何作業系統上(只需要執行緒庫),可以在一個不支援執行緒的OS上實現

缺點:

  • 核心只將處理器分配給程式,在多處理機中同一程式中多個執行緒不能真正並行
  • 一個執行緒進入系統受阻,程式中其它執行緒不能執行

例題

1. 設程式A擁有1個使用者級執行緒,程式B擁有100個使用者級執行緒,則在系統排程時各佔用幾個時間片?
:1個
2. 設程式A擁有1個核心級執行緒,程式B擁有100個核心級執行緒,則在系統排程時各佔用幾個時間片?
:A:1個;B:100個

使用者級執行緒與核心級執行緒的比較
在這裡插入圖片描述
(5)混合執行緒

  • 在混合式執行緒系統中,核心支援KLT多執行緒的建立、排程和管理;
  • 同時,也提供執行緒庫,允許使用者應用程式建立、排程和管理ULT;
  • 一個應用程式的多個ULT對映成一些KLT,程式設計師可按應用需要和機器配置調整KLT數目,以達到較好效果;
  • 混合式中,一個應用中的多個執行緒能同時在多處理器上並行執行,且阻塞一個執行緒時並不需要封鎖整個程式。如果設計得當,混合式多執行緒機制能夠結合了兩者優點,捨去缺點。

練習題

1. 在以下描述中,(C)並不是多執行緒系統的特長。
A. 利用執行緒並行地執行矩陣的乘法運算
B. Web伺服器利用執行緒響應HTTP請求
C. 鍵盤驅動程式為每一個正在執行的應用配備一個執行緒,用以響應該應用的鍵盤輸入
D. 基於GUI的除錯程式用不同的執行緒分別處理使用者輸入、計算和跟蹤等操作

2. 同一程式中的多個執行緒有哪些成分是共用的,哪些成分是私用的?
答: 執行緒的公有成分包括:
程式碼區、資料區、動態堆空間。
執行緒的私有成分包括:
執行緒控制塊;
一個執行棧;
執行時動態分給執行緒的暫存器。

3. [2012考研試題 31]下列關於程式和執行緒的敘述中,正確的是(A)
A.不管系統是否支援執行緒,程式都是資源分配的基本單位
B.執行緒是資源分配的基本單位,程式是排程的基本單位
C.系統級執行緒和使用者級執行緒的切換都需要核心的支援
D.同一程式中的各個執行緒擁有各自不同的地址空間

4. 在支援多執行緒的系統中,程式P建立的若干執行緒不嗯呢該共享的事(D)
A.程式的程式碼段
B.程式P中開啟的檔案
C.程式P的全域性變數
D.程式P中某執行緒的棧指標

5. 下列對執行緒的描述中,(B)是錯誤的。
A.不同的執行緒可執行相同的程式
B.執行緒是資源分配單位
C.執行緒是排程和執行單位
D.同一程式中的執行緒可共享該程式的主存空間

6. 以下說法中哪個是正確的?(C)
A.執行緒是程式中可獨立執行的子任務,一個程式可以包含一個或多個執行緒,一個執行緒可以屬於一個或多個程式。
B.執行緒又稱為輕型程式,因為執行緒都比程式小。
C.多執行緒技術具有明顯的優越性,如速度快、通訊簡便、並行性高等。
D.由於執行緒不作為資源分配單位,執行緒之間可以無約束地並行執行。

**7.**程式與執行緒的根本區別是(C)
A.程式要佔用一個程式控制塊,開銷較大,而執行緒無此開銷
B.程式會增加死鎖的機會,而執行緒有效避免了這一問題
C. 程式是資源分配單位,而執行緒是排程和執行的單位
D. 程式是排程和執行的單位,而執行緒是資源分配單位

8. 使用者級執行緒執行時,同一程式不同執行緒的切換不需要核心支援。
答: 正確

9. 在支援執行緒的作業系統中,同一個程式中的各個執行緒共享該程式的使用者棧。
答: 錯誤

相關文章