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