2016-08-12 168 views
0

據我所知,磁盤設備有一個隊列,用於存儲來自linux內核的讀/寫請求。當設備沒有足夠快地排空隊列(即溢出)時會發生什麼?磁盤io隊列溢出

此隊列是否擴展(邏輯)到DRAM?

可以丟失一些請求嗎?

+2

如果操作系統由於其隊列已滿而無法寫入磁盤設備,它將等待並稍後再試。如果設備不排空隊列,操作系統將最終報告某種設備故障。 – Barmar

回答

0

隊列不擴展到RAM。有一個髒頁面的磁盤緩存。操作系統真的想將它們寫入磁盤。有些程序甚至可能在等待髒頁面被寫入時阻塞。隨着程序被阻止,他們停止向磁盤寫入更多數據。實際上,這是非常自我限制的。

2

此隊列是否在邏輯上擴展到DRAM?

你認爲那個隊列在哪裏?它在RAM中。

任何操作系統的IO緩衝基礎結構只能用於避免阻止任何程序嘗試執行IO操作。

E.g.想象你有一個將數據寫入文件的程序。出於這個原因,它調用了一個write系統調用。在操作系統中,轉到文件系統驅動程序,該驅動程序決定哪個磁盤扇區發生變化。

現在,該更改命令轉到IO子系統,該子系統將命令放入隊列中。如果該隊列已滿,則文件系統調用將阻止,即。直到隊列中有空間時纔會完成呼叫,這意味着write呼叫塊。

非常簡單:只要您的寫作設備無法跟上,您的寫作程序就會在write呼叫中停止。這很合乎邏輯。這就像試圖將郵件推送到完整的郵箱。直到有人在另一端取出郵件,你不能推送新郵件,所以郵遞員將不得不等待。

+0

答案中的第一行似乎不正確。磁盤設備將重新安排讀/寫請求以優化磁頭移動。如果整個隊列處於內存中,那麼磁盤如何檢查您聲稱駐留在內存中的隊列? –

+0

@MikeG我認爲你有一個特定類型的設備,實際上有重新安排在設備自己的內存訪問的能力,這是可能的嗎?我假設我們正在閱讀有關軟件隊列的內容,因爲您從未提及過哪個設備。 –