檔案系統direct io 和buffer io

2021-06-07 14:08:28 字數 961 閱讀 7465

檔案系統io分為direct io和buffer io,其中buffer io也叫normal io. 

buffer io 對寫io而言有write back和write through,write back先寫入到記憶體中,一段時間後,由核心執行緒寫入到磁碟。由於記憶體比磁碟快很多,所以write back的速度很快。write back有乙個缺點,就是當你掉電時,可能會丟失資料。這時候write through 就粉墨登場了, write through和write back相比,在寫入記憶體的同時也寫入到磁碟中,那為什麼要寫入到記憶體中呢,不是多此一舉嗎,這可能為了以後讀的更快。不過我沒有看到有檔案系統實現 write through的,對檔案系統來說,buffer io的寫就是write back模式。

buffer io 對讀io而言,首先查詢file對於的 page cache,如果不存在,則從磁碟讀入,然後再寫入page cache。

direct io 不會和記憶體打交道,而是直接寫入到儲存裝置中,由於儲存裝置的管理單元是塊,所以direct io  的offset 和length必須和塊大小對齊,一般物理裝置的塊大小是512,所以offset和length必須能被512整除。

我剛開始接觸direct io時,對記憶體的buffer位址也要塊或512對齊很難理解,後來經過看**後,理解了為什麼要這麼做了,我們知道linux核心的記憶體是以頁為單位的。direct io在核心裡直接獲取使用者程序的虛擬位址對應的實體地址。然後我們知道儲存裝置都是以塊為單位讀取的。假如說記憶體的塊大小和512不對齊,而是以4096-512-4 這樣的記憶體位址給核心,那核心怎麼辦呢,讀取512乙個位元組後,在這個頁裡已經放不下了,得再申請記憶體了,這有悖於 direct io 的初衷。

緩衝檔案系統和非緩衝檔案系統

目前c 語言所使用的磁碟檔案系統有兩大類 一類稱為緩衝檔案系統,又稱為標準文 件系統 另一類稱為非緩衝檔案系統。緩衝檔案系統的特點是 系統自動地在記憶體區為每乙個正在使用的檔案開闢乙個緩衝 區。從磁碟向記憶體讀入資料時,則一次從磁碟檔案將一些資料輸入到記憶體緩衝區 充滿緩 沖區 然後再從緩衝區逐個地...

緩衝檔案系統和非緩衝檔案系統

1.緩衝檔案系統 緩衝檔案系統的特點是 在記憶體開闢乙個 緩衝區 為程式中的每乙個檔案使用,當執行讀檔案的操作時,從磁碟檔案將資料先讀入記憶體 緩衝區 裝滿後再從記憶體 緩衝區 依此讀入接收的變數。執行寫檔案的操作時,先將資料寫入記憶體 緩衝區 待記憶體 緩衝區 裝滿後再寫入檔案。由此可以看出,記憶...

檔案系統 why檔案系統

為什麼需要檔案系統,可否由作業系統直接寫裸裝置?裸裝置是一種沒有經過格式化的磁碟或分割槽,即讓作業系統直接管理操作磁碟設定,進行資料讀寫等。通過檔案系統的方式組織磁碟儲存和資料管理有很多好處,比如 1.資料讀取 管理等操作變得簡單便捷 檔案系統給使用者提供了乙個簡單的操作介面,只需簡單的操作就能實現...