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

Cod*_*ith 4 multithreading operating-system

我的 CS 教授告诉全班,操作系统不知道应用程序启动了线程。这是真的?

mis*_*mer 5

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

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

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