线程:为什么所有用户线程都必须映射到内核线程?

这里有两个问题。首先,(是的,我已经搜索过了,但想澄清一下),用户线程和内核线程之间的区别是什么?一个是由用户程序生成的,另一个是由操作系统生成的,后者可以访问特权指令吗?它们在概念上是相同的还是线程本身存在实际的差异

其次,我的问题的真正问题是:我正在使用的那本书说“用户线程和内核线程之间必须存在关系”,接着列出了这种关系的不同模型。但是这本书没有清楚地解释为什么用户线程必须始终映射到特定的内核线程。为什么会这样

内核线程是由操作系统维护的线程对象。它是一个能够由处理器调度和执行的实际线程。通常,内核线程是具有权限设置、优先级等的重量级对象。内核线程调度器负责调度内核线程

用户程序也可以创建自己的线程调度程序。他们可以创建自己的“线程”,并模拟上下文切换以在它们之间切换。但是,这些线程不是内核线程。每个用户线程实际上不能单独运行,用户线程运行的唯一方法是告诉内核线程执行用户线程中包含的代码。这就是说,用户线程比内核线程具有主要优势。它们可以更加轻量级,因为它们不一定需要有自己的优先级,可以由单个进程管理(该进程可能有关于何时需要运行线程的更好信息),并且不需要为了安全和锁定而创建大量内核对象

用户线程必须与内核线程相关联的原因是,用户线程本身就是用户程序中的一组数据。内核线程是系统中真正的线程,因此用户线程要取得进展,用户程序必须让其调度程序获取一个用户线程,然后在内核线程上运行它。用户线程和内核线程之间的映射不必是一对一(1:1);您可以让多个用户线程共享同一个内核线程(一次只能运行其中一个用户线程),也可以让单个用户线程在1:n映射中跨不同的内核线程旋转

发表评论