操作系统是否意识到应用程序线程



我的计算机科学教授告诉我们,操作系统不知道应用程序已经启动了线程。这是真的吗?

这取决于线程的类型。纯在用户级实现的线程对于操作系统来说是未知的。这可以通过signals、setjmp和longjmp来实现(详细信息请参见www.gnu.org/s/pth/rse-pmt.ps)。或者,如果您谈论的是Linux pthreads之类的东西,它只实现了pthreads规范的一个子集,特别是涉及到创建内核能够感知和调度的新执行线程的部分,那么内核就会感知到。

如果您想了解更多关于内核如何感知的细节,您可以查看clone系统调用。这个系统调用可以用来创建一个新的执行线程,该线程共享调用进程的地址空间。

同样,在用户空间实现线程的情况下,您将无法获得真正的并行性,因为两个线程将在不同的内核/硬件线程上同时执行,因为执行调度的操作系统不知道多个线程。

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

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

最新更新