我知道內核保證,如果不是在一定程度上,一定數量的數據被原子地寫入,這意味着其他進程正在嘗試讀取數據塊的大小(注意PIPE_BUF,4096Bytes)。但是我一直在想,如果我在存儲設備中寫入更多的數據塊(比如說「abc ... [x bytes] ... xyz」),那麼在內核執行操作的時候,內核會先寫abc,xyz最後一次?Linux系統調用寫入:內核是否保證數據寫入順序?
如果不是,那麼在寫入操作完成之前,某些其他進程可能會讀取「* ... [x字節] ... xyz」。我想,這對於許多應用程序來說無疑是一場災難。
是否有人知道實現,或者,我在哪裏可以在內核源代碼中找到答案?
期待您的回覆!謝謝!
[更新2011.11.12]
我看着源代碼,但我不能完全理解它。我發現調用鏈「write - > vfs_write - > do_sync_write [loops] - > generic_file_aio_write [inode_mutex] - > __generic_file_aio_write - > .. - > generic_perform_write - > .. - > __copy_from_user(to,from,n)
__copy_from_user __copy_from_user是一個用架構依賴asm代碼實現的宏/函數,現在我不能理解它們,但我認爲編碼器會這樣做,因爲我們大多數人都認爲它應該是...
Hopes對於furthur澄清〜
看看「吃我的數據」爲起點:http://flamingspork.com/talks/ –
謝謝。我閱讀了演示文稿。它很實用並且描述了許多問題,但對我來說還不夠深入。 – felix021