程序執行緒模型
文章目錄
程序的定義
程序是具有獨立功能的程式關於某個資料集合上的一次執行活動,是系統進行資源分配和排程的獨立單位。
程序控制塊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。
參考資料
- Tanenbaum A S, Bos H. Modern operating systems[M]. Prentice Hall Press, 2014.
- 北京大學作業系統原理(Operating Systems)
- 計算機作業系統