内存交换
內存交換 2014-02-22 16:32:51
在系統啟動時,這一守護進程由內核的 init 進程啟動。當內核的交換定時器到期時,該進程開始運行。如果 kswaped 發現系統中的空閑頁很少,該進程將按照下面的三種方法減少系統使用的物理頁:
1. 減少緩沖區和頁高速緩存的大小。頁高速緩存中包含(裝入虛擬內存空間的內存映射文件)的頁,可能包含一些系統不再需要的頁,類似地,緩沖區高速緩存中也可能包含從物理設備中讀取的或寫入物理設備的數據,這些緩沖區也可能不再需要,因此,這兩個高速緩存可用來釋放出空閑頁。但是,同時處于這兩個高速緩存中的頁是不能丟棄的。Linux 利用“時鐘”算法從系統中選擇要丟棄的頁,也即每次循環檢查 mem_map 頁向量中不同的頁塊,象時鐘的分針循環轉動一樣。時鐘算法的原理見圖 10-7。每次內核的交換進程運行時,根據對物理內存的需求而選擇不同頁塊大小的 mem_map 向量進行檢查。如果發現某頁塊處于上述兩個高速緩存中,則釋放相應的緩沖區,并將頁塊重新收入 free_area 結構。
2. 將System V 共享內存頁交換出物理內存。System V 共享內存頁實際是一種進程間通訊機制,系統通過將共享內存頁交換到交換文件而釋放物理內存。Linux 同樣使用時鐘算法選擇要交換出物理內存的頁。
3. 將頁交換出物理內存或丟棄。kswaped 首先選擇可交換的進程,或其中某些頁可從內存中交換出或丟棄的進程。可執行映象的大部分內容可從磁盤映象中獲取,因此,這些頁可丟棄。選定要交換的進程之后,Linux 將把該進程的一小部分頁交換出內存,而大部分不會被交換,另外,被鎖定的頁也不會被交換。Linux 利用頁的壽命信息選擇要交換的頁,也即所謂“最近最少使用(LRU)”算法。
頁的壽命信息保存在 mem_map_t 結構中。最初分配某個頁時,頁的壽命為 3,每次該頁被訪問,其壽命增加 3,直到 20 為至;而當內核的交換進程運行時,頁壽命減 1。如果某個頁的壽命為 0,則該頁可作為交換候選頁。如果是“臟”頁(該信息保存在頁表項中),則可將該頁交換出物理內存。但是,進程的虛擬內存區域可具有自己的交換操作例程(定義在虛擬內存操作集中),這時,將利用該例程執行交換操作,否則,交換守護進程在交換文件中分配頁,并將該頁寫入交換文件。
當某物理頁交換到交換文件之后,該頁對應的頁表項被標志為無效,同時包換該頁在交換文件中的位置信息;而被釋放出的物理頁則被收回到 free_area 數據結構中。
根據被釋放的頁數目,kswaped 會自動調節交換定時器的間隔,以便能夠有足夠的時間釋放更多的頁而保證足夠的空閑頁。
交換文件中的頁是經過修改的頁(通過在頁表項中設置相應的位而標志該頁為“臟”頁),則當進程再次訪問該頁時,操作系統必須從交換文件中將該頁交換到物理內存。
分類: LINUX
當物理內存出現不足時,Linux 內存管理子系統需要釋放部分物理內存頁。這一任務由內核的交換守護進程 kswaped 完成,該內核守護進程實際是一個內核線程,它的任務就是保證系統中具有足夠的空閑頁,從而使內存管理子系統能夠有效運行。在系統啟動時,這一守護進程由內核的 init 進程啟動。當內核的交換定時器到期時,該進程開始運行。如果 kswaped 發現系統中的空閑頁很少,該進程將按照下面的三種方法減少系統使用的物理頁:
1. 減少緩沖區和頁高速緩存的大小。頁高速緩存中包含(裝入虛擬內存空間的內存映射文件)的頁,可能包含一些系統不再需要的頁,類似地,緩沖區高速緩存中也可能包含從物理設備中讀取的或寫入物理設備的數據,這些緩沖區也可能不再需要,因此,這兩個高速緩存可用來釋放出空閑頁。但是,同時處于這兩個高速緩存中的頁是不能丟棄的。Linux 利用“時鐘”算法從系統中選擇要丟棄的頁,也即每次循環檢查 mem_map 頁向量中不同的頁塊,象時鐘的分針循環轉動一樣。時鐘算法的原理見圖 10-7。每次內核的交換進程運行時,根據對物理內存的需求而選擇不同頁塊大小的 mem_map 向量進行檢查。如果發現某頁塊處于上述兩個高速緩存中,則釋放相應的緩沖區,并將頁塊重新收入 free_area 結構。
2. 將System V 共享內存頁交換出物理內存。System V 共享內存頁實際是一種進程間通訊機制,系統通過將共享內存頁交換到交換文件而釋放物理內存。Linux 同樣使用時鐘算法選擇要交換出物理內存的頁。
3. 將頁交換出物理內存或丟棄。kswaped 首先選擇可交換的進程,或其中某些頁可從內存中交換出或丟棄的進程。可執行映象的大部分內容可從磁盤映象中獲取,因此,這些頁可丟棄。選定要交換的進程之后,Linux 將把該進程的一小部分頁交換出內存,而大部分不會被交換,另外,被鎖定的頁也不會被交換。Linux 利用頁的壽命信息選擇要交換的頁,也即所謂“最近最少使用(LRU)”算法。
頁的壽命信息保存在 mem_map_t 結構中。最初分配某個頁時,頁的壽命為 3,每次該頁被訪問,其壽命增加 3,直到 20 為至;而當內核的交換進程運行時,頁壽命減 1。如果某個頁的壽命為 0,則該頁可作為交換候選頁。如果是“臟”頁(該信息保存在頁表項中),則可將該頁交換出物理內存。但是,進程的虛擬內存區域可具有自己的交換操作例程(定義在虛擬內存操作集中),這時,將利用該例程執行交換操作,否則,交換守護進程在交換文件中分配頁,并將該頁寫入交換文件。
當某物理頁交換到交換文件之后,該頁對應的頁表項被標志為無效,同時包換該頁在交換文件中的位置信息;而被釋放出的物理頁則被收回到 free_area 數據結構中。
根據被釋放的頁數目,kswaped 會自動調節交換定時器的間隔,以便能夠有足夠的時間釋放更多的頁而保證足夠的空閑頁。
交換文件中的頁是經過修改的頁(通過在頁表項中設置相應的位而標志該頁為“臟”頁),則當進程再次訪問該頁時,操作系統必須從交換文件中將該頁交換到物理內存。
總結
- 上一篇: deb和rpm文件安装
- 下一篇: 推荐北大饶毅教授的《生物学概念与途径》课