linux系統核心為檔案提供了乙個快取,目的是將一些磁碟上的資料快取到ram中,這樣可以加快檔案資料的訪問——給定inode索引節點和檔案頁面偏移量時,可以快速地找到ram中相應的檔案頁內容。這個能在稱為頁快取(page cache)。使用頁快取的i/o操作稱為buffer i/o,預設情況下核心都使用的是buffer i/o,但是有的應用(如資料庫)不希望使用核心快取,而是由應用提供快取,這種由應用提供快取的i/o稱為direct i/o。設定了o_direct
標誌後,將跳過頁快取,直接寫入使用者緩部區。
linux的頁調整快取能儲存的頁面範圍很廣,它快取任何基於頁的資料,包括普通檔案、塊裝置檔案和記憶體對映檔案。在本文內為了簡單起見只討論普通磁碟檔案的頁快取。
乙個頁快取對應了乙個檔案,準確地說是乙個inode索引節點,這個頁快取包含了數個物理頁,每個物理頁都快取了這個檔案的一部分資料,這個頁快取就用乙個address_space
結構體來表示。不過address_space
不僅管理著這個檔案的頁快取,也管理著這些快取頁(物理頁)到程序空間的對映關係。address_space
結構體的定義如下:
struct address_space __attribute__((aligned(sizeof(long))));
address_space
結構體和檔案的對應關係:乙個address_space
結構體和乙個檔案相對應,但是兩個不同的address_space
上可能對應相同的磁碟資料,比如乙個檔案通過檔案系統開啟和使用塊裝置直接開啟時。從address_space
可以知道乙個檔案「已被快取的頁幀」和「哪些程序的哪些vma」包含了這些頁幀。乙個正在被訪問的檔案將擁有乙個address_space
物件,即使這個檔案暫時沒有程序使用,頁快取也不會被**,直到物理頁幀不足的時候才被換出。
既然頁快取是為了減少對物理磁碟的訪問,那麼就必須提供必要的方法來判斷一次檔案i/o是否能通過頁快取而得到快速處理,也就是說判斷一次檔案i/o需要操作的資料是否在頁快取中。linux中的每個檔案都通過其對應的address_space
結構體中的基樹page_tree
來有效地組織頁快取中的物理頁,當指定檔案及相應的偏移量的時候就能快速地判斷該頁是否已經存在於頁快取中。當乙個檔案載入記憶體的時候,其對應的頁快取是空的,隨著檔案的讀寫,磁碟中的資料被載入記憶體,並新增乙個對應的快取頁到page_tree
對應的位置上。
linux 檔案系統 Linux 檔案系統結構介紹
ubuntu 像所有類unix系統一樣 在分層樹中組織檔案,其中的關係就像父母和孩子一樣。目錄可以包含其他目錄以及常規檔案,它們是樹的 葉子 樹的任何元素都可以通過路徑名引用 絕對路徑以字元 標識根目錄,其中包含所有其他目錄和檔案 開頭,然後列出必須遍歷以到達該元素的每個子目錄,每個子目錄用 符號分...
Linux的檔案系統
如果您是一位新手,也許 您還不知道如何把檔案從windows拷貝到linux上吧?下面,我們將說明unix檔案系統以及mount的工作過程,然後再比較詳細地討論 mount的使用和有關選項。如果您已經了解unix檔案系統是如何工作的,那麼可以跳過下面一節。否則,您最好繼續接著學習 mount 的含義...
Linux的檔案系統
檔案系統包括兩部分,乙個是檔案 包括目錄 第二部分包括一系列的指令。檔案系統的組織結構是樹形目錄,根目錄下的子目錄我覺得最好熟記,因為他們都有對應的內容,操作也要在對應的目錄下操作。檔案的指令系統,包括好多的shell操作,下面列出一些常用的 cd cat cp file head tail ls ...