1. 程式人生 > >2.6 Linux儲存管理-物理頁面的使用和週轉

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 帶有暫存的積極頁面交換