【发布时间】:2020-02-13 21:16:58
【问题描述】:
1,我总是被告知每个线程都是执行上下文,但是线程究竟包含什么?它似乎包含调用堆栈、cpu 寄存器和实际执行代码?
2、线程也有两种——操作系统级线程和用户级线程。它们相互映射。对于cpu runs thread,cpu是只运行在其中一个上还是只运行在os级线程上?
3、说明cpurun线程是如何工作的有点混乱。我的意思是,据我所知,CPU 只能运行 0 和 1 的机器代码。那么 CPU 的上下文切换是什么意思?如果每个线程都包含作为指令的二进制文件,而 cpu 只是运行不同的指令?
【问题讨论】:
-
AFAIK 如今,“用户线程”与“操作系统级线程”的概念只是学术性的。曾经对用户模式调度程序、光纤等进行了实验,其中几个用户线程共享一个“真实”线程。从操作系统的角度来看,用户模式中的主流 Linux 线程与线程匹配。也就是说,当一个线程进行系统调用时,它会切换到内核模式,并保留它的身份,当然,转换到内核模式需要对执行上下文进行一定的更改,尤其是堆栈指针。当用户模式代码是 32 位但内核是 64 位或不同架构时更深刻的切换。