1. 程式人生 > >挑戰408——作業系統(5)——PCB與程序控制

挑戰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中的狀態

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