內(nèi)存管理方法和設(shè)備的制造方法
【技術(shù)領(lǐng)域】
[0001 ] 本發(fā)明實(shí)施例涉及計(jì)算機(jī)技術(shù),尤其涉及一種內(nèi)存管理方法和設(shè)備。
【背景技術(shù)】
[0002]在現(xiàn)代計(jì)算機(jī)系統(tǒng)中,內(nèi)存管理任務(wù)由操作系統(tǒng)和內(nèi)存管理單元(MemoryManagement Unit,簡(jiǎn)稱 MMU)、頁(yè)表緩存(Translat1n Lookaside Buffer,簡(jiǎn)稱 TLB)共同實(shí)現(xiàn)。
[0003]現(xiàn)有的內(nèi)存管理流程中,操作系統(tǒng)負(fù)責(zé)絕大部分的內(nèi)存管理任務(wù),而操作最頻繁的虛實(shí)地址映射和查頁(yè)面的任務(wù)由TLB和MMU等硬件來(lái)實(shí)現(xiàn)。這種內(nèi)存管理方式有兩個(gè)固有的瓶頸:(I)TLB與MMU處在處理器訪問cache的關(guān)鍵路徑上,處理器每次訪問cache必須先訪問TLB,一旦TLB miss增多,MMU會(huì)頻繁的查頁(yè)面,很容易造成系統(tǒng)瓶頸。(2)缺頁(yè)中斷處理與綁定,一旦MMU查頁(yè)面失敗,將觸發(fā)缺頁(yè)中斷,處理器將花大量時(shí)間處理缺頁(yè)中斷。Iinux系統(tǒng)查頁(yè)面的平均時(shí)間是35.8個(gè)處理周期,Iinux系統(tǒng)執(zhí)行缺頁(yè)中斷的平均時(shí)間是2687個(gè)處理周期。如果能夠避免或降低上述兩種瓶頸的發(fā)生次數(shù),將會(huì)對(duì)整個(gè)計(jì)算機(jī)系統(tǒng)的內(nèi)存管理效率有很大的提升。
[0004]現(xiàn)有技術(shù)中,提出了一種有效的內(nèi)存管理技術(shù):全虛cache (Virtual indexedVirtual Tagged)技術(shù)。全虛cache的主要思想是將TLB和MMU等硬件從訪問cache的關(guān)鍵路徑中移除,程序直接采用虛地址索引cache,只有cache miss后才由TLB進(jìn)行虛實(shí)地址翻譯,采用實(shí)地址訪問cache。該方法能夠縮短處理器訪問cache的關(guān)鍵路徑,同時(shí),由于TLB不在訪問cache的關(guān)鍵路徑上,TLB可以做得很大,TLB的命中率增高,從而有效地降低了 TLB miss的次數(shù)。因此,全虛cache可以有效地緩解上述的第一個(gè)固有瓶頸。
[0005]但是,其缺頁(yè)中斷的處理方式仍然和處理器綁定,無(wú)論是由MMU硬件還是操作系統(tǒng)執(zhí)行查頁(yè)面,只要查頁(yè)面失敗,就會(huì)產(chǎn)生缺頁(yè)中斷,處理器將大量時(shí)間浪費(fèi)在處理缺頁(yè)中斷,使得內(nèi)存管理效率低。
【發(fā)明內(nèi)容】
[0006]本發(fā)明實(shí)施例提供一種內(nèi)存管理方法和設(shè)備,能夠提高內(nèi)存管理效率。
[0007]本發(fā)明第一方面提供一種內(nèi)存管理方法,包括:
[0008]內(nèi)存管理器接收內(nèi)存訪問請(qǐng)求,所述內(nèi)存訪問請(qǐng)求攜帶虛地址,所述虛地址為操作系統(tǒng)在調(diào)用進(jìn)程時(shí)為所述進(jìn)程分配的;
[0009]若所述內(nèi)存管理器在頁(yè)表緩存TLB和內(nèi)存中沒有查找到所述虛地址對(duì)應(yīng)的頁(yè)表項(xiàng),則所述內(nèi)存管理器判斷所述虛地址的缺頁(yè)類型;
[0010]若所述虛地址的缺頁(yè)類型為空白頁(yè)缺頁(yè),則所述內(nèi)存管理器為所述虛地址分配對(duì)應(yīng)的頁(yè)面,所述空白頁(yè)缺頁(yè)是指所述虛地址未被分配對(duì)應(yīng)的頁(yè)面;
[0011]所述內(nèi)存管理器將所述虛地址對(duì)應(yīng)的頁(yè)表項(xiàng)更新到所述內(nèi)存和所述TLB中,所述頁(yè)表項(xiàng)包括所述虛地址和所述頁(yè)面的實(shí)地址的映射關(guān)系。
[0012]結(jié)合本發(fā)明第一方面,在本發(fā)明第一方面的第一種可能的實(shí)現(xiàn)方式中,所述內(nèi)存訪問請(qǐng)求還攜帶所述進(jìn)程的進(jìn)程號(hào),所述內(nèi)存管理器根據(jù)所述進(jìn)程號(hào)在所述內(nèi)存中查找所述進(jìn)程對(duì)應(yīng)的頁(yè)面,并根據(jù)所述虛地址在所述進(jìn)程對(duì)應(yīng)的頁(yè)面中查找所述虛地址對(duì)應(yīng)的頁(yè)表項(xiàng)。
[0013]結(jié)合本發(fā)明第一方面以及第一方面的第一種可能的實(shí)現(xiàn)方式,在本發(fā)明第一方面的第二種可能的實(shí)現(xiàn)方式中,所述內(nèi)存管理器為所述虛地址分配對(duì)應(yīng)的頁(yè)面,包括:
[0014]如果所述內(nèi)存中有空白頁(yè)面,所述內(nèi)存管理器將所述空白頁(yè)面作為所述虛地址對(duì)應(yīng)的頁(yè)面;
[0015]如果所述內(nèi)存中沒有空白頁(yè)面,所述內(nèi)存管理器從已分配的頁(yè)面中選擇一個(gè)待替換頁(yè)面,將所述待替換頁(yè)面的虛地址修改為所述內(nèi)存訪問請(qǐng)求攜帶的虛地址,所述修改后的待替換頁(yè)面為所述虛地址對(duì)應(yīng)的頁(yè)面。
[0016]結(jié)合本發(fā)明第一方面的第二種可能的實(shí)現(xiàn)方式,在本發(fā)明第一方面的第三種可能的實(shí)現(xiàn)方式中,
[0017]所述方法還包括:所述內(nèi)存管理器判斷所述待替換頁(yè)面內(nèi)是否有臟數(shù)據(jù);
[0018]如果所述待替換頁(yè)面內(nèi)沒有臟數(shù)據(jù),所述內(nèi)存管理器將所述待替換頁(yè)面的虛地址修改為所述內(nèi)存訪問請(qǐng)求攜帶的虛地址;
[0019]如果所述待替換頁(yè)面內(nèi)有臟數(shù)據(jù),所述內(nèi)存管理器將所述待替換頁(yè)面的地址信息發(fā)送給所述操作系統(tǒng),以使所述操作系統(tǒng)根據(jù)所述待替換頁(yè)面的地址信息將所述待替換頁(yè)面的數(shù)據(jù)從所述內(nèi)存中替換至空閑位置,在所述操作系統(tǒng)將所述待替換頁(yè)面的數(shù)據(jù)從所述內(nèi)存中替換至所述空閑位置之后,所述內(nèi)存管理器將所述待替換頁(yè)面的虛地址修改為所述內(nèi)存訪問請(qǐng)求攜帶的虛地址。
[0020]結(jié)合本發(fā)明第一方面的第二種可能的實(shí)現(xiàn)方式,在本發(fā)明第一方面的第四種可能的實(shí)現(xiàn)方式中,
[0021]所述方法還包括:所述內(nèi)存管理器判斷所述待替換頁(yè)面內(nèi)是否有臟數(shù)據(jù);
[0022]如果所述待替換頁(yè)面內(nèi)沒有臟數(shù)據(jù),所述內(nèi)存管理器將所述待替換頁(yè)面的虛地址修改為所述內(nèi)存訪問請(qǐng)求攜帶的虛地址;
[0023]如果所述待替換頁(yè)面內(nèi)有臟數(shù)據(jù),所述內(nèi)存管理器根據(jù)所述待替換頁(yè)面的地址信息將所述待替換頁(yè)面的數(shù)據(jù)從所述內(nèi)存中替換至空閑位置,其中,所述內(nèi)存管理器和所述空閑位置的訪問器位于同一個(gè)設(shè)備中,所述空閑位置的訪問器用于在所述內(nèi)存管理器的控制下訪問所述空閑位置;
[0024]在所述內(nèi)存管理器將所述待替換頁(yè)面的數(shù)據(jù)從所述內(nèi)存中替換至所述空閑位置之后,所述內(nèi)存管理器將所述待替換頁(yè)面的虛地址修改為所述內(nèi)存訪問請(qǐng)求攜帶的虛地址。
[0025]結(jié)合本發(fā)明第一方面,在本發(fā)明第一方面的第五種可能的實(shí)現(xiàn)方式中,所述方法還包括:
[0026]如果所述虛地址的缺頁(yè)類型為已有數(shù)據(jù)缺頁(yè),則所述內(nèi)存管理器通知所述操作系統(tǒng)發(fā)生缺頁(yè)中斷,所述已有數(shù)據(jù)缺頁(yè)是指所述虛地址已被分配對(duì)應(yīng)的頁(yè)面;
[0027]所述內(nèi)存管理器為所述虛地址分配對(duì)應(yīng)的頁(yè)面,更新所述內(nèi)存和所述TLB中所述虛地址對(duì)應(yīng)的頁(yè)表項(xiàng),所述頁(yè)表項(xiàng)包括所述虛地址和所述頁(yè)面的實(shí)地址的映射關(guān)系。
[0028]結(jié)合本發(fā)明第一方面以及第一方面的第一種至第五種可能的實(shí)現(xiàn)方式,在本發(fā)明第一方面的第六種可能的實(shí)現(xiàn)方式中,若執(zhí)行所述進(jìn)程的處理器核發(fā)生了變化,所述方法還包括:
[0029]所述內(nèi)存管理器接收所述操作系統(tǒng)發(fā)送的所述變化后的處理器核的信息。
[0030]結(jié)合本發(fā)明第一方面以及第一方面的第一種至第六種可能的實(shí)現(xiàn)方式,在本發(fā)明第一方面的第七種可能的實(shí)現(xiàn)方式中,當(dāng)所述操作系統(tǒng)結(jié)束所述進(jìn)程時(shí),所述方法還包括:
[0031]所述內(nèi)存管理器接收所述操作系統(tǒng)發(fā)送的內(nèi)存釋放指令,并根據(jù)所述內(nèi)存釋放指令釋放所述進(jìn)程占用的內(nèi)存。
[0032]結(jié)合本發(fā)明第一方面以及第一方面的第一種至第七種可能的實(shí)現(xiàn)方式,在本發(fā)明第一方面的第八種可能的實(shí)現(xiàn)方式中,所述內(nèi)存管理器集成在內(nèi)存控制器中,或者,集成在基于消息式內(nèi)存系統(tǒng)的緩沖調(diào)度器中。
[0033]本發(fā)明第二方面提供一種內(nèi)存管理方法,所述方法包括:
[0034]操作系統(tǒng)接收內(nèi)存管理器發(fā)送的待替換頁(yè)面的地址信息,根據(jù)所述待替換頁(yè)面的地址信息將所述待替換頁(yè)面的數(shù)據(jù)從內(nèi)存中替換至空閑位置,所述待替換頁(yè)面的地址信息是內(nèi)存管理器在為內(nèi)存訪問請(qǐng)求攜帶的虛地址選擇的所述待替換頁(yè)面內(nèi)有臟數(shù)據(jù)時(shí)發(fā)送的;
[0035]在所述操作系統(tǒng)將所述待替換頁(yè)面的數(shù)據(jù)從所述內(nèi)存中替換至所述空閑位置后,所述操作系統(tǒng)通知所述內(nèi)存管理器所述待替換頁(yè)面可以使用,以使所述內(nèi)存管理器將所述待替換頁(yè)面的虛地址修改為所述內(nèi)存訪問請(qǐng)求攜帶的虛地址。
[0036]結(jié)合本發(fā)明第二方面,在本發(fā)明第二方面的第一種可能的實(shí)現(xiàn)方式中,當(dāng)發(fā)生缺頁(yè)中斷時(shí),所述方法還包括:
[0037]所述操作系統(tǒng)接收所述內(nèi)存管理器發(fā)送的缺頁(yè)中斷通知,根據(jù)所述缺頁(yè)中斷通知保護(hù)現(xiàn)場(chǎng),其中,所述缺頁(yè)中斷通知是所述內(nèi)存管理器確定所述虛地址的缺頁(yè)類型為已有數(shù)據(jù)缺頁(yè)時(shí)發(fā)送的。
[0038]本發(fā)明第三方面提供一種內(nèi)存管理器,包括:
[0039]接收模塊,用于接收內(nèi)存訪問請(qǐng)求,所述內(nèi)存訪問請(qǐng)求攜帶虛地址,所述虛地址為操作系統(tǒng)在調(diào)用進(jìn)程時(shí)為所述進(jìn)程分配的;
[0040]查找模塊,用于在頁(yè)表緩存TLB和內(nèi)存中查找所述虛地址對(duì)應(yīng)的頁(yè)表項(xiàng);
[0041]判斷模塊,用于若所述查找模塊在所述TLB和所述內(nèi)存中沒有查找到所述虛地址對(duì)應(yīng)的頁(yè)表項(xiàng),則判斷所述虛地址的缺頁(yè)類型;
[0042]頁(yè)面分配模塊,用于若所述虛地址的缺頁(yè)類型為空白頁(yè)缺頁(yè),則為所述虛地址分配對(duì)應(yīng)的頁(yè)面,所述空白頁(yè)缺頁(yè)是指所述虛地址未被分配對(duì)應(yīng)的頁(yè)面;
[0043]更新模塊,用于在所述頁(yè)面分配模塊為所述虛地址分配對(duì)應(yīng)的頁(yè)面后,將所述虛地址對(duì)應(yīng)的頁(yè)表項(xiàng)更新到所述內(nèi)存和所述TLB中,所述頁(yè)表項(xiàng)包括所述虛地址和所述頁(yè)面的實(shí)地址的映射關(guān)系。
[0044]結(jié)合本發(fā)明第三方面,在本發(fā)明第三方面的第一種可能的實(shí)現(xiàn)方式中,所述內(nèi)存訪問請(qǐng)求還攜帶所述進(jìn)程的進(jìn)程號(hào),所述查找模塊用于:根據(jù)所述進(jìn)程號(hào)在所述內(nèi)存中查找所述進(jìn)程對(duì)應(yīng)的頁(yè)面,并根據(jù)所述虛地址在所述進(jìn)程對(duì)應(yīng)的頁(yè)面中查找所述虛地址對(duì)應(yīng)的頁(yè)表項(xiàng)。
[0045]結(jié)合本發(fā)明第三方面以及第三方面的第一種可能的實(shí)現(xiàn)方式,在本發(fā)明第三方面的第二種可能的實(shí)現(xiàn)方式中,所述頁(yè)面分配模塊具體用于:
[0046]如果所述內(nèi)存中有空白頁(yè)面,將所述空白頁(yè)面作為所述虛地址對(duì)應(yīng)的頁(yè)面;
[0047]如果所述內(nèi)存中沒有空白頁(yè)面,從已分配的頁(yè)面中選擇一個(gè)待替換頁(yè)面,將所述待替換頁(yè)面的虛地址修改為所述內(nèi)存訪問請(qǐng)求攜帶的虛地址,所述修改后的待替換頁(yè)面為所述虛地址對(duì)應(yīng)的頁(yè)面。
[0048]結(jié)合本發(fā)明第三方面的第二種可能的實(shí)現(xiàn)方式,在本發(fā)明第三方面的第三種可能的實(shí)現(xiàn)方式中,所述頁(yè)面分配模塊用于:
[0049]判斷所述待替換頁(yè)面內(nèi)是否有臟數(shù)據(jù);
[0050]如果所述待替換頁(yè)面內(nèi)沒