两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

內(nèi)存訪問(wèn)處理方法及裝置與流程

文檔序號(hào):12597137閱讀:383來(lái)源:國(guó)知局
內(nèi)存訪問(wèn)處理方法及裝置與流程

本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及內(nèi)存訪問(wèn)處理方法及裝置。



背景技術(shù):

眾所周知,在64位計(jì)算機(jī)系統(tǒng)中,CPU支持的內(nèi)存理論上最大可以達(dá)到2^64大小,然而作為實(shí)際頁(yè)表緩存的TLB(Translation Lookaside Buffer,傳輸后備緩沖)映射條目卻相對(duì)較少。因此內(nèi)核在訪問(wèn)整個(gè)內(nèi)存區(qū)的物理地址時(shí),由于不同模塊的對(duì)內(nèi)存需求大小不同,造成地址訪問(wèn)會(huì)隨機(jī)地分布在整個(gè)內(nèi)存空間。這樣在實(shí)際運(yùn)行中,將不可避免的會(huì)發(fā)生大量的TLB miss異常,因此需要不斷從頁(yè)表中加載新的TLB表項(xiàng)完成虛實(shí)地址轉(zhuǎn)換,從而導(dǎo)致內(nèi)存訪問(wèn)的性能就會(huì)降低,且CPU的占用率較高。

上述內(nèi)容僅用于輔助理解本發(fā)明的技術(shù)方案,并不代表承認(rèn)上述內(nèi)容是現(xiàn)有技術(shù)。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明的主要目的在于提供一種內(nèi)存訪問(wèn)處理方法及裝置,旨在提高系統(tǒng)的內(nèi)存訪問(wèn)性能,減少CPU的占用率。

為實(shí)現(xiàn)上述目的,本發(fā)明提供的一種內(nèi)存訪問(wèn)處理方法包括以下步驟:

按照預(yù)置規(guī)則將內(nèi)存區(qū)劃分為低端區(qū)和高端區(qū);

在傳輸后備緩沖TLB表項(xiàng)中建立與所述低端區(qū)對(duì)應(yīng)的固定TLB映射條目和與所述高端區(qū)對(duì)應(yīng)的動(dòng)態(tài)TLB映射條目;所述動(dòng)態(tài)TLB映射條目用于根據(jù)預(yù)設(shè)的頁(yè)表進(jìn)行映射關(guān)系替換;

接收到預(yù)設(shè)接口函數(shù)的訪問(wèn)內(nèi)存請(qǐng)求時(shí),根據(jù)所述固定TLB映射條目訪問(wèn)所述低端區(qū)的內(nèi)存地址,根據(jù)所述動(dòng)態(tài)TLB映射條目訪問(wèn)所述高端區(qū)的內(nèi)存地址。

優(yōu)選地,所述接收到預(yù)設(shè)接口函數(shù)的訪問(wèn)內(nèi)存請(qǐng)求時(shí),根據(jù)所述固定TLB映射條目訪問(wèn)所述低端區(qū)的內(nèi)存地址,根據(jù)所述動(dòng)態(tài)TLB映射條目訪問(wèn)所述 高端區(qū)的內(nèi)存地址,包括

接收到預(yù)設(shè)接口函數(shù)的訪問(wèn)內(nèi)存請(qǐng)求時(shí),根據(jù)所述訪問(wèn)內(nèi)存請(qǐng)求的預(yù)設(shè)訪問(wèn)地址區(qū)間判斷本次訪問(wèn)的內(nèi)存區(qū)是否是低端區(qū);

若是,則根據(jù)固定TLB映射條目訪問(wèn)所述低端區(qū)的內(nèi)存地址;

是否,則根據(jù)所述動(dòng)態(tài)TLB映射條目訪問(wèn)所述高端區(qū)的內(nèi)存地址。

優(yōu)選地,所述根據(jù)動(dòng)態(tài)TLB映射條目訪問(wèn)所述高端區(qū)的內(nèi)存地址之后還包括:

當(dāng)訪問(wèn)的內(nèi)存地址不在所述TLB表項(xiàng)中時(shí),重新加載所述預(yù)設(shè)的頁(yè)表以替換所述動(dòng)態(tài)TLB映射條目;

根據(jù)替換后的動(dòng)態(tài)TLB映射條目重新訪問(wèn)所述高端區(qū)的內(nèi)存地址。

優(yōu)選地,所述按照預(yù)置規(guī)則將內(nèi)存區(qū)劃分為低端區(qū)和高端區(qū)包括:

在系統(tǒng)內(nèi)存初始化時(shí),將從所述內(nèi)存區(qū)中預(yù)先設(shè)置的NORMAL區(qū)中劃分一部分出來(lái)設(shè)定為所述高端區(qū);將所述內(nèi)存區(qū)中預(yù)先設(shè)置的DMA區(qū)和NORMAL區(qū)未劃分出來(lái)的部分設(shè)定為所述低端區(qū)。

優(yōu)選地,所述內(nèi)存訪問(wèn)處理方法還包括:

