如果我的代碼執行類似fd = open("/dev/sdXY", ...)
和pwrite(fd, ...)
/pread(fd, ...)
,那麼I/O操作是否會跳過緩衝區或磁盤緩存?假設/dev/sdXY是未掛載的格式化磁盤分區(ext4,ufs等)。pread/pwrite,緩衝區和磁盤緩存
我問,因爲需要在我正在處理的應用程序中授予連續的文件存儲空間,並且我讀到實現它的唯一方法就是執行類似於我所描述的操作。但是,如果這會導致丟失緩衝區,磁盤緩存或其他有用的功能,我可能會刪除對連續存儲的需求。
我也很困惑,如果我需要重新實現低級別的東西,因爲分區已經被格式化爲文件系統。我讀到這是RAW磁盤/分區的情況。我已經知道需要處理哪些塊是免費或正在使用的,文件和文件夾結構等,我已經在研究這個問題。
另一個問題:當我讀到fopen()
/fread()
/fwrite()
和C++的文件流時,我只看到了有關緩衝區的信息。是不是隻有這些流和f*
函數家族有某種緩衝區,不像open/write/read/pwrite/pread/etc?這個緩衝區是否與磁盤緩存相同或不同?
最後一個:HDD緩存是由自己的驅動器還是由文件系統(ext4,ufs等)處理?
謝謝。我認爲只需要處理哪些塊是壞的,自由的或正在使用的以及文件和文件夾結構。我還需要重新執行什麼? –
這足以讓你忙一陣子,我想 - 這肯定會讓我忙一陣子。我不得不研究ext4文件系統以瞭解還有什麼需要擔心的。 _ [... 30秒的思考時間...]但是,我認爲這是一個日記文件系統,因此您需要知道日誌記錄的工作方式,以及如何更改手動分配的文件,而不會擾亂文件的連續性分配空間。我懷疑,現在我想,甚至有可能。 –
硬盤本身可以存儲緩存 - 這是一個可以忽略的其他類型的袋子。硬盤應該讓它看起來沒有這樣的緩存 - 除了它可能比沒有這樣的緩存更好的性能。一旦寫入完成,寫入HDD的任何內容都應該是安全的,即使數據位於HDD緩存中,但實際上還不在磁盤上。 –