用户线程为何必须映射到内核线程?2025年4月29日 | 阅读 6 分钟 内核线程是实际的、能够被处理器调度和执行的线程。用户程序也可以进行自己的调度。然而,这些不是内核线程。每个用户线程都不能独立运行,这就是为什么它需要一个内核级别的线程。 因此,为了让用户级线程取得进展,用户程序必须让其调度器将一个用户级线程映射到一个内核级线程上,然后我们有不同的映射方式来实现这一点。在深入探讨之前,你需要简要了解用户线程、内核线程及其映射。 什么是线程?线程是计算机系统中 CPU 利用率的基本原子单位。通常我们将进程视为 CPU 利用率的基本单位,但一个进程可以进一步划分为多个执行线程。一个进程可以划分为不同的任务或单元,这些单元可以独立执行,这些单元称为线程。 线程是一个轻量级进程,调度器可以独立管理。它通过并行性提高应用程序性能。线程与其同级线程共享数据段、代码段文件等信息,同时拥有自己的寄存器、堆栈、计数器等。在计算机系统中创建的两种主要线程类型是
线程可以在进程的地址空间内创建,即在进程内核参与下或在没有内核参与的情况下创建。 ![]() 什么是用户线程?用户线程是由用户借助用户库创建的线程,仅对创建进程及其运行时环境可见,内核不知道这些线程的创建。用户线程仅保留在创建进程的地址空间内,由创建进程在没有内核参与的情况下运行和管理。 用户级线程比内核级线程小且快得多。它们由程序计数器 (PC)、堆栈、寄存器和一个小型进程控制块表示。 优点 用户级线程的一些优点如下:
缺点 用户级线程存在以下缺点:
什么是内核线程?另一方面,内核级线程由操作系统直接处理,内核负责线程管理。内核管理进程和进程线程的上下文信息。因此,内核级线程比用户级线程慢。 优点 内核级线程的一些优点如下:
缺点 内核级线程也存在以下缺点:
用户线程如何映射到内核线程用户线程由线程库映射到内核线程。这种映射方式称为 **线程模型**。 用户线程到内核线程的映射是通过 **虚拟处理器** 完成的。虚拟处理器 (VP) 是一个通常是隐式的库实体。VP 是一个内核线程或库中绑定到内核线程的结构。对于用户线程,VP 表现得像一个 CPU。 存在以下可能的线程模型,所有模型都用于将用户级线程映射到内核级线程。
在 M:N 模型和两级模型中,内核必须有一种方法与用户级线程管理器进行通信,以维持分配给进程的内核线程的适当数量。这种机制称为 **调度程序激活**。 内核向应用程序提供一组内核线程(虚拟处理器),然后应用程序可以完全控制在每个内核线程上运行哪些线程。内核根据系统中不同进程的竞争需求来控制该集合中内核线程的数量。 内核使用从内核到用户级线程管理器的 **上调** 来通知用户级线程管理器重要的内核事件。 例如,让我们研究一个调度程序激活如何使用的示例。
用户线程为何必须映射到内核线程?用户线程需要映射到内核线程,因为是内核调度线程在 CPU 上执行,为此,它必须知道它正在调度的线程。 进程创建的所有用户线程都运行在分配给整个进程的同一个内核级线程上。每当该进程轮到在 CPU 上执行时,其内核线程就会被调度到 CPU 上。进程内的所有其他用户线程如果需要执行,都必须逐个映射到分配给创建进程的内核线程上。 由于它们都由创建进程本身控制,因此用户线程必须逐个映射到指定的内核线程,然后才能执行。 下一个主题核心操作系统 |
我们请求您订阅我们的新闻通讯以获取最新更新。