我的CS教授告诉全班,操作系统不知道应用程序已启动线程。这是真的吗?
答案 0 :(得分:4)
这取决于线程的类型。纯粹在用户级实现的线程对于操作系统是未知的。这可以使用signal和setjmp以及longjmp来完成(有关详细信息,请参阅www.gnu.org/s/pth/rse-pmt.ps)。或者,如果您正在讨论诸如Linux pthreads之类的东西,它只实现了pthreads规范的子集,特别是涉及创建内核知道和调度的新执行线程的部分,那么内核就知道了。
如果要查看有关内核如何识别的更多详细信息,可以查看克隆系统调用。此系统调用可用于创建一个新的执行线程,该线程共享调用进程的地址空间。
同样在用户空间实现线程的情况下,你将无法获得真正的并行性,因为两个线程将在不同的核心/硬件线程上完全同时执行,因为操作系统执行调度,不知道多线程。
答案 1 :(得分:1)
这取决于操作系统。较旧的操作系统没有线程。编程库将使用定时器实现线程(例如,Ada任务)。该库包含一个线程调度程序。
现在,操作系统调度线程执行变得越来越普遍。在那里,操作系统知道线程。