Linux 檔案讀寫流程

2021-10-07 20:58:53 字數 819 閱讀 9409

讀檔案流程

程序呼叫庫函式向核心發起讀檔案請求;

核心通過檢查程序的檔案描述符定位到虛擬檔案系統的已開啟檔案列表表項;

呼叫該檔案可用的系統呼叫函式read();

read()函式通過檔案表項鍊接到目錄項模組,根據傳入的檔案路徑,在目錄項模組中檢索,找到該檔案的inode;

在inode中,通過檔案內容偏移量計算出要讀取的頁;

通過inode找到檔案對應的address_space;

在address_space中訪問該檔案的頁快取樹,查詢對應的頁快取結點:

(1)如果頁快取命中,那麼直接返回檔案內容;

(2)如果頁快取缺失,那麼產生乙個頁缺失異常,建立乙個頁快取頁,同時通過inode找到檔案該頁的磁碟位址,讀取相應的頁填充該快取頁;重新進行第6步查詢頁快取;

寫檔案流程

前5步和讀檔案一致,在address_space中查詢對應頁的頁快取是否存在:

如果頁快取命中,直接把檔案內容修改更新在頁快取的頁中。寫檔案就結束了。這時候檔案修改位於頁快取,並沒有寫回到磁碟檔案中去;

如果頁快取缺失,那麼產生乙個頁缺失異常,建立乙個頁快取頁,同時通過inode找到檔案該頁的磁碟位址,讀取相應的頁填充該快取頁。此時快取頁命中,進行第6步。

乙個頁快取中的頁如果被修改,那麼會被標記成髒頁。髒頁需要寫回到磁碟中的檔案塊。有兩種方式可以把髒頁寫回磁碟:

(1)手動呼叫sync()或者fsync()系統呼叫把髒頁寫回

(2)pdflush程序會定時把髒頁寫回到磁碟

同時注意,髒頁不能被置換出記憶體,如果髒頁正在被寫回,那麼會被設定寫回標記,這時候該頁就被上鎖,其他寫請求被阻塞直到鎖釋放。

Linux基礎之檔案讀寫流程

應用程式發起讀請求,觸發系統呼叫read 函式,使用者態切換為核心態 檔案系統通過目錄項 inode address space 頁快取樹,查詢page cache是否存在 page cache不存在產生缺頁中斷,cpu向dma發出控制指令 dma 控制器將資料從主存或硬碟拷貝到核心空間 kerne...

hdfs讀寫流程 HDFS 檔案讀寫流程

開啟分布式檔案 呼叫分布式檔案 distributedfilesystem.open 方法 定址請求 從 namenode 處得到 datanode 的位址,distributedfilesystem使用 rpc 方式呼叫了namenode,namenode 返回存有該副本的datanode 位址,...

檔案讀寫基本流程

讀檔案 1 程序呼叫庫函式向核心發起讀檔案請求 2 核心通過檢查程序的檔案描述符定位到虛擬檔案系統的已開啟檔案列表表項 3 呼叫該檔案可用的系統呼叫函式read 3 read 函式通過檔案表項鍊接到目錄項模組,根據傳入的檔案路徑,在目錄項模組中檢索,找到該檔案的inode 4 在inode中,通過檔...