預(yù)置所述預(yù)設(shè)接口函數(shù)與訪問(wèn)地址區(qū)間的對(duì)應(yīng)關(guān)系,以使所述預(yù)設(shè)接口函數(shù)中內(nèi)存訪問(wèn)頻度小于第一預(yù)設(shè)值的第一接口函數(shù)與屬于高端區(qū)的訪問(wèn)地址區(qū)間對(duì)應(yīng),且所述預(yù)設(shè)接口函數(shù)中非第一接口函數(shù)的第二接口函數(shù)與屬于低端區(qū)的訪問(wèn)地址區(qū)間對(duì)應(yīng)。

優(yōu)選地,所述內(nèi)存訪問(wèn)處理方法還包括:

預(yù)置所述預(yù)設(shè)接口函數(shù)與訪問(wèn)地址區(qū)間的對(duì)應(yīng)關(guān)系,以使所述預(yù)設(shè)接口函數(shù)中第一接口函數(shù)與屬于高端區(qū)的訪問(wèn)地址區(qū)間對(duì)應(yīng),且所述預(yù)設(shè)接口函數(shù)中非第一接口函數(shù)的第二接口函數(shù)與屬于低端區(qū)的訪問(wèn)地址區(qū)間對(duì)應(yīng);所述第一接口函數(shù)的內(nèi)存訪問(wèn)頻度小于第一預(yù)設(shè)值且訪問(wèn)內(nèi)存請(qǐng)求對(duì)應(yīng)的內(nèi)存量大于第二預(yù)設(shè)值。

此外,為實(shí)現(xiàn)上述目的,本發(fā)明還提供一種內(nèi)存訪問(wèn)處理裝置,所述內(nèi)存訪問(wèn)處理裝置包括:

區(qū)域劃分模塊,用于按照預(yù)置規(guī)則將內(nèi)存區(qū)劃分為低端區(qū)和高端區(qū);

條目建立模塊,用于在傳輸后備緩沖TLB表項(xiàng)中建立與所述低端區(qū)對(duì)應(yīng) 的固定TLB映射條目和與所述高端區(qū)對(duì)應(yīng)的動(dòng)態(tài)TLB映射條目;所述動(dòng)態(tài)TLB映射條目用于根據(jù)預(yù)設(shè)的頁(yè)表進(jìn)行映射關(guān)系替換;

處理模塊,用于接收到預(yù)設(shè)接口函數(shù)的訪問(wèn)內(nèi)存請(qǐng)求時(shí),根據(jù)所述固定TLB映射條目訪問(wèn)所述低端區(qū)的內(nèi)存地址,根據(jù)所述動(dòng)態(tài)TLB映射條目訪問(wèn)所述高端區(qū)的內(nèi)存地址。

優(yōu)選地,所述內(nèi)存訪問(wèn)處理裝置還包括:

加載模塊,用于當(dāng)訪問(wèn)的內(nèi)存地址不在所述TLB表項(xiàng)中時(shí),重新加載所述預(yù)設(shè)的頁(yè)表以替換所述動(dòng)態(tài)TLB映射條目;

所述處理模塊,還用于根據(jù)替換后的動(dòng)態(tài)TLB映射條目重新訪問(wèn)所述高端區(qū)的內(nèi)存地址。

優(yōu)選地,所述內(nèi)存訪問(wèn)處理裝置還包括:

第一預(yù)置模塊,用于預(yù)置所述預(yù)設(shè)接口函數(shù)與訪問(wèn)地址區(qū)間的對(duì)應(yīng)關(guān)系,以使所述預(yù)設(shè)接口函數(shù)中內(nèi)存訪問(wèn)頻度小于第一預(yù)設(shè)值的第一接口函數(shù)與屬于高端區(qū)的訪問(wèn)地址區(qū)間對(duì)應(yīng),且所述預(yù)設(shè)接口函數(shù)中非第一接口函數(shù)的第二接口函數(shù)與屬于低端區(qū)的訪問(wèn)地址區(qū)間對(duì)應(yīng)。

優(yōu)選地,所述內(nèi)存訪問(wèn)處理裝置還包括:

第二預(yù)置模塊,用于預(yù)置所述預(yù)設(shè)接口函數(shù)與訪問(wèn)地址區(qū)間的對(duì)應(yīng)關(guān)系,以使所述預(yù)設(shè)接口函數(shù)中第一接口函數(shù)與屬于高端區(qū)的訪問(wèn)地址區(qū)間對(duì)應(yīng),且所述預(yù)設(shè)接口函數(shù)中非第一接口函數(shù)的第二接口函數(shù)與屬于低端區(qū)的訪問(wèn)地址區(qū)間對(duì)應(yīng);所述第一接口函數(shù)的內(nèi)存訪問(wèn)頻度小于第一預(yù)設(shè)值且訪問(wèn)內(nèi)存請(qǐng)求對(duì)應(yīng)的內(nèi)存量大于第二預(yù)設(shè)值。

