第一个问题:用户线程和内核线程之间的区别是什么?它只是一个由用户程序生成的,另一个由操作系统生成,后者可以访问特权指令?他们在概念上是一样的还是在线程本身有实际的差异?
解决方案
内核线程是由操作系统维护的线程对象。它是能够由处理器调度和执行的实际线程。通常,系统线程是具有权限设置,优先级等的重量级对象。内核线程调度程序负责调度内核线程。用户程序可以使他们自己的线程调度程序太。他们可以制作自己的“线程”,并模拟上下文切换以在它们之间切换。但是,这些线程不是内核线程。每个用户线程实际上不能独立运行,用户线程运行的唯一方法是如果内核线程实际上被告知要执行用户线程中包含的代码。也就是说,用户线程比内核线程有更大的优势。他们可以更轻量级,因为他们不一定需要有自己的优先级,可以通过单个进程(可能有更好的信息,有关什么线程需要运行),并且不创建大量的内核对象用于安全和锁定。
第二个问题,我的问题的真正的问题是:我使用的书说“关系必须存在于用户线程和内核线程之间,“接下来列出这种关系的不同模型。但该书未能清楚地解释为什么用户线程必须始终映射到特定的内核线程。为什么是这样?
用户线程必须与内核线程相关联的原因是,用户线程本身只是一堆数据用户程序。内核线程是系统中的真正线程,因此对于用户线程来说,用户程序必须让它的调度器采用用户线程,然后在内核线程上运行它。用户线程和内核线程之间的映射不必是一对一(1:1)映射;你可以有多个用户线程共享相同的内核线程(每次只运行其中一个用户线程),并且你可以有一个单独的用户线程在不同的内核线程(1:n)映射之间循环。