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