[Linux記憶體]頁緩衝和塊緩衝__Linux

來源:互聯網
上載者:User
1, 核心為裝置提供了兩種通用的緩衝方案:
a, 頁緩衝(page cache)
b, 塊緩衝


2,核心管理頁緩衝所用的資料結構
核心通過基數樹(radix tree)來管理頁緩衝的,


3,核心如何回寫記憶體中修改的資料到物理裝置
a, 核心的守護進程在後台運行,為pdflush,這些守護進程周期性啟用,
b, pdflush的第二種運作模式是:如果緩衝中修改的資料項目數目在短期內顯著增加,則由核心啟用pdflush.
c,核心提供了相關的系統調用,如sync()



4,地址空間的概念
頁緩衝中的頁是通過地址空間(address_space)來和物理裝置記憶體(如底層檔案系統的struct inode結構)相互關聯的。對應與page結構的struct address_space *mapping成員。
(1)       如果page->mapping等 於0,說明該頁屬於交換告訴緩衝swap cache
(2)       如果page->mapping不 等於0,但第0位為0,說明該頁為匿名也,此時mapping指向一個struct anon_vma結構變數;
(3)       如果page->mapping不 等於0,但第0位不為0,則apping指向一個struct address_space地址空間結構變數;

struct address_space {struct inode                 *host;           /*擁有節點*/struct radix_tree_root       page_tree;       /*包含全部頁面的radix樹 */spinlock_t                   tree_lock;       /*保護page_tree的自旋鎖*/unsigned int                 i_mmap_writable;  /* VM_SHARED計數*/struct prio_tree_root        i_mmap;          /*私人映射鏈表*/struct list_head             i_mmap_nonlinear; /* VM_NONLINEAR 鏈表*/spinlock_t                   i_mmap_lock;      /* 保護i_mmap的自旋鎖 */atomic_t                     truncate_count;   /* 截斷計數*/ unsigned long                nrpages;          /* 頁總數*/pgoff_t                      writeback_index;  /* 回寫的起始位移*/struct address_space_operations    *a_ops;     /* 動作表*/unsigned long                flags;           /* gfp_mask 掩碼與錯誤標識*/struct backing_dev_info      *backing_dev_info;    /*預讀資訊*/spinlock_t                   private_lock;     /*私人address_space鎖*/struct list_head              private_list;    /*私人address_space鏈表*/struct address_space         *assoc_mapping;  /*相關的緩衝*/

};
比如頁快取中頁的擁有者是一個檔案的時候,那麼此時索引節點的i_mapping欄位總是指向索引節點的資料頁所有者的address_space.而address_space對象就嵌入在VFS索引節點對象的i_data欄位中。而address_space中的欄位host則指向它所有者的索引節點對象。



5,頁緩衝的常用操作函數

頁快取的還有幾個常用處理函數:尋找頁,增加頁,刪除頁更新頁。

struct page * find_get_page(struct address_space *mapping, unsigned long offset)unsigned find_get_pages(struct address_space *mapping, pgoff_t start,unsigned int nr_pages, struct page **pages)struct page *find_lock_page(struct address_space *mapping,unsigned long offset)struct page *find_trylock_page(struct address_space *mapping, unsigned long offset)struct page *find_or_create_page(struct address_space *mapping,unsigned long index, unsigned int gfp_mask)int add_to_page_cache(struct page *page, struct address_space *mapping,pgoff_t offset, int gfp_mask)remove_from_page_cache(struct page *page)



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.