【发布时间】:2018-09-14 15:25:21
【问题描述】:
来自 Abraham Silberschatz、Greg Gagne 和 Peter Baer Galvin 的 Operating System Concepts,这里讨论了用户线程与内核线程:
可以在用户级别为用户提供对线程的支持 线程,或由内核,用于内核线程。
用户线程是 在内核之上支持,并且在没有内核支持的情况下进行管理,
内核线程直接由 操作系统。几乎所有当代运营 系统(包括 Windows、Linux、Mac OS X 和 Solaris)支持 内核线程。
最终,用户线程和内核之间必须存在关系 线程。在本节中,我们将介绍三种常见的建立方法 这样的关系:多对一模型、一对一模型和 多对多模型。
这里是用于创建和管理线程的用户级库与内核级库的讨论:
线程库为程序员提供了一个 API,用于创建和 管理线程。实现线程有两种主要方式 图书馆。
第一种方法是提供一个完全在用户空间中没有内核支持的库。库的所有代码和数据结构 存在于用户空间。这意味着在 库导致用户空间中的本地函数调用,而不是 系统调用。
第二种方法是实现操作系统直接支持的内核级库。在这种情况下,代码和数据 库的结构存在于内核空间中。调用函数 在库的 API 中通常会导致系统调用 内核。
目前使用三个主要线程库:POSIX Pthreads、Windows、 和Java。 Pthreads,POSIX 标准的线程扩展,可以 以用户级或内核级库的形式提供。这 Windows 线程库是 Windows 上可用的内核级库 系统。 Java 线程 API 允许创建和管理线程 直接在Java程序中。然而,因为在大多数情况下,JVM 在主机操作系统之上运行,Java 线程 API 是 通常使用主机上可用的线程库来实现 系统。这意味着在 Windows 系统上,Java 线程通常是 使用 Windows API 实现; UNIX 和 Linux 系统经常使用 线程。
用户线程和内核线程与线程级库和内核级库的对应方式有以下几种吗?
-
用户级库是否必须只创建和管理用户线程而不是内核线程?
-
内核级库是否必须只创建和管理内核线程而不是用户线程?
-
用户线程是否必须由用户级库而不是内核级库创建和管理?
-
内核线程是否必须由内核级库而不是用户级库创建和管理?
书中说“Pthreads,POSIX 标准的线程扩展,可以作为用户级或内核级库提供。”
-
PThread 在 Linux 中是内核级库,在 Windows 中是用户级库吗?
-
PThread 是否根据定义创建和管理用户线程或内核线程?
谢谢。
【问题讨论】:
标签: linux multithreading operating-system pthreads