應用程式發起讀請求,觸發系統呼叫read()函式,使用者態切換為核心態;
檔案系統通過目錄項→inode→address_space→頁快取樹,查詢page cache是否存在;
page cache不存在產生缺頁中斷,cpu向dma發出控制指令;
dma 控制器將資料從主存或硬碟拷貝到核心空間(kernel space)的緩衝區(read buffer);
dma 磁碟控制器向 cpu 發出資料讀完的訊號,由 cpu 負責將資料從核心緩衝區拷貝到使用者緩衝區;
使用者程序由核心態切換回使用者態,獲得檔案資料;
空間視角
時間視角
檔案系統通過目錄項→inode→address_space→頁快取樹,查詢page cache是否存在,如果不存在則需要建立;
page cache存在後,cpu將資料從使用者緩衝區拷貝到核心緩衝區,page cache變為髒頁(dirty page),寫流程返回;
使用者主動觸發刷盤或者達到特定條件核心觸發刷盤,喚醒pdflush執行緒將核心緩衝區的資料刷入磁碟;
定時方式執行;
記憶體不足時;
使用者主動觸發;
dma 的全稱叫直接記憶體訪問(direct memory access),是一種允許外圍裝置(硬體子系統)直接訪問系統主記憶體的機制。基於 dma 訪問方式,硬體與核心緩衝區的資料傳輸由dma控制器控制,cpu只需在資料傳輸開始和結束時做一點處理外(開始和結束時候要做中斷處理),釋放了cpu。目前大多數的硬體裝置,包括磁碟控制器、網絡卡、顯示卡以及音效卡等都支援 dma 技術。
參考:支撐百萬併發的「零拷貝」技術,你了解嗎?
從核心檔案系統看檔案讀寫過程
Linux 檔案讀寫流程
讀檔案流程 程序呼叫庫函式向核心發起讀檔案請求 核心通過檢查程序的檔案描述符定位到虛擬檔案系統的已開啟檔案列表表項 呼叫該檔案可用的系統呼叫函式read read 函式通過檔案表項鍊接到目錄項模組,根據傳入的檔案路徑,在目錄項模組中檢索,找到該檔案的inode 在inode中,通過檔案內容偏移量計算...
HDFS之檔案讀 寫流程
我們通過命令bin hdfs dfs cat log檢視乙個檔案的時候,對於nn dn之間的操作我們是無感知的,具體中間都發生了什麼,下面來簡單描述一下。讀操作 操作步驟 1 client通過filesystem.open filepath 方法,去與namenode進行rpc通訊,返回該檔案的部分...
hdfs讀寫流程 HDFS 檔案讀寫流程
開啟分布式檔案 呼叫分布式檔案 distributedfilesystem.open 方法 定址請求 從 namenode 處得到 datanode 的位址,distributedfilesystem使用 rpc 方式呼叫了namenode,namenode 返回存有該副本的datanode 位址,...