本發(fā)明實(shí)施例通過(guò)將內(nèi)存區(qū)劃分為低端區(qū)和高端區(qū),并且將TLB表項(xiàng)中設(shè)置固定TLB映射條目和動(dòng)態(tài)TLB條目,在進(jìn)行頁(yè)表動(dòng)態(tài)加載時(shí)僅替換TLB動(dòng)態(tài)條目。因此在訪問(wèn)低端區(qū)時(shí),可以直接根據(jù)固定TLB條目進(jìn)行訪問(wèn),從而減少TLB miss異常的發(fā)生概率,無(wú)需從不斷頁(yè)表中加載新的TLB表項(xiàng),進(jìn)而提高了系統(tǒng)的內(nèi)存訪問(wèn)性能,減少了CPU的占用率。

附圖說(shuō)明

圖1為本發(fā)明內(nèi)存訪問(wèn)處理方法第一實(shí)施例的流程示意圖;

圖2為本發(fā)明內(nèi)存訪問(wèn)處理方法一實(shí)施例中訪問(wèn)內(nèi)存的細(xì)化流程示意圖;

圖3為本發(fā)明內(nèi)存訪問(wèn)處理方法第二實(shí)施例的流程示意圖;

圖4為本發(fā)明內(nèi)存訪問(wèn)處理方法第三實(shí)施例的流程示意圖;

圖5為本發(fā)明內(nèi)存訪問(wèn)處理方法第四實(shí)施例的流程示意圖;

圖6為本發(fā)明內(nèi)存訪問(wèn)處理裝置第一實(shí)施例的功能模塊示意圖;

圖7為圖6中處理模塊的細(xì)化功能結(jié)構(gòu)示意圖;

圖8為本發(fā)明內(nèi)存訪問(wèn)處理裝置第二實(shí)施例的功能模塊示意圖;

圖9為本發(fā)明內(nèi)存訪問(wèn)處理裝置第三實(shí)施例的功能模塊示意圖;

圖10為本發(fā)明內(nèi)存訪問(wèn)處理裝置第四實(shí)施例的功能模塊示意圖。

本發(fā)明目的的實(shí)現(xiàn)、功能特點(diǎn)及優(yōu)點(diǎn)將結(jié)合實(shí)施例,參照附圖做進(jìn)一步說(shuō)明。

具體實(shí)施方式

應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。

本發(fā)明提供一種內(nèi)存訪問(wèn)處理方法,參照?qǐng)D1,在本發(fā)明內(nèi)存訪問(wèn)處理方法第一實(shí)施例中,該內(nèi)存訪問(wèn)處理方法包括以下步驟:

步驟S10,按照預(yù)置規(guī)則將內(nèi)存區(qū)劃分為低端區(qū)和高端區(qū);

本發(fā)明實(shí)施例提供的內(nèi)存訪問(wèn)處理方法主要應(yīng)用于計(jì)算機(jī)系統(tǒng)中,用于對(duì)內(nèi)存地址訪問(wèn)進(jìn)行控制。具體地,上述內(nèi)存劃分的方式可以根據(jù)實(shí)際需要進(jìn)行設(shè)置,在LINUX系統(tǒng)中,通常根據(jù)地址分為低端區(qū)(LOW區(qū))和高端區(qū)(HIGH區(qū))。例如,在系統(tǒng)內(nèi)存初始化時(shí),將從所述內(nèi)存區(qū)中預(yù)先設(shè)置的NORMAL區(qū)中劃分一部分出來(lái)設(shè)定為高端區(qū);將所述內(nèi)存區(qū)中預(yù)先設(shè)置的DMA區(qū)和NORMAL區(qū)未劃分出來(lái)的部分設(shè)定為低端區(qū)。本實(shí)施例中上述預(yù)先設(shè)置的DMA區(qū)和NORMAL區(qū)為現(xiàn)有技術(shù)中內(nèi)存區(qū)的劃分結(jié)構(gòu),在現(xiàn)有技術(shù)中,通常將內(nèi)存區(qū)劃分為DMA區(qū)和NORMAL區(qū)。由于通過(guò)在原有NORMAL區(qū)中劃分一部分出來(lái)的一訪問(wèn)區(qū)間作為高端區(qū),因此可以兼顧32位DMA設(shè)備尋址需求。應(yīng)當(dāng)說(shuō)明的是,高端區(qū)的起始地址可以根據(jù)系統(tǒng)中的實(shí)際內(nèi)存和TLB映射條目確定。

步驟S20,在傳輸后備緩沖TLB表項(xiàng)中建立與所述低端區(qū)對(duì)應(yīng)的固定TLB映射條目和與所述高端區(qū)對(duì)應(yīng)的動(dòng)態(tài)TLB映射條目;所述動(dòng)態(tài)TLB映射條目用于根據(jù)預(yù)設(shè)的頁(yè)表進(jìn)行映射關(guān)系替換;

