操作系统是否知道应用程序线程?

Is the operating system aware of application threads?

我的 CS 教授告诉 class OS 不知道应用程序已启动线程。这是真的吗?

这取决于线程的类型。纯粹在用户级实现的线程对于操作系统来说是未知的。这可以通过信号以及 setjmp 和 longjmp 来完成(有关详细信息,请参阅 www.gnu.org/s/pth/rse-pmt.ps)。或者,如果您正在谈论诸如 Linux pthreads 之类的东西,它仅实现 pthreads 规范的子集,特别是涉及创建内核知道并调度的新执行线程的部分,那么内核知道.

如果您想了解有关内核如何感知的更多详细信息,您可以查看克隆系统调用。此系统调用可用于创建共享调用进程地址 space 的新执行线程。

此外,在用户-space 实现线程的情况下,您不会获得真正的并行性,因为两个线程将在不同的 cores/hardware 线程上同时执行,因为进行调度的操作系统不知道多线程。

这取决于操作系统。较旧的操作系统没有线程。编程库将使用定时器实现线程(例如,Ada 任务)。该库包含一个线程调度程序。

操作系统调度线程执行现在越来越普遍。在那里,OS 知道线程。