進程標志:
- PF_ALIGNWARN 打印“對齊”警告信息。
- PF_PTRACED 被ptrace系統(tǒng)調(diào)用監(jiān)控。
- PF_TRACESYS 正在跟蹤。
- PF_FORKNOEXEC 進程剛創(chuàng)建,但還沒執(zhí)行。
- PF_SUPERPRIV 超級用戶特權(quán)。
- PF_DUMPCORE dumped core。
- PF_SIGNALED 進程被信號(signal)殺出。
- PF_STARTING 進程正被創(chuàng)建。
- PF_EXITING 進程開始關(guān)閉。
- PF_USEDFPU 該進程使用FPU(SMP only)。
- PF_DTRACE delayed trace (used on m68k)。
(3) long priority;
進程優(yōu)先級。 Priority的值給出進程每次獲取CPU后可使用的時間(按jiffies計)。優(yōu)先級可通過系統(tǒng)調(diào)用sys_setpriorty改變(在kernel/sys.c中)。
(4) unsigned long rt_priority;
rt_priority給出實時進程的優(yōu)先級,rt_priority+1000給出進程每次獲取CPU后可使用的時間(同樣按jiffies計)。實時進程的優(yōu)先級可通過系統(tǒng)調(diào)用sys_sched_setscheduler()改變(見kernel/sched.c)。
(5) long counter;
在輪轉(zhuǎn)法調(diào)度時表示進程當前還可運行多久。在進程開始運行是被賦為priority的值,以后每隔一個tick(時鐘中斷)遞減1,減到0時引起新一輪調(diào)度。重新調(diào)度將從run_queue隊列選出counter值最大的就緒進程并給予CPU使用權(quán),因此counter起到了進程的動態(tài)優(yōu)先級的作用(priority則是靜態(tài)優(yōu)先級)。
(6) unsigned long policy;
該進程的進程調(diào)度策略,可以通過系統(tǒng)調(diào)用sys_sched_setscheduler()更改(見kernel/sched.c)。調(diào)度策略有:
- SCHED_OTHER 0 非實時進程,基于優(yōu)先權(quán)的輪轉(zhuǎn)法(round robin)。
- SCHED_FIFO 1 實時進程,用先進先出算法。
- SCHED_RR 2 實時進程,用基于優(yōu)先權(quán)的輪轉(zhuǎn)法。
2. 信號處理 (1) unsigned long signal;
進程接收到的信號。每位表示一種信號,共32種。置位有效。
(2) unsigned long blocked;
進程所能接受信號的位掩碼。置位表示屏蔽,復(fù)位表示不屏蔽。
(3) struct signal_struct *sig;
因為signal和blocked都是32位的變量,Linux最多只能接受32種信號。對每種信號,各進程可以由PCB的sig屬性選擇使用自定義的處理函數(shù),或是系統(tǒng)的缺省處理函數(shù)。指派各種信息處理函數(shù)的結(jié)構(gòu)定義在include/linux/sched.h中。對信號的檢查安排在系統(tǒng)調(diào)用結(jié)束后,以及“慢速型”中斷服務(wù)程序結(jié)束后(IRQ#_interrupt(),參見Array。5節(jié)“啟動內(nèi)核”)。
3. 進程隊列指針 (1) struct task_struct *next_task,*prev_task;
所有進程(以PCB的形式)組成一個雙向鏈表。next_task和就是鏈表的前后指針。鏈表的頭和尾都是init_task(即0號進程)。
(2) struct task_struct *next_run,*prev_run;
由正在運行或是可以運行的,其進程狀態(tài)均為TASK_RUNNING的進程所組成的一個雙向循環(huán)鏈表,即run_queue就緒隊列。該鏈表的前后向指針用next_run和prev_run,鏈表的頭和尾都是init_task(即0號進程)。
(3) struct task_struct *p_opptr,*p_pptr;和struct task_struct *p_cptr,*p_ysptr,*p_osptr; 以上分別是指向原始父進程(original parent)、父進程(parent)、子進程(youngest child)及新老兄弟進程(younger sibling,older sibling)的指針。 4. 進程標識 (1) unsigned short uid,gid;
uid和gid是運行進程的用戶標識和用戶組標識。
(2) int groups[NGROUPS];
與多數(shù)現(xiàn)代UNIX操作系統(tǒng)一樣,Linux允許進程同時擁有一組用戶組號。在進程訪問文件時,這些組號可用于合法性檢查。
(3) unsigned short euid,egid;
euid和egid又稱為有效的uid和gid。出于系統(tǒng)安全的權(quán)限的考慮,運行程序時要檢查euid和egid的合法性。通常,uid等于euid,gid等于egid。有時候,系統(tǒng)會賦予一般用戶暫時擁有root的uid和gid(作為用戶進程的euid和egid),以便于進行運作。
(4) unsigned short fsuid,fsgid;
fsuid和fsgid稱為文件系統(tǒng)的uid和gid,用于文件系統(tǒng)操作時的合法性檢查,是Linux獨特的標識類型。它們一般分別和euid和egid一致,但在NFS文件系統(tǒng)中NFS服務(wù)器需要作為一個特殊的進程訪問文件,這時只修改客戶進程的fsuid和fsgid。
(5) unsigned short suid,sgid;
suid和sgid是根據(jù)POSIX標準引入的,在系統(tǒng)調(diào)用改變uid和gid時,用于保留真正的uid和gid。
(6) int pid,pgrp,session;
評論
查看更多