具體地,在本實(shí)施例中,TLB表項(xiàng)中存在多個(gè)TLB映射條目,用于在預(yù)設(shè)接口函數(shù)進(jìn)行內(nèi)存訪問(wèn)時(shí),根據(jù)TLB映射條目訪問(wèn)內(nèi)存區(qū)。該TLB映射條目包括固定TLB映射條目和動(dòng)態(tài)TLB映射條目,其中固定TLB映射條目用于對(duì)高頻度訪問(wèn)的低端內(nèi)存區(qū)部分做線性固定映射不做替換;動(dòng)態(tài)TLB映射條目用于低頻度內(nèi)存訪問(wèn)的動(dòng)態(tài)替換加載,完成整個(gè)內(nèi)存空間的映射。應(yīng)當(dāng)說(shuō)明的是,上述預(yù)設(shè)的頁(yè)表為內(nèi)核頁(yè)表swapper_pg_dir。動(dòng)態(tài)TLB映射條目需要不斷從頁(yè)表中加載新的TLB表項(xiàng)(即TLB映射條目),以完成虛實(shí)地址轉(zhuǎn)換。在本實(shí)施例中為了綜合考慮CPU實(shí)際的動(dòng)態(tài)位寬,相關(guān)地址的空間可以采用以下方式進(jìn)行劃分:

綜合考慮CPU實(shí)際的動(dòng)態(tài)位寬,相關(guān)地址空間安排如下:

低端區(qū)內(nèi)存起始地址(物理地址):LOW_START=0x200000000

高端區(qū)內(nèi)存起始地址(物理地址):HIGHMEM_START=0x300000000

內(nèi)核線性起始地址(虛擬地址):MAP_BASE=0xc000000000000000

內(nèi)核臨時(shí)映射起始地址(虛擬地址):FIXADDR_START=0xc00000fffd7bc000,

內(nèi)核永久映射映射起始地址(虛擬地址):PKMAP_BASE=0xc000008000000000。

步驟S30,接收到預(yù)設(shè)接口函數(shù)的訪問(wèn)內(nèi)存請(qǐng)求時(shí),根據(jù)所述固定TLB映射條目訪問(wèn)所述低端區(qū)的內(nèi)存地址,根據(jù)所述動(dòng)態(tài)TLB映射條目訪問(wèn)所述高端區(qū)的內(nèi)存地址。

具體地,參照?qǐng)D2,本實(shí)施例中,上述步驟S30包括

步驟S31,接收到預(yù)設(shè)接口函數(shù)訪問(wèn)內(nèi)存請(qǐng)求時(shí),根據(jù)所述訪問(wèn)內(nèi)存請(qǐng)求的預(yù)設(shè)訪問(wèn)地址區(qū)間判斷本次訪問(wèn)的內(nèi)存區(qū)是否低端區(qū);若是,則執(zhí)行步驟S40,若否,則執(zhí)行步驟S50;

步驟S32,根據(jù)固定TLB映射條目訪問(wèn)所述低端區(qū)的內(nèi)存地址;

步驟S33,根據(jù)所述動(dòng)態(tài)TLB映射條目訪問(wèn)所述高端區(qū)的內(nèi)存地址。

本實(shí)施例中,可以修改內(nèi)核中對(duì)涉及內(nèi)存訪問(wèn)的相關(guān)函數(shù)。把高頻度訪 問(wèn)接口固定在物理內(nèi)存的低端區(qū)(NORMAL和DMA區(qū))。內(nèi)核中類(lèi)似于kmalloc、kfree,get_free_page等相關(guān)一類(lèi)的接口,內(nèi)核使用頻繁而且申請(qǐng)內(nèi)存大小相對(duì)較少,直接限定在低端區(qū)操作。而對(duì)于內(nèi)存訪問(wèn)頻度較低但是內(nèi)存需要大的接口需要通過(guò)高端區(qū)。例如文件映射和讀寫(xiě)相關(guān)kmap kunmap kmap_atomic kunmap_atomic函數(shù)接口以及對(duì)系統(tǒng)保留內(nèi)存訪問(wèn)接口。具體地,在接收到預(yù)設(shè)接口函數(shù)訪問(wèn)內(nèi)存請(qǐng)求時(shí),可以根據(jù)所述訪問(wèn)內(nèi)存請(qǐng)求的預(yù)設(shè)訪問(wèn)地址區(qū)間判斷本次訪問(wèn)的內(nèi)存區(qū)是否為低端區(qū)。例如當(dāng)上述預(yù)設(shè)訪問(wèn)地址區(qū)間屬于低端區(qū)時(shí),則可以直接根據(jù)固定TLB映射條目的映射關(guān)系訪問(wèn)低端區(qū);當(dāng)上述預(yù)設(shè)訪問(wèn)地址區(qū)間屬于高端區(qū)時(shí),則可以根據(jù)動(dòng)態(tài)TLB映射條目的映射關(guān)系訪問(wèn)高端區(qū)。

本發(fā)明實(shí)施例通過(guò)將內(nèi)存區(qū)劃分為低端區(qū)和高端區(qū),并且將TLB表項(xiàng)中設(shè)置固定TLB映射條目和動(dòng)態(tài)TLB條目,在進(jìn)行頁(yè)表動(dòng)態(tài)加載時(shí)僅替換TLB動(dòng)態(tài)條目。因此在訪問(wèn)低端區(qū)時(shí),可以直接根據(jù)固定TLB條目進(jìn)行訪問(wèn),從而減少TLB miss異常的發(fā)生概率,無(wú)需從不斷頁(yè)表中加載新的TLB表項(xiàng),進(jìn)而提高了系統(tǒng)的內(nèi)存訪問(wèn)性能,減少了CPU的占用率。

