Linux中认为线程就是共享上下文的(CONTEXT)的进程,可以通过非标准的系统调用clone()来处理。
上下文简单来说就是一个环境,相对于进程而言,就是进程执行时的环境。具体来说就是各个变量和数据,包括所有的寄存器变量,进程打开的文件,内存信息等。一个进程的上下文可以分为三个部:用户级的上下文,寄存器的上下文和系统级的上下文。
用户级上下文:正文,数据,用户栈以及共享存储区;寄存器上下文:通用寄存器,程序寄存器(IP),处理机状态寄存器(EFLAGS),栈指针(ESP);系统级上下文:进程控制块(task_struct),内存管理信息(mm_struct,vm_area_struct,pgd,pmd,pte等),核心栈等。
当发生进程调度时,进行的进程切换就是上下文切换(context switch),操作系统必须对上面提到的全部上下文信息进行切换,新调度才能运行。
而系统调用进行的是模式切换(mode switch)。模式切换与进程切换比较起来,要容易的多,而且节省时间,因为模式切换最主要的任务只是进行寄存器级的上下文切换。