为什么阻止系统呼叫使用用户级线程阻止整个过程



我不明白以下内容:

用户级线程需要非阻止系统调用,即多线程内核。否则,即使过程中剩下可运行的线程,整个过程也将在内核中阻塞。

内核线程如何处理阻止系统调用?在一个线程进行阻止系统调用(例如读取)时,在用户级线程中,为什么其他线程不能继续其工作?

当一个线程制作阻止系统时,在用户级线程中 致电(例如阅读)为什么其他线程继续工作?

就OS和内核而言,使用用户级线程,该过程中只有一个线程。一个线程可能正在执行一些巧妙的技巧(例如从一个用户thread-context切换到另一个用户),但是它仍然只是一个线程,它在几个指令流之间定期来回切换。

因此,当该单个线程调用阻止系统调用时,该线程必须阻止直到该系统调用返回,并且虽然被阻止,则该线程无能为力。在特殊中,它在阻止时无法做的一件事是切换到另一个用户thread-context并运行更多代码,因为没有办法调用switch to to to to to to-用户thread-context例程。谁会打电话?唯一可用的"真实"线程是在系统调用中被阻止的线程,并且因为它在系统调用中被阻止。

内核线程如何处理阻止系统调用?

使用内核线程,内核意识到过程中的所有线程,因为内核创建了它们(代表应用程序)并直接管理它们,因此内核可以直接安排它们。因此,当系统调用中的螺纹A块时,内核/调度程序可以继续运行线程B一段时间,因为内核知道螺纹B存在。(将其与用户线程案例进行对比,内核无法安排线程B进行运行,因为内核不知道该线程B存在;只有用户应用本身就知道了用户级线程的存在)

最新更新