Linux内核是否知道用户地址空间中的pthreads(我不认为它是..但我没有找到任何信息)。当线程切换发生时,指令指针如何改变.. ??
答案 0 :(得分:5)
Linux中使用的本机NPTL(本机posix线程库)将pthreads映射到内核中的“共享资源,因此看起来像线程的进程”。通过这种方式,内核的调度程序直接控制pthreads的调度。
“pthread开关”由处理进程切换的完全相同的代码(在内核中)完成。简化后,这将类似于“存储先前的进程状态;如果下一个进程使用不同的虚拟地址空间,则切换虚拟地址空间;加载下一个进程状态;” (其中“进程状态”包括进程/线程的指令指针)。
答案 1 :(得分:2)
Linux内核不了解用户线程(pthread在用户空间中做了,而且内核并不真正关心它们,除了它只需知道要安排的内容)。
在所谓的上下文切换期间,内核中的指令指针被更改。在此切换期间,内核基本上要求调度程序下一步是什么?调度程序将为其提供一个task_struct,其中包含有关线程的所有信息,并且上下文切换的中断处理程序将继续并相应地设置CPU上的值(页表,指令指针等)以及何时该代码完成CPU只是从那里开始执行。
答案 2 :(得分:1)
1)内核不了解用户级线程。但是,NPTL不是用户级别
2)这是一个非常广泛的问题。你应该看一本OS书。它将深入探讨该问题以及所有其他涉及上下文切换的问题。