是否越界,內(nèi)存管理器通過判斷該虛地址是否在預(yù)先保存的該進(jìn)程的虛地址范圍內(nèi),如果該虛地址不在預(yù)先保存的虛地址范圍內(nèi),則說明該虛地址越界,該虛地址為非法虛地址。內(nèi)存管理器上預(yù)先保存的該進(jìn)程的虛地址范圍是由操作系統(tǒng)分配并發(fā)送的,操作系統(tǒng)負(fù)責(zé)虛地址的分配和管理。該虛地址范圍可能包括動態(tài)虛地址范圍和靜態(tài)虛地址范圍,靜態(tài)虛地址范圍是操作系統(tǒng)在創(chuàng)建該進(jìn)程時為該進(jìn)程分配的。如果靜態(tài)虛地址范圍內(nèi)的虛地址不夠該進(jìn)程使用,那么操作系統(tǒng)會為該進(jìn)程另外分配動態(tài)虛地址范圍,如果靜態(tài)虛地址范圍內(nèi)的虛地址足夠該進(jìn)程使用,那么操作系統(tǒng)不會為該進(jìn)程分配動態(tài)虛地址范圍。
[0099]其次,內(nèi)存管理器除了檢查該虛地址是否越界外,還需要檢查該虛地址對應(yīng)的頁面是否為只讀頁面。內(nèi)存訪問請求分為兩種:讀訪問請求和寫訪問請求。某一頁面的權(quán)限可能被設(shè)置成了只讀頁面,若頁面的權(quán)限被設(shè)置成了只讀頁面,則只能對該頁面進(jìn)行讀訪問,不能進(jìn)行寫訪問。比如當(dāng)內(nèi)存管理器確定該內(nèi)存訪問請求為寫訪問請求,但是該虛地址對應(yīng)的頁面為只讀頁面,則內(nèi)存管理器確定該虛地址非法。若該虛地址同時滿足上述兩個條件,該虛地址合法,在該虛地址合法的前提下,內(nèi)存管理器進(jìn)一步判斷該虛地址的缺頁類型。若該虛地址不同時滿足上述兩個條件,該虛地址非法,內(nèi)存管理器向操作系統(tǒng)反饋該虛地址非法。
[0100]步驟103、若虛地址的缺頁類型為空白頁缺頁,則內(nèi)存管理器為該虛地址分配對應(yīng)的頁面,空白頁缺頁是指該虛地址未被分配對應(yīng)的頁面。
[0101]內(nèi)存管理器為該虛地址分配對應(yīng)的頁面,具體為:內(nèi)存管理器確定內(nèi)存中是否有空白頁面,如果內(nèi)存中有空白頁面,內(nèi)存管理器將該空白頁面作為該虛地址對應(yīng)的頁面。如果內(nèi)存中沒有空白頁面,內(nèi)存管理器從已分配的頁面中選擇一個待替換頁面,將待替換頁面的虛地址修改為內(nèi)存訪問請求攜帶的虛地址,修改后的待替換頁面為虛地址對應(yīng)的頁面。內(nèi)存管理器確定內(nèi)存中是否有空白頁面具體為:內(nèi)存管理器查找空閑列表,該空閑列表中記錄有內(nèi)存中所有未被占用的空白頁面,若空閑列表中有空白頁面,則內(nèi)存管理器確定內(nèi)存中有空白頁面,若空閑列表中沒有空白頁面,則內(nèi)存管理器確定內(nèi)存中沒有空白頁面。
[0102]若內(nèi)存中沒有空白頁面,說明物理內(nèi)存已經(jīng)耗盡,內(nèi)存管理器需要從已分配的頁面中選擇一個待替換頁面,將該待替換頁面的數(shù)據(jù)從內(nèi)存中替換至空閑位置,然后將該待替換頁面分配給該虛地址使用。內(nèi)存管理器從已分配的頁面中選擇該待替換頁面時,可以按照現(xiàn)有的頁面替換算法選擇該待替換頁面,這里不做具體介紹,通常情況下內(nèi)存管理器會選擇一個長時間未使用的頁面作為待替換頁面。
[0103]內(nèi)存管理器從已分配的頁面中選擇待替換頁面之后,可選地,內(nèi)存管理器還執(zhí)行以下操作:內(nèi)存管理器判斷待替換頁面內(nèi)是否有臟數(shù)據(jù);如果該待替換頁面內(nèi)沒有臟數(shù)據(jù),則內(nèi)存管理器將該待替換頁面的虛地址修改為內(nèi)存訪問請求攜帶的虛地址。待替換頁面內(nèi)沒有臟數(shù)據(jù),即該待替換頁面干凈(clean),表明該待替換頁面內(nèi)的數(shù)據(jù)沒有被修改過。如果待替換頁面內(nèi)有臟數(shù)據(jù),則內(nèi)存管理器將該待替換頁面的地址信息發(fā)送給操作系統(tǒng),以使操作系統(tǒng)根據(jù)該待替換頁面的地址信息將該待替換頁面的數(shù)據(jù)從內(nèi)存中替換至空閑位置。待替換頁面內(nèi)有臟數(shù)據(jù),即該待替換頁面臟(dirty),表明該待替換頁面內(nèi)的數(shù)據(jù)被修改過。該待替換頁面的地址信息可以為該待替換頁面的虛地址或者該待替換頁面的實(shí)地址,操作系統(tǒng)先搜索到空閑位置后,啟動存儲器直接訪問(Direct Memory Access,簡稱DMA),通過DMA訪問器將該待替換頁面的數(shù)據(jù)從內(nèi)存中替換至空閑位置。
[0104]在操作系統(tǒng)將該待替換頁面的數(shù)據(jù)從內(nèi)存中替換至空閑位置之后,操作系統(tǒng)通知內(nèi)存管理器該待替換頁面可以使用,內(nèi)存管理器將該待替換頁面的虛地址修改為內(nèi)存訪問請求攜帶的虛地址。內(nèi)存管理器修改待替換頁面的虛地址為內(nèi)存訪問請求攜帶的虛地址,即內(nèi)存管理器修改了該待替換頁面的虛地址和實(shí)地址的映射關(guān)系,修改后的待替換頁面為該內(nèi)存訪問請求攜帶的虛地址對應(yīng)的頁面。
[0105]空閑位置用于暫時存放內(nèi)存中不用的數(shù)據(jù),當(dāng)物理內(nèi)存耗盡,可以將內(nèi)存中長時間不用的數(shù)據(jù)替換至空閑位置,當(dāng)需要調(diào)用空閑位置中的數(shù)據(jù)時,可以將數(shù)據(jù)從空閑位置拷貝到內(nèi)存中使用。本實(shí)施例中的空閑位置可以為SWAP分區(qū)(也稱交換分區(qū)),SWAP分區(qū)通常指位于磁盤或FLASH上的一塊虛擬內(nèi)存,本發(fā)明實(shí)施例中,SWAP分區(qū)也可以位于非易失性存儲器(Non-Volatile Memory,簡稱NVM)上。非易失性存儲器容量大,且讀延遲比磁盤和FLASH要小得多,非常適合做SWAP分區(qū)的存儲介質(zhì)。常見的非易失性存儲器有:鐵電存儲器、磁性隨機(jī)存儲器和相變存儲器(Phase Change Memory,簡稱PCM)。操作系統(tǒng)從磁盤或FLASH上讀寫數(shù)據(jù)的速度,比從NVM上讀寫數(shù)據(jù)的速度慢的多,因此,當(dāng)SWAP分區(qū)設(shè)置在NVM上時,能夠大大縮短操作系統(tǒng)將該待替換頁面的數(shù)據(jù)從內(nèi)存中替換至空閑位置的時間,從而縮短了頁面分配的時間,提高內(nèi)存訪問的效率。
[0106]上述方式中,當(dāng)待替換頁面內(nèi)有臟數(shù)據(jù)時,需要操作系統(tǒng)和內(nèi)存管理器的共同配合為該虛地址分配對應(yīng)的頁面。另一種方式中,不需要操作系統(tǒng)的參與,由內(nèi)存管理器單獨(dú)為該虛地址分配對應(yīng)的頁面。具體地:內(nèi)存管理器從已分配的頁面中選擇待替換頁面之后,內(nèi)存管理器判斷待替換頁面內(nèi)是否有臟數(shù)據(jù);如果待替換頁面內(nèi)沒有臟數(shù)據(jù),內(nèi)存管理器將待替換頁面的虛地址修改為內(nèi)存訪問請求攜帶的虛地址;如果待替換頁面內(nèi)有臟數(shù)據(jù),內(nèi)存管理器根據(jù)待替換頁面的地址信息將待替換頁面的數(shù)據(jù)從內(nèi)存中替換至空閑位置,其中,內(nèi)存管理器和空閑位置的訪問器(accessor)均位于同一個設(shè)備中,空閑位置的訪問器用于在內(nèi)存管理器的控制下訪問該空閑位置;在內(nèi)存管理器將待替換頁面的數(shù)據(jù)從內(nèi)存中替換至空閑位置之后,內(nèi)存管理器將待替換頁面的虛地址修改為內(nèi)存訪問請求攜帶的虛地址。
[0107]上述兩種方式中,后一種方式和前一種方式的主要區(qū)別點(diǎn)在于:前一種方式中,當(dāng)待替換頁面內(nèi)有臟數(shù)據(jù)時,內(nèi)存管理器將待替換頁面的地址信息發(fā)送給操作系統(tǒng),操作系統(tǒng)根據(jù)待替換頁面的地址信息將待替換頁面的數(shù)據(jù)從內(nèi)存中替換至空閑位置;第二種方式中,當(dāng)待替換頁面內(nèi)有臟數(shù)據(jù)時,內(nèi)存管理器自己根據(jù)待替換頁面的地址信息將待替換頁面的數(shù)據(jù)從內(nèi)存中替換至空閑位置。
[0108]第二種方式的實(shí)施前提是,內(nèi)存管理器和空閑位置的訪問器均位于同一個設(shè)備中,空閑位置的訪問器用于在內(nèi)存管理器的控制下訪問該空閑位置。當(dāng)空閑位置為磁盤時,該空閑位置的訪問器為磁盤控制器,當(dāng)空閑位置為NVM時,該空閑位置的訪問器為NVM控制器。當(dāng)空閑位置為NVM時,內(nèi)存管理器和NVM均可以集成在內(nèi)存控制器或基于消息式內(nèi)存系統(tǒng)的緩沖調(diào)度器中。
[0109]步驟104、內(nèi)存管理器將該虛地址對應(yīng)的頁表項(xiàng)更新到內(nèi)存和TLB中,頁表項(xiàng)包括虛地址和頁面的實(shí)地址的映射關(guān)系。
[0110]內(nèi)存管理器為該虛地址分配對應(yīng)的頁面后,更新TLB和內(nèi)存的頁表,具體地:內(nèi)存管理器將該虛地址對應(yīng)的頁表項(xiàng)增加到內(nèi)存的頁表中,并在TLB中增加該虛地址對應(yīng)的頁表項(xiàng)。在將該虛地址對應(yīng)的頁表項(xiàng)更新到內(nèi)存和TLB之后,內(nèi)存管理器就能夠從TLB和內(nèi)存中找到該虛地址對應(yīng)的頁表項(xiàng),然后,根據(jù)該虛地址對應(yīng)的頁表項(xiàng)找到該虛地址對應(yīng)的實(shí)地址,使用該虛地址對應(yīng)的實(shí)地址訪問內(nèi)存。
[0111]本實(shí)施例,通過內(nèi)存管理器管理內(nèi)存,當(dāng)內(nèi)存管理器在TLB和內(nèi)存中找不到虛地址對應(yīng)的頁表項(xiàng)時,內(nèi)存管理器判斷該虛地址的缺頁類型,如果該虛地址的缺頁類型為空白頁缺頁,則內(nèi)存管理器為該虛地址分配對應(yīng)的頁面,將該虛地址對應(yīng)的頁表項(xiàng)更新到內(nèi)存和TLB中?,F(xiàn)有技術(shù)中,缺頁中斷大部分是沒有為虛地址分配對應(yīng)的頁面引起的,本實(shí)施例的方法,內(nèi)存管理器通過判斷虛地址的缺頁類型,在空白頁缺頁時并不產(chǎn)生缺頁中斷,而是為該虛地址分配對應(yīng)的頁面,因此,本實(shí)施例的方法能夠大大降低缺頁中斷發(fā)生的次數(shù),從而提高了內(nèi)存管理效率。
[0112]在上述實(shí)施例一的基礎(chǔ)上,當(dāng)內(nèi)存管理器判斷出虛地址的缺頁類型為已有數(shù)據(jù)缺頁時,內(nèi)存管理器通知操作系統(tǒng)發(fā)生缺頁中斷,并為虛地址分配對應(yīng)的頁面,更新內(nèi)存和TLB中該虛地址對應(yīng)的頁表項(xiàng)。本發(fā)明實(shí)施例二中主要介紹發(fā)生缺頁中斷后的處理流程,本實(shí)施例的方法和現(xiàn)有技術(shù)相比能夠減少缺頁中斷處理的時間。圖2為本發(fā)明內(nèi)存管理方法實(shí)施例二的流程圖,本實(shí)施例的前提是內(nèi)存管理器確定發(fā)生缺頁中斷,缺頁中斷的判斷方式詳見實(shí)施例一的描述,這里不再贅述。如圖2所示,本實(shí)施例的方法可以包括以下步驟:
[0113]步驟201、內(nèi)存管理器向操作系統(tǒng)發(fā)送缺頁中斷通知,該缺頁中斷通知攜帶虛地址。
[0114]當(dāng)內(nèi)存管理器確定虛地址的缺頁類型為已有數(shù)據(jù)缺頁時向操作系統(tǒng)發(fā)送缺頁中斷通知。本發(fā)明各實(shí)施例中當(dāng)發(fā)生缺頁中斷時,說明該虛地址對應(yīng)的頁面的數(shù)據(jù)已被從內(nèi)存中替換到了空閑位置。
[0115]步驟202、操作系統(tǒng)接收內(nèi)存管理器發(fā)送的缺頁中斷通知,根據(jù)缺頁中斷通知保護(hù)現(xiàn)場。
[0116]步驟203、操作系統(tǒng)根據(jù)該虛地址搜索空閑位置,查找該虛地址對應(yīng)的頁面的數(shù)據(jù)在空閑位置中的地址。
[0117]由于該虛地址對應(yīng)的頁面的數(shù)據(jù)被從內(nèi)存中替換到了空閑位置,所以,在訪問該虛地址時,需要從空閑位置找到該虛地址對應(yīng)的頁面的數(shù)據(jù),并替換至內(nèi)存才能夠繼續(xù)使用。
[0118]步驟204、如果內(nèi)存中有空白頁面,內(nèi)存管理器將空白頁面作為該虛地址對應(yīng)的頁面。
[0119]步驟205、內(nèi)存管理器將該虛地址對應(yīng)的頁表項(xiàng)更新到內(nèi)存和TLB中。
[0120]步驟206、內(nèi)存管理器通知操作系統(tǒng)該虛地址對應(yīng)的頁面可以使用。
[0121 ] 現(xiàn)有技術(shù)中,在發(fā)生缺頁中斷后,對該虛地址分配對應(yīng)的頁面的操作也由操作系統(tǒng)執(zhí)行,而本實(shí)施例中,操作系統(tǒng)在執(zhí)行步驟202-203時,內(nèi)存管理器可以并行執(zhí)行步驟204-205,由于操作系統(tǒng)和內(nèi)存管理器可以并行執(zhí)行,從而減少缺頁中斷處理的時間。
[0122]步驟207、操作系統(tǒng)根據(jù)該虛地址對應(yīng)的頁面