進(jìn)一步地,參照?qǐng)D3,基于本發(fā)明內(nèi)存訪問(wèn)處理方法第一實(shí)施例,在本發(fā)明內(nèi)存訪問(wèn)處理方法第二實(shí)施例中,步驟S33之后還包括:

步驟S40,當(dāng)訪問(wèn)的內(nèi)存地址不在所述TLB表項(xiàng)中時(shí),重新加載所述預(yù)設(shè)的頁(yè)表以替換所述動(dòng)態(tài)TLB映射條目;

步驟S50,根據(jù)替換后的動(dòng)態(tài)TLB映射條目重新訪問(wèn)所述高端區(qū)的內(nèi)存地址。

具體地,在本實(shí)施例中,在接收到上述訪問(wèn)內(nèi)存請(qǐng)求后,根據(jù)該內(nèi)存訪問(wèn)請(qǐng)求訪問(wèn)高端區(qū)的內(nèi)存地址時(shí),若發(fā)現(xiàn)不存在該地址,將產(chǎn)生TLB miss異常,此時(shí)將根據(jù)該TLB miss異常重新加載所述預(yù)設(shè)的頁(yè)表以替換所述動(dòng)態(tài)TLB映射條目,以對(duì)動(dòng)態(tài)TLB映射條目進(jìn)行更新,保證可以根據(jù)上述訪問(wèn)內(nèi)存請(qǐng)求訪問(wèn)到對(duì)應(yīng)的內(nèi)存地址。

可以理解的是,上述低端區(qū)和高端區(qū)對(duì)應(yīng)的訪問(wèn)內(nèi)存請(qǐng)求類(lèi)型可以根據(jù)實(shí)際需要進(jìn)行設(shè)置。優(yōu)選地,可以將內(nèi)存訪問(wèn)頻度比較低的訪問(wèn)內(nèi)存請(qǐng)求對(duì) 應(yīng)的接口函數(shù)的訪問(wèn)地址區(qū)間限定在高端區(qū)內(nèi),將內(nèi)存訪問(wèn)頻度比較高的訪問(wèn)內(nèi)存請(qǐng)求對(duì)應(yīng)的接口函數(shù)的訪問(wèn)地址區(qū)間限定在低端區(qū)內(nèi)。

具體地,如圖4所示,在本發(fā)明內(nèi)存訪問(wèn)處理方法第三實(shí)施例中,上述內(nèi)存訪問(wèn)處理方法還包括:

步驟S60,預(yù)置所述預(yù)設(shè)接口函數(shù)與訪問(wèn)地址區(qū)間的對(duì)應(yīng)關(guān)系,以使所述預(yù)設(shè)接口函數(shù)中內(nèi)存訪問(wèn)頻度小于第一預(yù)設(shè)值的第一接口函數(shù)與屬于高端區(qū)的訪問(wèn)地址區(qū)間對(duì)應(yīng),且所述預(yù)設(shè)接口函數(shù)中非第一接口函數(shù)的第二接口函數(shù)與屬于低端區(qū)的訪問(wèn)地址區(qū)間對(duì)應(yīng)。

進(jìn)一步地,在內(nèi)存充足的情況下還可以考慮訪問(wèn)內(nèi)存請(qǐng)求對(duì)應(yīng)的內(nèi)存量,將緩存容量較小對(duì)應(yīng)的接口函數(shù)的訪問(wèn)地址區(qū)間限定在低端區(qū)內(nèi)。在本發(fā)明內(nèi)存訪問(wèn)處理方法第四實(shí)施例中,與本發(fā)明內(nèi)存訪問(wèn)處理方法第三實(shí)施例的區(qū)別在于上述步驟S60可以替換為步驟S70。具體地,如圖5所示,在本發(fā)明內(nèi)存訪問(wèn)處理方法第四實(shí)施例中,上述內(nèi)存訪問(wèn)處理方法還包括:

步驟S70,預(yù)置所述預(yù)設(shè)接口函數(shù)與訪問(wèn)地址區(qū)間的對(duì)應(yīng)關(guān)系,以使所述預(yù)設(shè)接口函數(shù)中第一接口函數(shù)與屬于高端區(qū)的訪問(wèn)地址區(qū)間對(duì)應(yīng),且所述預(yù)設(shè)接口函數(shù)中非第一接口函數(shù)的第二接口函數(shù)與屬于低端區(qū)的訪問(wèn)地址區(qū)間對(duì)應(yīng);所述第一接口函數(shù)的內(nèi)存訪問(wèn)頻度小于第一預(yù)設(shè)值且訪問(wèn)內(nèi)存請(qǐng)求對(duì)應(yīng)的內(nèi)存量大于第二預(yù)設(shè)值。

