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