从[此]复制粘贴(https://www.tutorialspoint.com/operating_system/os_multi_threading) 关联:
- 线程切换不需要内核模式权限。
- 用户级线程的创建和管理速度很快。
- 内核线程的创建和管理速度通常比用户线程慢。
- 将控制从同一进程中的一个线程转移到另一个线程需要切换到内核的模式。
我在阅读标准操作系统参考书时从未遇到过这些要点。虽然这些观点听起来很合乎逻辑,但我想知道它们在 Linux 中是如何反映的。准确地说:
有人可以给出用户线程和内核线程之间上下文切换所涉及的详细步骤,以便我可以找到两者之间的步骤差异。
有人可以用实际的上下文切换示例或代码解释其中的区别吗?可能涉及系统调用(在内核线程之间进行上下文切换的情况下)和涉及线程库调用(在用户线程之间进行上下文切换的情况下)。
有人可以将我链接到处理上下文切换的 Linux 源代码行(比如在 github 上)。
我还怀疑为什么内核线程之间的上下文切换需要更改为内核模式。我们不是已经处于第一个线程的内核模式了吗?
答案1
我认为您误解了所使用的术语。
在链接的教程和许多操作系统讲座/书籍的背景下(例子)用户线程和内核线程之间的经典区别是指:
查看用户线程的目的通常是为了说明协作多任务处理,展示保存真正的内核式上下文切换的优点并向学生介绍上下文切换。
与此相反,在 Linux 内核的上下文中,这些术语的定义有所不同:
- 内核线程 - 内核为在内核空间中运行的内核任务创建的轻量级线程
- 用户线程——由内核管理并在用户空间中运行的应用程序线程;即由
pthread_create()
或类似的库函数或由更底层的clone()
系统调用创建的线程