進程是操作系統的資源分配和獨立運行的基本單位。它一般由以下三個部分組成。
進程控制塊
進程創建時,操作系統就新建一個PCB結構,它之后就常駐內存,任一時刻可以存取, 在進程結束時刪除。PCB是進程實體的一部分,是進程存在的唯一標志。
當創建一個進程時,系統為該進程建立一個PCB;當進程執行時,系統通過其PCB了解進程的現行狀態信息,以便對其進行控制和管理;當進程結束時,系統收回其PCB,該進程隨之消亡。操作系統通過PCB表來管理和控制進程。
進程描述信息 | 進程控制和管理信息 | 資源分配清單 | 處理機相關信息 |
---|---|---|---|
進程標識符(PID) | 進程當前狀態 | 代碼段指針 | 通用寄存器值 |
用戶標識符(UID) | 進程優先級 | 數據段指針 | 地址寄存器值 |
代碼運行入口地址 | 堆棧段指針 | 控制寄存器值 | |
程序的外存地址 | 文件描述符 | 標志寄存器值 | |
進入內存時間 | 鍵盤 | 狀態字 | |
處理機占用時間 | 鼠標 | ||
信號量使用 |
上表是一個PCB的實例,PCB主要包括進程描述信息、進程控制和管理信息、資源分配清單和處理機相關信息等。各部分的主要說明如下:
1) 進程描述信息
進程標識符:標志各個進程,每個進程都有一個並且是唯一的標識號。
用戶標識符:進程歸屬的用戶,用戶標識符主要為共享和保護服務。
2) 進程控制和管理信息
進程當前狀態:描述進程的狀態信息,作為處理機分配調度的依據。
進程優先級:描述進程搶占處理機的優先級,優先級高的進程可以優先獲得處理機。
3) 資源分配清單,用於說明有關內存地址空間或虛擬地址空間的狀況;所打開文件的列表和所使用的輸入/輸出設備信息。
4) 處理機相關信息,主要指處理機中各寄存器值,當進程被切換時,處理機狀態信息都必須保存在相應的PCB中,以便在該進程重新執行時,能再從斷點繼續執行。
在一個系統中,通常存在着許多進程,有的處於就緒狀態,有的處於阻塞狀態,而且阻塞的原因各不相同。為了方便進程的調度和管理,需要將各進程的PCB用適當的方法組織起來。目前,常用的組織方式有鏈接方式和索引方式兩種。鏈接方式將同一狀態的PCB鏈接成一個隊列,不同狀態對應不同的隊列,也可以把處於阻塞狀態的進程的PCB,根據其阻塞原因的不同,排成多個阻塞隊列。索引方式是將同一狀態的進程組織在一個索引表中,索引表的表項指向相應的PCB,不同狀態對應不同的索引表,如就緒索引表和阻塞索引表等。
程序段
程序段就是能被進程調度程序調度到CPU執行的程序代碼段。注意,程序可以被多個進程共享,就是說多個進程可以運行同一個程序。
數據段
一個進程的數據段,可以是進程對應的程序加工處理的原始數據,也可以是程序執行時產生的中間或最終結果。