在Linux內核樹中,文件/include/linux/sched.h
包含task_struct
,除其他數據外,其中定義了變量volatile long state
。爲什麼task_struct中的進程狀態存儲爲'long'類型?
據this page,存儲在state
數量代表的五種狀態之一:
#define TASK_RUNNING 0
#define TASK_INTERRUPTIBLE 1
#define TASK_UNINTERRUPTIBLE 2
#define TASK_ZOMBIE 4
#define TASK_STOPPED 8
我的問題如下:
爲什麼用這麼大的數據類型來存儲狀態?單個字節不會完全足以存儲上述狀態嗎?當然,long
是不是因爲預期成千上萬個可能的狀態而選擇的?
我知道long
的定義會因不同的體系結構而有所不同,但我認爲char
已經足夠了。
您是否檢查過該標頭的實際內容?有'#define TASK_NOLOAD 1024'定義,所以任務狀態肯定不適合'char'。很可能,未來會添加另一個標誌,即使是「int」也是不夠的。 – Tsyvarev