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

时间:2015-10-05 20:53:56

标签: multithreading operating-system

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

2 个答案:

答案 0 :(得分:4)

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

如果要查看有关内核如何识别的更多详细信息,可以查看克隆系统调用。此系统调用可用于创建一个新的执行线程,该线程共享调用进程的地址空间。

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

答案 1 :(得分:1)

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

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