PCB(process control block),

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

  (2)處理機的信息(通用寄存器,指令計數器,PSW,用戶的棧指針)。
  (3)進程調度信息(進程狀態,進程的優先級,進程調度所需的其它信息,事件)
  (4)進程控制信息(程序的數據的地址,資源清單,進程同步和通信機制,鏈接指針)
  數據結構中定義的內容是爲後面的管理提供支持的,所以不同的操作系統根據自己的特點又對PCB的內容做了一些調整。下面整理了比較流行的一些操作系統的PCB結構,供參考。
  1.Linux的進程塊
  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指明進程家族間的關係,分別爲指向祖父進程、父進程、子進程以及新老進程的指針。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章