Linux 任务切换未采用 Intel 的做法,而是用了一套自己的方法,只用了 TSS 小部分功能。
CPU提供了0、1、2、3共4个特权级,linux只用了内核特权级0和用户特权级3。
有一件工作必须且只能用 TSS 来完成,这就是 CPU 向更高特权级转移时所使用的栈地址,需要提前在 TSS 中写入。
导致转移到更高特权级的一种情况是在用户模式下发生中断, CPU 会由低特权级进入高特权级,这会发生堆栈的切换。当一个中断发生在用户模式(特权级 ),处理器从当前TSS的SS0和esp0成员中获取用于处理中断的堆栈。因此,我们必须创建一个 TSS ,并且至少初始化 TSS 中的这些字段。
我们使用 TSS 唯一的理由是为0特权级的任务提供栈。
进程的作用:
引入进程是为了实现多个任务的并发执行。进程就相当于一个任务。
线程的作用:
为了加快一个任务(进程)的执行,如果使用进程把一个任务拆分为多个进程,需要进程间协作通信,数据交换。进程有自己的独立存储空间,数据交换需要经过系统调用。因此,一种共享存储空间的进程概念应运而生,它被称为轻量级进程(Light-Weight Process)。让完成同一任务的轻量级进程共享一片存储空间,而且轻量级进程又作为cpu调度的单位。轻量级进程也叫做线程。
linux早期只有进程,后来使用轻量级进程来支持多线程。