挑戰408——操作系統(5)——PCB與進程控制

進程的活動是通過在CPU上執行一系列程序和對數據進行相應操作的完成來體現的,因此程序和數據是組成進程的實體,爲了反映進程的動態特徵,需要一個數據結構來描述進程本身的特性狀態,調度信息以及對資源的佔有等等。這個數據結構我們稱之爲進程控制塊(PCB)

PCB的內容

PCB主要包含下面幾部分的內容:

  1. 進程的描述信息,比如進程的名稱,標識符,
  2. 處理機的狀態信息,當程序中斷是保留此時的信息,以便CPU返回時能從斷點執行
  3. 進程調度信息,比如阻塞原因,狀態,優先級等等
  4. 進程控制和資源佔用,同步通信機制,鏈接指針(指向隊列中下一個進程的PCB地址)

PCB的作用:

  • PCB是進程實體的一部分,是操作系統中最重要的數據結構
  • 由於它的存在,使得多道程序環境下,不能獨立運行的程序成爲一個能獨立運行的基本單位,使得程序可以併發執行
  • 系統通過PCB來感知進程的存在。(換句話說,PCB是進程存在的唯一標識)
  • PCB應該常駐內存

進程的組成可以用下圖來表示:
在這裏插入圖片描述
而進程之間可以通過PCB中的鏈接指針找到下一個進程,他們彼此之間組成一個鏈隊列:
在這裏插入圖片描述

進程控制

進程控制主要表現在對一個進程進行創建,撤銷以及進程狀態之間進行轉換控制這些操作都是通過前面的原語操作執行的

進程的創建與撤銷

進程允許創建和控制另一個進程,前者稱爲父進程,後者稱爲子進程,子進程又可以創建孫進程,如此下去進而形成一個進程的家族樹,這樣子進程就可以從父進程那裏繼承所有的資源,當子進程撤銷時,便將從父進程處獲得的所有資源歸還,此外,撤銷父進程,則必須撤銷所有的子進程。(撤銷的過程實際上就是對這棵家族樹進行後序遍歷的過程
在應用中創建一個子進程的過程如下:

  1. 申請空白的PCB
  2. 初始化進程描述信息
  3. 爲進程分配資源以及地址空間
  4. 將其插入就緒隊列中

當進程完成後,系統會回收佔用的資源,撤銷進程,而引發進程撤銷的情況有:進程正常結束或者異常結束,外界的干預(比如我們在任務管理器中強制停止某個進程的運行)。

  • 查找需要撤銷的進程的PCB
  • 如果進程處於運行狀態,終止進程並進行調度
  • 終止子孫進程
  • 歸還資源
  • 將它從所在的隊列中移除

進程的阻塞和喚醒

. 前面我們說過,進程的阻塞是進程的一種主動的行爲,但是沒有解釋爲什麼,現在我們解釋一下,進程執行過程中常常會因爲等待I/O或者某個事件的出現而進入阻塞狀態。當處於阻塞狀態的進程所等待的操作完成或者事件出現時,進程就會從阻塞狀態喚醒而進入就緒狀態。因此進程的阻塞是進程自身的一種主動行爲,是進程自己通過阻塞原語自己阻塞。
阻塞原語如下:

  1. 停止進程執行
  2. 進程插入阻塞隊列
  3. 重新調度

喚醒原語如下:

  • 將進程從阻塞隊列卸下
  • 插入就緒隊列
  • 修改進程在PCB中的狀態

注意,進程的阻塞和喚醒原語是一對功能相反的原語,若某個進程調用了阻塞原語,則必有一個與之對應的喚醒原語。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章