在本實(shí)施例中,這樣在處理最頻繁訪問(wèn)內(nèi)存空間接口函數(shù)時(shí),由于不需要通過(guò)頁(yè)表,訪問(wèn)速度很快。而一些使用頻度比較低的函數(shù)訪問(wèn)內(nèi)存區(qū)域時(shí),會(huì)通過(guò)TLB miss異常,最終加載動(dòng)態(tài)把頁(yè)表內(nèi)容加載到TLB中,完成虛實(shí)地址轉(zhuǎn)換。由于這種低頻度訪問(wèn)接口是根據(jù)內(nèi)核運(yùn)行情況統(tǒng)計(jì)后做的修改,實(shí)際使用密度低,對(duì)整體性能影響很小。

本發(fā)明還提供一種內(nèi)存訪問(wèn)處理裝置,參照?qǐng)D6,在本發(fā)明內(nèi)存訪問(wèn)處理裝置第一實(shí)施例中,該內(nèi)存訪問(wèn)處理裝置包括:

區(qū)域劃分模塊10,用于按照預(yù)置規(guī)則將內(nèi)存區(qū)劃分為低端區(qū)和高端區(qū);

本發(fā)明實(shí)施例提供的內(nèi)存訪問(wèn)處理裝置主要應(yīng)用于計(jì)算機(jī)系統(tǒng)中,用于對(duì)內(nèi)存地址訪問(wèn)進(jìn)行控制。具體地,上述內(nèi)存劃分的方式可以根據(jù)實(shí)際需要進(jìn)行設(shè)置,在LINUX系統(tǒng)中,通常根據(jù)地址分為低端區(qū)(LOW區(qū))和高端 區(qū)(HIGH區(qū))。例如,在系統(tǒng)內(nèi)存初始化時(shí),將從所述內(nèi)存區(qū)中預(yù)先設(shè)置的NORMAL區(qū)中劃分一部分出來(lái)設(shè)定為高端區(qū);將所述內(nèi)存區(qū)中預(yù)先設(shè)置的DMA區(qū)和NORMAL區(qū)未劃分出來(lái)的部分設(shè)定為低端區(qū)。本實(shí)施例中上述預(yù)先設(shè)置的DMA區(qū)和NORMAL區(qū)為現(xiàn)有技術(shù)中內(nèi)存區(qū)的劃分結(jié)構(gòu),在現(xiàn)有技術(shù)中,通常將內(nèi)存區(qū)劃分為DMA區(qū)和NORMAL區(qū)。由于通過(guò)在原有NORMAL區(qū)中劃分一部分出來(lái)的一訪問(wèn)區(qū)間作為高端區(qū),因此可以兼顧32位DMA設(shè)備尋址需求。應(yīng)當(dāng)說(shuō)明的是,高端區(qū)的起始地址可以根據(jù)系統(tǒng)中的實(shí)際內(nèi)存和TLB映射條目確定。

條目建立模塊20,用于在傳輸后備緩沖TLB表項(xiàng)中建立與所述低端區(qū)對(duì)應(yīng)的固定TLB映射條目和與所述高端區(qū)對(duì)應(yīng)的動(dòng)態(tài)TLB映射條目;所述動(dòng)態(tài)TLB映射條目用于根據(jù)預(yù)設(shè)的頁(yè)表進(jìn)行映射關(guān)系替換;

具體地,在本實(shí)施例中,TLB表項(xiàng)中存在多個(gè)TLB映射條目,用于在預(yù)設(shè)接口函數(shù)進(jìn)行內(nèi)存訪問(wèn)時(shí),根據(jù)TLB映射條目訪問(wèn)內(nèi)存區(qū)。該TLB映射條目包括固定TLB映射條目和動(dòng)態(tài)TLB映射條目,其中固定TLB映射條目用于對(duì)高頻度訪問(wèn)的低端內(nèi)存區(qū)部分做線性固定映射不做替換;動(dòng)態(tài)TLB映射條目用于低頻度內(nèi)存訪問(wèn)的動(dòng)態(tài)替換加載,完成整個(gè)內(nèi)存空間的映射。應(yīng)當(dāng)說(shuō)明的是,上述預(yù)設(shè)的頁(yè)表為內(nèi)核頁(yè)表swapper_pg_dir。動(dòng)態(tài)TLB映射條目需要不斷從頁(yè)表中加載新的TLB表項(xiàng)(即TLB映射條目),以完成虛實(shí)地址轉(zhuǎn)換。在本實(shí)施例中為了綜合考慮CPU實(shí)際的動(dòng)態(tài)位寬,相關(guān)地址的空間可以采用以下方式進(jìn)行劃分:

綜合考慮CPU實(shí)際的動(dòng)態(tài)位寬,相關(guān)地址空間安排如下:

低端區(qū)內(nèi)存起始地址(物理地址):LOW_START=0x200000000

高端區(qū)內(nèi)存起始地址(物理地址):HIGHMEM_START=0x300000000

內(nèi)核線性起始地址(虛擬地址):MAP_BASE=0xc000000000000000

內(nèi)核臨時(shí)映射起始地址(虛擬地址):FIXADDR_START=0xc00000fffd7bc000,

