2.6 Linux儲存管理-物理頁面的使用和週轉
阿新 • • 發佈:2018-11-23
說明一些概念:
虛擬頁面:指虛擬空間中,一段固定大小、邊界與頁面大小對齊的區間及其內容。
物理頁面:虛擬頁面對映到的介質上,可以在記憶體上(
記憶體頁面),也可以在磁碟上(
盤上頁面)。
頁面的換進換出指的是頁面內容
頁面的換進換出也需要一個數據結構 核心定義了swap_infp_struct,用來描述用以管理頁面交換的檔案和裝置
頁面的週轉: 週轉主要包括兩部分 第一,頁面的分配、使用和回收,不涉及交換 第二,頁面的交換,交換的最終是頁面的回收 notice:只有使用者空間的頁面才會換進換出,而核心頁面則不會,核心空間可以訪問所有的物理頁面
使用者空間頁面:
1 普通的使用者空間頁面:包括程序的程式碼、資料、堆疊,以及動態堆
2 通過mmap對映的檔案內容
3 程序的共享記憶體區
這些頁面涉及頁面週轉的
兩部分
核心空間頁面: 核心中使用的記憶體頁面只涉及第一部分,也就是 頁面的分配、使用和回收,但是不涉及交換(只在記憶體中) 1 使用直接釋放 都是一些使用kmalloc和vmalloc申請的臨時性結構 2 使用完後仍有保留價值 其內容有保留的價值。條件允許時,把這些頁面“養起來”,可以提高以後的操作效率
比如一些快取的檔案目錄結構、 快取的一些inode結構、 檔案讀寫的緩衝區等等 這些頁面釋放後立即回收亦可,但是會付出更多代價
頁面交換: 1 消極的頁面交換: 有空閒的頁面就直接分配; 當沒有沒有空閒時,將一個或幾個記憶體頁面換到磁碟上 notice:這種做法比較消極,忙碌的時候沒有排程的餘地 2 積極的頁面交換 定期的,或者在系統比較空閒的時候挑選一些頁面進行換進換出
挑選的規則一般都是LRU(最近最久未使用),但是這樣也帶來一些問題,因為實際上沒有一種方法可以準確的預測對頁面的訪問,所以完全有可能發生抖動(剛換出就被訪問) 3 帶有暫存的積極頁面交換
頁面的換進換出也需要一個數據結構 核心定義了swap_infp_struct,用來描述用以管理頁面交換的檔案和裝置
49 struct swap_info_struct {
50 unsigned int flags;
51
52 spinlock_t sdev_lock;
53 struct dentry * swap_file;
54 struct vfsmount *swap_vfsmnt;
55 unsigned short * swap_map;
56 unsigned int lowest_bit;
57 unsigned int highest_bit;
58 unsigned int cluster_next;
59 unsigned int cluster_nr;
60 int prio
61 int pages;
62 unsigned long max;
63 int next; /* next entry on swap list */
64 };
頁面的週轉: 週轉主要包括兩部分 第一,頁面的分配、使用和回收,不涉及交換 第二,頁面的交換,交換的最終是頁面的回收 notice:只有使用者空間的頁面才會換進換出,而核心頁面則不會,核心空間可以訪問所有的物理頁面
使用者空間頁面:
核心空間頁面: 核心中使用的記憶體頁面只涉及第一部分,也就是 頁面的分配、使用和回收,但是不涉及交換(只在記憶體中) 1 使用直接釋放 都是一些使用kmalloc和vmalloc申請的臨時性結構 2 使用完後仍有保留價值 其內容有保留的價值。條件允許時,把這些頁面“養起來”,可以提高以後的操作效率
比如一些快取的檔案目錄結構、 快取的一些inode結構、 檔案讀寫的緩衝區等等 這些頁面釋放後立即回收亦可,但是會付出更多代價
頁面交換: 1 消極的頁面交換: 有空閒的頁面就直接分配; 當沒有沒有空閒時,將一個或幾個記憶體頁面換到磁碟上 notice:這種做法比較消極,忙碌的時候沒有排程的餘地 2 積極的頁面交換 定期的,或者在系統比較空閒的時候挑選一些頁面進行換進換出
挑選的規則一般都是LRU(最近最久未使用),但是這樣也帶來一些問題,因為實際上沒有一種方法可以準確的預測對頁面的訪問,所以完全有可能發生抖動(剛換出就被訪問) 3 帶有暫存的積極頁面交換