MINIX3 進程結構體1

剛開始學習MINIX3,把學到的一些東西寫下來,留作筆記。

MINIX3的內核文件中的/kernel/proc.h中定義了proc結構體:

/*進程結構體*/
struct proc {
  struct stackframe_s p_reg;	/* process' registers saved in stack frame */
  reg_t p_ldt_sel;		/* selector in gdt with ldt base and limit */
  struct segdesc_s p_ldt[2+NR_REMOTE_SEGS]; /* CS, DS and remote segments */

  proc_nr_t p_nr;		/* number of this process (for fast access) */
  struct priv *p_priv;		/* system privileges structure */
  char p_rts_flags;		/* SENDING, RECEIVING, etc. */

  char p_priority;		/* current scheduling priority */
  char p_max_priority;		/* maximum scheduling priority */
  char p_ticks_left;		/* number of scheduling ticks left */
  char p_quantum_size;		/* quantum size in ticks */

  struct mem_map p_memmap[NR_LOCAL_SEGS];   /* memory map (T, D, S) */

  clock_t p_user_time;		/* user time in ticks */
  clock_t p_sys_time;		/* sys time in ticks */

  struct proc *p_nextready;	/* pointer to next ready process 指向下一個ready狀態的進程 */
  struct proc *p_caller_q;	/* head of list of procs wishing to send 待接收消息進程隊列*/
  struct proc *p_q_link;	/* link to next proc wishing to send */
  message *p_messbuf;		/* pointer to passed message buffer */
  proc_nr_t p_getfrom;		/* from whom does process want to receive? 該進程希望從哪個進程獲得消息?*/
  proc_nr_t p_sendto;		/* to whom does process want to send? 該進程希望向哪個進程發送消息?*/

  sigset_t p_pending;		/* bit map for pending kernel signals */

  char p_name[P_NAME_LEN];	/* name of the process, including \0 */
};

其中,值得注意的是:

1、進程優先級:p_priority。它反映的是該進程當前的優先級,但是隨着進程不斷的調度,優先級是會有變化的,而p_max_priority就是該進程所能達到的最高優先級。優先級的大小與初始狀態、進程類型、調度算法有關。

2、發送給自己消息的進程隊列隊頭:p_caller_q。

3、p_q_link是指當該進程自己給其他進程發消息時,若自己處在其他進程的消息隊列時,它所指向的下一個隊列成員。

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