task_struct結構體欄位介紹--Linux中的PCB
阿新 • • 發佈:2019-02-11
(1) volatile long states;
表示程序的當前狀態:
? TASK_RUNNING:正在執行或在就緒佇列run-queue中準備執行的程序,實際參與程序排程。
? TASK_INTERRUPTIBLE:處於等待佇列中的程序,待資源有效時喚醒,也可由其它程序通過訊號(signal)或定時中斷喚醒後進入就緒佇列run-queue。
? TASK_UNINTERRUPTIBLE:處於等待佇列中的程序,待資源有效時喚醒,不可由其它程序通過訊號(signal)或定時中斷喚醒。
? TASK_ZOMBIE:表示程序結束但尚未消亡的一種狀態(僵死狀態)。此時,程序已經結束執行且釋放大部分資源,但尚未釋放程序控制塊。
?TASK_STOPPED:程序被暫停,通過其它程序的訊號才能喚醒。導致這種狀態的原因有二,或者是對收到SIGSTOP、SIGSTP、SIGTTIN或SIGTTOU訊號的反應,或者是受其它程序的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的值給出程序每次獲取
(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 實時程序,用基於優先權的輪轉法。