天天看點

2.6 Linux存儲管理-實體頁面的使用和周轉

說明一些概念: 虛拟頁面:指虛拟空間中,一段固定大小、邊界與頁面大小對齊的區間及其内容。 實體頁面:虛拟頁面映射到的媒體上,可以在記憶體上( 記憶體頁面),也可以在磁盤上( 盤上頁面)。 頁面的換進換出指的是頁面内容

頁面的換進換出也需要一個資料結構 核心定義了swap_infp_struct,用來描述用以管理頁面交換的檔案和裝置

  1. 49 struct swap_info_struct {
  2. 50 unsigned int flags;
  3. 51 kdev_t swap_device;
  4. 52 spinlock_t sdev_lock;
  5. 53 struct dentry * swap_file;
  6. 54 struct vfsmount *swap_vfsmnt;
  7. 55 unsigned short * swap_map;
  8. 56 unsigned int lowest_bit;
  9. 57 unsigned int highest_bit;
  10. 58 unsigned int cluster_next;
  11. 59 unsigned int cluster_nr;
  12. 60 int prio; /* swap priority */
  13. 61 int pages;
  14. 62 unsigned long max;
  15. 63 int next; /* next entry on swap list */
  16. 64 };

頁面的周轉: 周轉主要包括兩部分 第一,頁面的配置設定、使用和回收,不涉及交換 第二,頁面的交換,交換的最終是頁面的回收 notice:隻有使用者空間的頁面才會換進換出,而核心頁面則不會,核心空間可以通路所有的實體頁面

使用者空間頁面: 1 普通的使用者空間頁面:包括程序的代碼、資料、堆棧,以及動态堆 2 通過mmap映射的檔案内容 3 程序的共享記憶體區 這些頁面涉及頁面周轉的 兩部分

核心空間頁面: 核心中使用的記憶體頁面隻涉及第一部分,也就是 頁面的配置設定、使用和回收,但是不涉及交換(隻在記憶體中) 1 使用直接釋放    都是一些使用kmalloc和vmalloc申請的臨時性結構 2 使用完後仍有保留價值    其内容有保留的價值。條件允許時,把這些頁面“養起來”,可以提高以後的操作效率

   比如一些緩存的檔案目錄結構、 緩存的一些inode結構、 檔案讀寫的緩沖區等等    這些頁面釋放後立即回收亦可,但是會付出更多代價

頁面交換: 1 消極的頁面交換: 有空閑的頁面就直接配置設定; 當沒有沒有空閑時,将一個或幾個記憶體頁面換到磁盤上 notice:這種做法比較消極,忙碌的時候沒有排程的餘地 2 積極的頁面交換 定期的,或者在系統比較空閑的時候挑選一些頁面進行換進換出

挑選的規則一般都是LRU(最近最久未使用),但是這樣也帶來一些問題,因為實際上沒有一種方法可以準确的預測對頁面的通路,是以完全有可能發生抖動(剛換出就被通路) 3 帶有暫存的積極頁面交換

繼續閱讀