內(nèi)核永久映射映射起始地址(虛擬地址):PKMAP_BASE=0xc000008000000000。

處理模塊30,用于接收到預(yù)設(shè)接口函數(shù)的訪問(wèn)內(nèi)存請(qǐng)求時(shí),根據(jù)所述固定TLB映射條目訪問(wèn)所述低端區(qū)的內(nèi)存地址,根據(jù)所述動(dòng)態(tài)TLB映射條目訪 問(wèn)所述高端區(qū)的內(nèi)存地址。

具體地,參照?qǐng)D7,上述處理模塊30包括:

判斷單元31,用于接收到預(yù)設(shè)接口函數(shù)的訪問(wèn)內(nèi)存請(qǐng)求時(shí),根據(jù)所述訪問(wèn)內(nèi)存請(qǐng)求的預(yù)設(shè)訪問(wèn)地址區(qū)間判斷本次訪問(wèn)的內(nèi)存區(qū)是否是低端區(qū);

處理單元32,用于當(dāng)本次訪問(wèn)的內(nèi)存區(qū)為低端區(qū)時(shí),根據(jù)固定TLB映射條目訪問(wèn)所述低端區(qū)的內(nèi)存地址;當(dāng)本次訪問(wèn)的內(nèi)存區(qū)為高端區(qū)時(shí),根據(jù)所述動(dòng)態(tài)TLB映射條目訪問(wèn)所述高端區(qū)的內(nèi)存地址。

本實(shí)施例中,可以修改內(nèi)核中對(duì)涉及內(nèi)存訪問(wèn)的相關(guān)函數(shù)。把高頻度訪問(wèn)接口固定在物理內(nèi)存的低端區(qū)(NORMAL和DMA區(qū))。內(nèi)核中類(lèi)似于kmalloc、kfree,get_free_page等相關(guān)一類(lèi)的接口,內(nèi)核使用頻繁而且申請(qǐng)內(nèi)存大小相對(duì)較少,直接限定在低端區(qū)操作。而對(duì)于內(nèi)存訪問(wèn)頻度較低但是內(nèi)存需要大的接口需要通過(guò)高端區(qū)。例如文件映射和讀寫(xiě)相關(guān)kmap kunmap kmap_atomic kunmap_atomic函數(shù)接口以及對(duì)系統(tǒng)保留內(nèi)存訪問(wèn)接口。具體地,在接收到預(yù)設(shè)接口函數(shù)訪問(wèn)內(nèi)存請(qǐng)求時(shí),可以根據(jù)所述訪問(wèn)內(nèi)存請(qǐng)求的預(yù)設(shè)訪問(wèn)地址區(qū)間判斷本次訪問(wèn)的內(nèi)存區(qū)是否為低端區(qū)。例如當(dāng)上述預(yù)設(shè)訪問(wèn)地址區(qū)間屬于低端區(qū)時(shí),則可以直接根據(jù)固定TLB映射條目的映射關(guān)系訪問(wèn)低端區(qū);當(dāng)上述預(yù)設(shè)訪問(wèn)地址區(qū)間屬于高端區(qū)時(shí),則可以根據(jù)動(dòng)態(tài)TLB映射條目的映射關(guān)系訪問(wèn)高端區(qū)。

本發(fā)明實(shí)施例通過(guò)將內(nèi)存區(qū)劃分為低端區(qū)和高端區(qū),并且將TLB表項(xiàng)中設(shè)置固定TLB映射條目和動(dòng)態(tài)TLB條目,在進(jìn)行頁(yè)表動(dòng)態(tài)加載時(shí)僅替換TLB動(dòng)態(tài)條目。因此在訪問(wèn)低端區(qū)時(shí),可以直接根據(jù)固定TLB條目進(jìn)行訪問(wèn),從而減少TLB miss異常的發(fā)生概率,無(wú)需從不斷頁(yè)表中加載新的TLB表項(xiàng),進(jìn)而提高了系統(tǒng)的內(nèi)存訪問(wèn)性能,減少CPU的占用率。

進(jìn)一步地,參照?qǐng)D8,基于本發(fā)明內(nèi)存訪問(wèn)處理裝置第一實(shí)施例,在本發(fā)明內(nèi)存訪問(wèn)處理裝置第二實(shí)施例中,所述內(nèi)存訪問(wèn)處理裝置還包括:

加載模塊40,用于當(dāng)訪問(wèn)的內(nèi)存地址不在所述TLB表項(xiàng)中時(shí),重新加載所述預(yù)設(shè)的頁(yè)表以替換所述動(dòng)態(tài)TLB映射條目;

所述處理模塊30,還用于根據(jù)替換后的動(dòng)態(tài)TLB映射條目重新訪問(wèn)所述高端區(qū)的內(nèi)存地址。

