Kernel

核心如何向硬碟發送 I/O 請求?

  • July 30, 2017

假設我有一個分佈在不同扇區中的文件。例如,假設物理扇區和邏輯扇區都是 512B。使用者程序向核心發出讀取文件的請求。假設這個文件在硬碟上使用了 3 個分佈式扇區。

1)硬碟是否一次讀取所有扇區並將整個(512 * 3)數據發送到核心?

*這3個扇區先被硬碟全讀,然後數據傳輸到核心,512 * 3字節從硬碟傳輸到核心。

  1. HDD 是否一次讀取多個扇區?不過,這似乎更像是一個與硬體相關的問題。

這取決於。類 Unix 作業系統的現代核心往往具有相當複雜的程式碼以使 I/O 更快。最廣為人知的特性是記憶體:如果過去已經讀取過一個扇區,記憶體中可能仍然存在副本,在這種情況下,根本不會向硬碟驅動器發送任何請求。其他典型的加速特性包括亂序訪問(當有許多掛起的請求時,核心可能會以不同的順序發出它們以最小化搜尋或更好地利用硬體允許的並行性)和預取(核心假設如果文件的第 0 到第 5 扇區已被讀取,那麼很可能會讀取第 6 扇區,如果沒有更好的事情可做,它將第 6 扇區讀取到記憶體中)。

是否可以在讀取扇區 0 的請求完成之前發出讀取扇區 1 的請求取決於磁碟匯流排和磁碟的能力。沒有一般的答案。

引用自:https://unix.stackexchange.com/questions/382806