在處理器問題中描述的方法週期性地檢查一些數據寄存器被使用,它被稱爲輪詢。輪詢通常用於更簡單的系統中,因爲它實現起來很簡單,但它有浪費CPU週期來檢查可能存在或不存在的數據的缺點。
實際上,儘管大多數現代操作系統都會使用稱爲的中斷與OS調度程序一起使用的CPU硬件功能。在從網絡獲取數據的例子中,程序將使用一些阻塞讀取呼叫,這將等待從網絡接收數據。一旦進行讀取調用,調用程序將完全停止執行,操作系統的調度程序將使程序保持暫停狀態,直到收到數據。
通常情況下,程序發信號表示希望停止執行,直到發生某種事情(如接收到數據包)爲止,這種方式使用稱爲信號量(或類似的互斥機制)的軟件構造。但是,在網絡代碼的情況下,程序員不能直接訪問信號量。
當網卡接收到數據包時,網卡將數據包存儲到某處的RAM中。一旦完成,網卡會觸發CPU的中斷。中斷(通常)會導致CPU停止執行當前正在運行的任何程序,並且CPU執行與處理網絡活動相關的內核代碼。在這種情況下,它會將收到的數據包發送到正在等待接收數據的程序。
最後,內核使用信號量來表示數據包已收到。內核然後讓調度程序「喚醒」正在等待網絡數據的程序。程序可以處理數據,然後等待來自網絡的下一組數據。
如果您想了解更多信息,我建議您閱讀關於中斷,調度和信號量的操作。這些技術雖然不僅僅用於聯網。使用類似的方法訪問許多其他IO設備。
中斷或輪詢,有太多易於訪問的文檔來列出任何特別的。這個話題太廣泛了,而且信息很容易獲得。 –
另請參見[Wikipedia:Polling](https://en.wikipedia.org/wiki/Polling_(computer_science))和[Wikipedia:Interrupt](https://en.wikipedia.org/wiki/Interrupt) – xmojmr