進程控制PCB

        PCB(process control block),進程控制塊,是我們學習操作系統後遇到的第一個數據結構描述,它是對系統的進程進行管理的重要依據,和進程管理相關的操作無一不用到PCB中的內容。一般情況下,PCB中包含以下內容:

(1)進程標識符(內部,外部)
(2)處理機的信息(通用寄存器,指令計數器,PSW,用戶的棧指針)。
(3)進程調度信息(進程狀態,進程的優先級,進程調度所需的其它信息,事件)
(4)進程控制信息(程序的數據的地址,資源清單,進程同步和通信機制,鏈接指針)

    數據結構中定義的內容是爲後面的管理提供支持的,所以不同的操作系統根據自己的特點又對PCB的內容做了一些調整。下面整理了比較流行的一些操作系統的PCB結構,供參考。

     Linux的進程控制塊爲一個由結構task_struct所定義的數據結構,task_struct存
/include/ linux/sched.h 中,其中包括管理進程所需的各種信息。Linux系統的所有進程控制塊組織成結構數組形式。早期的Linux版本是多可同時運行進程的個數由NR_TASK(缺省值爲512)規定,NR_TASK即爲PCB結果數組的長度。近期版本中的PCB組成一個環形結構,系統中實際存在的進程數由其定義的全局變量nr_task來動態記錄。結構數組:struct task_struct *task[NR_TASK]={&init_task}來記錄指向各PCB的指針,該指針數組定義於/kernel/sched.c中。

    在創建一個新進程時,系統在內存中申請一個空的task_struct區,即空閒PCB塊,並填入所需信息。同時將指向該結構的指針填入到task[]數組中。當前處於運行狀態進程的PCB用指針數組current_set[]來指出。這是因爲Linux支持多處理機系統,系統內可能存在多個同時運行的進程,故current_set定義成指針數組。
     Linux系統的PCB包括很多參數,每個PCB約佔1KB多的內存空間。用於表示PCB的結構task_struct簡要描述如下:

struct task_struct{
...
unsigned short uid;
int pid;
int processor;
...
volatile long state;
long prority;
unsighed long rt_prority;
long counter;
unsigned long flags;
unsigned long policy;
...
Struct task_struct *next_task, *prev_task;
Struct task_struct *next_run,*prev_run;
Struct task_struct *p_opptr,*p_pptr,*p_cptr,*pysptr,*p_ptr;
...
};
下面對部分數據成員進行說明:
(1)unsigned short pid 爲用戶標識
(2)int pid 爲進程標識
(3)int processor標識用戶正在使用的CPU,以支持對稱多處理機方式;
(4)volatile long state 標識進程的狀態,可爲下列六種狀態之一:

      可運行狀態(TASK-RUNING);
    可中斷阻塞狀態(TASK-UBERRUPTIBLE)
    不可中斷阻塞狀態(TASK-UNINTERRUPTIBLE)
    僵死狀態(TASK-ZOMBLE)
    暫停態(TASK_STOPPED)
    交換態(TASK_SWAPPING)

(5)long prority表示進程的優先級
(6)unsigned long rt_prority 表示實時進程的優先級,對於普通進程無效
(7)long counter 爲進程動態優先級計數器,用於進程輪轉調度算法
(8)unsigned long policy 表示進程調度策略,其值爲下列三種情況之一:

         SCHED_OTHER(值爲0)對應普通進程優先級輪轉法(round robin)
    SCHED_FIFO(值爲1)對應實時進程先來先服務算法;
    SCHED_RR(值爲2)對應實時進程優先級輪轉法

(9)struct task_struct *next_task,*prev_task爲進程PCB雙向鏈表的前後項指針
(10)struct task_struct *next_run,*prev_run爲就緒隊列雙向鏈表的前後項指針
(11)struct task_struct *p_opptr,*p_pptr,*p_cptr,*p_ysptr,*p_ptr指明進程家族間的關係,分別爲指向祖父進程、父進程、子進程以及新老進程的指針。


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