1. 程式人生 > >task_struct結構體欄位介紹--Linux中的PCB

task_struct結構體欄位介紹--Linux中的PCB


(1) volatile long states;
表示程序的當前狀態:
? TASK_RUNNING:正在執行或在就緒佇列run-queue中準備執行的程序,實際參與程序排程。
? TASK_INTERRUPTIBLE:處於等待佇列中的程序,待資源有效時喚醒,也可由其它程序通過訊號(signal)或定時中斷喚醒後進入就緒佇列run-queue
? TASK_UNINTERRUPTIBLE:處於等待佇列中的程序,待資源有效時喚醒,不可由其它程序通過訊號(signal)或定時中斷喚醒。
? TASK_ZOMBIE:表示程序結束但尚未消亡的一種狀態(僵死狀態)。此時,程序已經結束執行且釋放大部分資源,但尚未釋放程序控制塊。

?TASK_STOPPED:程序被暫停,通過其它程序的訊號才能喚醒。導致這種狀態的原因有二,或者是對收到SIGSTOPSIGSTPSIGTTINSIGTTOU訊號的反應,或者是受其它程序的ptrace系統呼叫的控制而暫時將CPU交給控制程序。
? TASK_SWAPPING: 程序頁面被交換出記憶體的程序。
(2) unsigned long flags;
程序標誌:
?PF_ALIGNWARN        列印對齊警告資訊。
?PF_PTRACED           ptrace系統呼叫監控。
?PF_TRACESYS          正在跟蹤。
?PF_FORKNOEXEC       程序剛建立,但還沒執行。

?PF_SUPERPRIV         超級使用者特權。
?PF_DUMPCORE         dumped core
?PF_SIGNALED          程序被訊號(signal)殺出。
?PF_STARTING          程序正被建立。
?PF_EXITING            程序開始關閉。
?PF_USEDFPU           該程序使用FPU(SMP only)
?PF_DTRACE            delayed trace (used on m68k)
(3) long priority;
程序優先順序。 Priority的值給出程序每次獲取
CPU後可使用的時間(jiffies)。優先順序可通過系統呼叫sys_setpriorty改變(kernel/sys.c)
(4) unsigned long rt_priority;
rt_priority給出實時程序的優先順序,rt_priority+1000給出程序每次獲取CPU後可使用的時間(同樣按jiffies)。實時程序的優先順序可通過系統呼叫sys_sched_setscheduler()改變(kernel/sched.c)
(5) long counter;
在輪轉法排程時表示程序當前還可執行多久。在程序開始執行是被賦為priority的值,以後每隔一個tick(時鐘中斷)遞減1,減到0時引起新一輪排程。重新排程將從run_queue佇列選出counter值最大的就緒程序並給予CPU使用權,因此counter起到了程序的動態優先順序的作用(priority則是靜態優先順序)
(6) unsigned long policy;
該程序的程序排程策略,可以通過系統呼叫sys_sched_setscheduler()更改(kernel/sched.c)。排程策略有:
?SCHED_OTHER   0   非實時程序,基於優先權的輪轉法(round robin)
?SCHED_FIFO     1   實時程序,用先進先出演算法。
?SCHED_RR       2   實時程序,用基於優先權的輪轉法。