0
讓我們拿一個硬盤驅動器/網絡接口。它由多個進程共享。現在多個進程可能會向硬盤驅動器發出併發命令來讀取數據。當數據可用時,內核如何知道哪些進程已經準備好了數據?操作系統和硬盤驅動器之間是否存在一些協議?即與準備好的數據一起返回的一些元數據?操作系統 - 操作系統如何將就緒設備數據映射到相應的進程
讓我們拿一個硬盤驅動器/網絡接口。它由多個進程共享。現在多個進程可能會向硬盤驅動器發出併發命令來讀取數據。當數據可用時,內核如何知道哪些進程已經準備好了數據?操作系統和硬盤驅動器之間是否存在一些協議?即與準備好的數據一起返回的一些元數據?操作系統 - 操作系統如何將就緒設備數據映射到相應的進程
當涉及到特定於每個進程的數據時(例如,訪問從硬盤驅動器上的文件系統或接收網絡中打開的文件),它通常使用鎖定機制進行序列化。 「協議」(將正確檢索的數據分配給請求進程)是或多或少的驅動程序或內核部分特定的 - 例如在不同的情況下完成。網絡代碼和虛擬文件系統代碼。
這在Kroah-Hartman,Rubini,Corbet的Linux Device Drivers一書中稱爲「併發性和競爭條件」的章節中有很好的描述。你可以看看這裏:https://www.safaribooksonline.com/library/view/linux-device-drivers/0596005903/ch05.html
'操作系統和硬盤驅動器之間是否有一些協議。即與準備好的數據一起返回的一些元數據?'通常,是的,因爲驅動器本身可能具有可以考慮的緩衝並且同時服務於多個請求。 – ThingyWotsit