行程與行程抽象

行程控制區塊(process control block)

想像醫院為每位病人保留一份病歷:姓名與編號、目前狀況、用藥、主治醫師、待做的檢查。醫護人員可以先把一位病人擱下、稍後再接手,因為恢復照護所需的一切都在病歷上。行程控制區塊(PCB)就是作業系統為某個行程準備的「病歷」:一筆紀錄,存放作業系統為了正確地暫停與恢復該行程所需知道的一切。

PCB 通常儲存行程識別碼(PID);行程狀態(執行中、就緒、等待等等);儲存下來的 CPU 暫存器,包括程式計數器,好讓行程能準確地從中斷處恢復;記憶體管理資訊,例如它的位址空間在哪裡(基底/界限或分頁表);開啟的檔案及其他輸入輸出資源的清單;像優先權這類排程資訊;以及像已使用 CPU 時間這類的記帳資料。當作業系統進行環境切換時,它把執行中行程的暫存器存進該行程的 PCB,再從下一個行程的 PCB 載入它的暫存器;PCB 正是讓暫停與恢復成為可能的東西。

PCB 是行程在核心內部的具體化身。作業系統把這些結構保存在一張行程表中,並用它們來追蹤與管理系統中的每一個行程。一個有用的思考檢驗:作業系統在某行程「不執行的期間」必須記住的任何東西,都得住在 PCB 裡(或它所指向的結構裡),因為一旦另一個行程開始執行,CPU 暫存器裡的一切都會被覆寫。

在切離行程 A 之前,作業系統把 A 的程式計數器與暫存器複製進 A 的 PCB。數小時後要恢復 A 時,再把它們從 PCB 複製回 CPU,A 便彷彿從未停下般繼續執行。

PCB 是那份被保存的快照,讓行程得以暫停與恢復。

PCB 住在核心記憶體中,而不在行程自己的位址空間裡,所以行程無法讀取或破壞自己的 PCB;這種分隔是保護的一環。

又称
PCBprocess descriptortask control block行程控制區塊行程描述符