进程所具备的条件
一般来说,linux系统中的进程都具备下列诸元素:
(1)有一段程序供其执行,即使是和其他进程共用;
(2)有进程专用的系统堆栈空间;
(3)有task_struct数据结构,也就是进程控制块。有了这个数据结构,进程才能成为内核调度的一个基本单位,从而接受内核的调度。但同时,该数据结构也记录着进程所占用的各项资源;
(4)有独立的存储空间,即用户空间堆栈。
这四条都是必要条件,缺一不可,否则就只能称作是线程了。如果完全没有用户空间,就称作是“内核线程”;而共享用户空间就称作是“用户线程”。也统称线程。
这是内核层面的线程,与用户空间里实现的线程是完全不同的。参考操作系统之用户空间和内核空间实现线程
另外,在linux系统中“进程”和“任务”是同一个意思,主要是因为linu想源自Unix和i376系统结构。而Unix中的进程在Intel的技术资料中则称为“任务”。
task_struct与用户空间堆栈的联系
前面讲到,每个进程都有一个task_struct数据结构和一片用作系统空间堆栈的存储空间。这两者缺一不可,又有紧密的联系,所以在物理存储空间也连在一起。内核为每个进程分配一个task_struct结构时,实际上是分配两个连续的物理页面(共8192字节)