2
当调度程序正在等待select(),poll()或其他同步(阻塞)模式下的套接字操作时,Linux调度程序的流程将流向另一个进程吗?流程在等待时的状态是什么?它究竟如何醒来?阻止调用和Linux调度程序
有一个版本的进程处于'睡眠'状态,它被唤醒WCHAN的内核唤醒,是的,操作系统将安排其他进程运行,而其中一个被阻塞在IO上。该变体是否正确?你知道我应该读些什么吗?
当调度程序正在等待select(),poll()或其他同步(阻塞)模式下的套接字操作时,Linux调度程序的流程将流向另一个进程吗?流程在等待时的状态是什么?它究竟如何醒来?阻止调用和Linux调度程序
有一个版本的进程处于'睡眠'状态,它被唤醒WCHAN的内核唤醒,是的,操作系统将安排其他进程运行,而其中一个被阻塞在IO上。该变体是否正确?你知道我应该读些什么吗?
是的。通常当进程执行系统调用时,它会自动调用调度并等待内存中的页面(将在I/O中读取)。在I/O完成处理程序中,它释放此页面上的锁,它将等待进程从等待队列中移除,并将它们放回到可继续执行的运行队列中。我认为操作系统书籍应该覆盖它,如果你愿意阅读它,但我只是看看代码:)
老实说,我确实看过代码。内核代码并不是第一次要掌握的最简单的事情。我会再试一次。谢谢 – 0100110010101
@ifesdjeen具体来说,您可以查看end_bio_read以及进入VFS的read()和write()系统调用路径。它确实有点复杂,所以如果你想要一个全面的视图,我会选择一个标准的大学操作系统教科书。 –
好吧,我已经通读了解Linux内核和Linux编程接口以获得更多知识。我*认为*我已阅读了其中一个醒来的过程。如果您能提出更多要阅读的内容,我将不胜感激。我认为这对每个程序员来说都是一个非常重要的话题。 – 0100110010101