Linux文件IO深入剖析
生活随笔
收集整理的這篇文章主要介紹了
Linux文件IO深入剖析
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 1 linux文件系統(tǒng)基本概念
- 1.1 文件系統(tǒng)基本概念
- 1.2 文件系統(tǒng)緩存
- 2 文件IO訪問方式概述
- 2.1 標(biāo)準(zhǔn)文件IO
- 2.2 直接IO
- 2.3 緩存同步
1 linux文件系統(tǒng)基本概念
1.1 文件系統(tǒng)基本概念
文件系統(tǒng) -一種把數(shù)據(jù)組織成文件和目錄的存儲方式,提供了基于文件的存取接口,并通過文件權(quán)限控制訪問。
1.2 文件系統(tǒng)緩存
主存(通常是DRAM)的一塊區(qū)域,用來緩存文件系統(tǒng)的內(nèi)容,包含各種數(shù)據(jù)和元數(shù)據(jù)。
2 文件IO訪問方式概述
2.1 標(biāo)準(zhǔn)文件IO
標(biāo)準(zhǔn)文件IO訪問方式如下:
2.2 直接IO
直接IO訪問方式如下:
直接IO的使用方式:
- open +O_DIRECT:繞過內(nèi)核緩沖區(qū)的直接訪問,便有效避免了CPU和內(nèi)存的多余時間開銷。
- 直接IO 繞過緩存,不會出現(xiàn)write成功而數(shù)據(jù)丟失的情況。
注意: 直接I/O的缺點就是如果訪問的數(shù)據(jù)不在應(yīng)用程序緩存中,那么每次數(shù)據(jù)都會直接從磁盤進(jìn)行加載,這種直接加載會非常緩慢!通常直接I/O跟異步I/O結(jié)合使用會得到較好的性能。
O_DIRECT和O_SYNC不同:
- 后者只對寫數(shù)據(jù)有效,它將寫入內(nèi)核緩沖區(qū)的數(shù)據(jù)立即寫入磁盤,將機器故障時數(shù)據(jù)的丟失減少到最小,但是它仍然要經(jīng)過內(nèi)核緩沖區(qū)。
2.3 緩存同步
緩存同步 :為了保證磁盤系統(tǒng)與緩沖區(qū)中內(nèi)容一致,Linux 系統(tǒng)提供了 sync、fsync 和fdatasync 三個函數(shù)。
函數(shù)描述: 向打開的文件寫數(shù)據(jù); 成功返回寫入的字節(jié)數(shù),若出錯,返回-1。
頭文件:#include <unistd.h>
int fsync(int fd);int fdatasync(int fd);void sync(void);說明:
- sync - 將所有修改過的塊緩沖區(qū)排入寫隊列,然后就返回,它并不等待實際寫磁盤操作結(jié)束。
- fsync - 將fd對應(yīng)文件的塊緩沖區(qū)立即寫入磁盤,并等待實際寫磁盤操作結(jié)束返回。
- fdatasync - 類似fsync,但只影響文件的數(shù)據(jù)部分。而除數(shù)據(jù)外,fsync 還會同步更新文件屬性。
實際上的Linux文件IO流程圖如下:
參考資料:
總結(jié)
以上是生活随笔為你收集整理的Linux文件IO深入剖析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: I.MX6ULL镜像文件
- 下一篇: 进口车导航涉嫌损害国家主权的是哪一款车