具體地,在本實(shí)施例中,在接收到上述訪問(wèn)內(nèi)存請(qǐng)求后,根據(jù)該內(nèi)存訪問(wèn)請(qǐng)求訪問(wèn)高端區(qū)的內(nèi)存地址時(shí),若發(fā)現(xiàn)不存在該地址,將產(chǎn)生TLB miss異常,此時(shí)將根據(jù)該TLB miss異常重新加載所述預(yù)設(shè)的頁(yè)表以替換所述動(dòng)態(tài)TLB映射條目,以對(duì)動(dòng)態(tài)TLB映射條目進(jìn)行更新,保證可以根據(jù)上述訪問(wèn)內(nèi)存請(qǐng)求訪問(wèn)到對(duì)應(yīng)的內(nèi)存地址。

可以理解的是,上述低端區(qū)和高端區(qū)對(duì)應(yīng)的訪問(wèn)內(nèi)存請(qǐng)求類(lèi)型可以根據(jù)實(shí)際需要進(jìn)行設(shè)置。優(yōu)選地,可以將內(nèi)存訪問(wèn)頻度比較低的訪問(wèn)內(nèi)存請(qǐng)求對(duì)應(yīng)的接口函數(shù)的訪問(wèn)地址區(qū)間限定在高端區(qū)內(nèi),將內(nèi)存訪問(wèn)頻度比較高的訪問(wèn)內(nèi)存請(qǐng)求對(duì)應(yīng)的接口函數(shù)的訪問(wèn)地址區(qū)間限定在低端區(qū)內(nèi)。

具體地,如圖9所示,在本發(fā)明內(nèi)存訪問(wèn)處理裝置第三實(shí)施例中,上述內(nèi)存訪問(wèn)處理裝置還包括:

第一預(yù)置模塊50,用于預(yù)置所述預(yù)設(shè)接口函數(shù)與訪問(wèn)地址區(qū)間的對(duì)應(yīng)關(guān)系,以使所述預(yù)設(shè)接口函數(shù)中內(nèi)存訪問(wèn)頻度小于第一預(yù)設(shè)值的第一接口函數(shù)與屬于高端區(qū)的訪問(wèn)地址區(qū)間對(duì)應(yīng),且所述預(yù)設(shè)接口函數(shù)中非第一接口函數(shù)的第二接口函數(shù)與屬于低端區(qū)的訪問(wèn)地址區(qū)間對(duì)應(yīng)。

進(jìn)一步地,在內(nèi)存充足的情況下還可以考慮訪問(wèn)內(nèi)存請(qǐng)求對(duì)應(yīng)的內(nèi)存量,將緩存容量較小對(duì)應(yīng)的接口函數(shù)的訪問(wèn)地址區(qū)間限定在低端區(qū)內(nèi)。參照?qǐng)D10,在本發(fā)明內(nèi)存訪問(wèn)處理裝置第四實(shí)施例中,上述內(nèi)存訪問(wèn)處理裝置還包括:

第二預(yù)置模塊60,用于預(yù)置所述預(yù)設(shè)接口函數(shù)與訪問(wèn)地址區(qū)間的對(duì)應(yīng)關(guān)系,以使所述預(yù)設(shè)接口函數(shù)中內(nèi)存訪問(wèn)頻度小于第一預(yù)設(shè)值且訪問(wèn)內(nèi)存請(qǐng)求對(duì)應(yīng)的內(nèi)存量大于第二預(yù)設(shè)值的第一接口函數(shù)與屬于高端區(qū)的訪問(wèn)地址區(qū)間對(duì)應(yīng),且所述預(yù)設(shè)接口函數(shù)中非第一接口函數(shù)的第二接口函數(shù)與屬于低端區(qū)的訪問(wèn)地址區(qū)間對(duì)應(yīng)。

在本實(shí)施例中,這樣在處理最頻繁訪問(wèn)內(nèi)存空間接口函數(shù)時(shí),由于不需要通過(guò)頁(yè)表,訪問(wèn)速度很快。而一些使用頻度比較低的函數(shù)訪問(wèn)內(nèi)存區(qū)域時(shí),會(huì)通過(guò)TLB miss異常,最終加載動(dòng)態(tài)把頁(yè)表內(nèi)容加載到TLB中,完成虛實(shí)地址轉(zhuǎn)換。由于這種低頻度訪問(wèn)接口是根據(jù)內(nèi)核運(yùn)行情況統(tǒng)計(jì)后做的修改,實(shí)際使用密度低,對(duì)整體性能影響很小。

以上僅為本發(fā)明的優(yōu)選實(shí)施例,并非因此限制本發(fā)明的專(zhuān)利范圍,凡是利用本發(fā)明說(shuō)明書(shū)及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專(zhuān)利保護(hù)范圍內(nèi)。

當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
泰州市| 吴江市| 兴仁县| 西充县| 九龙城区| 抚州市| 江门市| 洱源县| 化州市| 义马市| 获嘉县| 井研县| 巴青县| 洪江市| 梧州市| 惠来县| 天门市| 河南省| 城步| 会理县| 宜兴市| 巴楚县| 南川市| 深泽县| 北票市| 郸城县| 隆子县| 石狮市| 炎陵县| 合川市| 罗田县| 佛山市| 阳高县| 图木舒克市| 高密市| 乌拉特前旗| 乐陵市| 公主岭市| 钦州市| 天峻县| 盐亭县|