1. 程式人生 > >程序執行緒模型

程序執行緒模型

文章目錄


程序的定義

程序是具有獨立功能的程式關於某個資料集合上的一次執行活動,是系統進行資源分配和排程的獨立單位。

程序控制塊PCB

PCB:Process Control Block,又稱程序描述符、程序屬性,是作業系統用於管理控制程序的一個專門資料結構,是系統感知程序存在的唯一標誌。

PCB的內容包括:

  • 程序描述資訊
  • 程序控制資訊
  • 所擁有的資源和使用情況
  • CPU現場資訊

程序狀態及狀態轉換

程序的三種基本狀態

  • 執行態(Running):佔有CPU,並在CPU上執行
  • 就緒態(Ready):已經具備執行條件,但由於沒有空閒CPU,而暫時不能執行
  • 等待態(Waiting/Blocked):因等待某一事件而暫時不能執行(如等待讀盤結果,又稱為阻塞態、睡眠態)

三狀態模型及狀態轉換

三狀態模型

其中,只有就緒態和執行態可以相互轉換,其它的都是單向轉換。

程序的其它狀態

  • 建立:已完成建立一程序所必要的工作,但因為資源有限尚未同意執行該程序
  • 終止:終止執行後,程序進入該狀態,回收資源
  • 掛起:用於調節負載,程序不佔用記憶體空間,其程序映像交換到磁碟上

程序的五狀態模型

五狀態模型

程序佇列

作業系統為每一類程序建立一個或多個佇列,佇列元素為PCB,伴隨程序狀態的改變,其PCB從一個佇列進入另一個佇列。以下為五狀態程序模型的佇列模型:

程序佇列

程序控制

程序控制操作完成程序各狀態之間的轉換,由具有特定功能的原語完成:

  • 程序建立原語
  • 程序撤消原語
  • 阻塞原語
  • 喚醒原語
  • 掛起原語

原語:完成某種特定功能的一段程式,具有不可分割性或不可中斷性,即原語的執行必須是連續的,在執行過程中不允許被中斷

程序的建立

  • 給新程序分配一個唯一標識以及程序控制塊
  • 為程序分配地址空間
  • 初始化程序控制塊
  • 設定相應的佇列指標(如: 把新程序加到就緒佇列連結串列中)

程序的撤銷

  • 收回程序所佔有的資源(如:關閉開啟的檔案、斷開網路連線、回收分配的記憶體)
  • 撤消該程序的PCB

程序阻塞

處於執行狀態的程序,在其執行過程中期待某一事件發生,如等待鍵盤輸入、等待磁碟資料傳輸完成、等待其它程序傳送訊息,當被等待的事件未發生時,由程序自己執行阻塞原語,使自己由執行態變為阻塞態。

上下文切換

將CPU硬體狀態從一個程序換到另一個程序的過程稱為上下文切換。

程序執行時,其硬體狀態儲存在CPU上的暫存器中;程序不執行時,這些暫存器的值儲存在程序控制塊PCB中;當作業系統要執行一個新的程序時,將PCB中的相關值送到對應的暫存器中。

執行緒的定義

程序中的一個執行實體,是CPU的排程單位,有時將執行緒稱為輕量級程序。

執行緒共享所在程序的地址空間和其他資源。

執行緒機制的實現

使用者級執行緒

在使用者空間建立執行緒庫:提供一組管理執行緒的過程。執行時系統完成執行緒的管理工作,核心管理的還是程序,不知道執行緒的存在,執行緒切換不需要核心態特權。

使用者級執行緒

優點:

  • 執行緒切換快
  • 排程演算法是應用程式特定的
  • 使用者級執行緒可執行在任何作業系統上(只需要實現執行緒庫)

缺點:

  • 大多數系統呼叫是阻塞的,因此,由於核心阻塞程序,故程序中所有執行緒也被阻塞

核心級執行緒

核心管理所有執行緒管理,並嚮應用程式提供API介面。核心維護程序和執行緒的上下文,且執行緒的切換需要核心支援。

核心級執行緒

混合模型

執行緒建立在使用者空間完成,執行緒排程等在核心態完成。

執行緒與程序的區別

  • 擁有資源:程序是資源分配的基本單位,但是執行緒不擁有資源,執行緒可以訪問隸屬程序的資源。
  • 排程:執行緒是獨立排程的基本單位,在同一程序中,執行緒的切換不會引起程序切換,從一個程序中的執行緒切換到另一個程序中的執行緒時,會引起程序切換。
  • 系統開銷:由於建立或撤銷程序時,系統都要為之分配或回收資源,如記憶體空間、I/O 裝置等,所付出的開銷遠大於建立或撤銷執行緒時的開銷。類似地,在進行程序切換時,涉及當前執行程序 CPU 環境的儲存及新排程程序 CPU 環境的設定,而執行緒切換時只需儲存和設定少量暫存器內容,開銷很小。
  • 通訊方面:執行緒間可以通過直接讀寫同一程序中的資料進行通訊,但是程序通訊需要藉助 IPC。

參考資料