在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