1. 程式人生 > >mmap & page cache 中的mapping之間的區別 & 直接I/O & buffered I/O & mmap區別

mmap & page cache 中的mapping之間的區別 & 直接I/O & buffered I/O & mmap區別

ext4_file_mmap 中的mmap

百度詞條是這樣說的:mmap將一個檔案或者其它物件對映進記憶體。檔案被對映到多個頁上,如果檔案的大小不是所有頁的大小之和,最後一個頁不被使用的空間將會清零。mmap在使用者空間對映呼叫系統中作用很大。

這裡的mmap,其實是將實體記憶體和物理磁碟進行對映,對映的表現形式通過,讀inode_table,知道檔案在物理磁碟的索引結構,通過讀去索引結構訪問磁碟找到物理磁碟中的邏輯塊。

page cache 中的mapping

page cache 是buffered I/O才會經過page cache層。將快取的page在記憶體中用radix tree 來組織,方便快速查詢,此時的mapping 指的是將物理磁碟讀進pagecache。

直接 I/O(direct I/O) 、buffered I/O 、 mmap區別

其中直接I/O 和 buffered I/O 都要經過兩次拷貝,一次從使用者態拷貝到核心態,另一次是從核心態拷貝到磁碟,區別是直接I/O不經過page cache的查詢。通常直接I/O適合用於像資料庫這種需要直接刷資料到磁碟的場景。

還有一種直接對映,將虛擬地址空間和實體記憶體直接對映,不需要經過page table即可查詢。

網上的另一種直接對映方式是快取記憶體和主存之間,如圖所示:
在這裡插入圖片描述

PS:目前自己也處於初學階段,表述的不清晰,有不對的地方請多多指教。