專利名稱:一種基于非連續(xù)頁的動(dòng)態(tài)內(nèi)存管理方法
技術(shù)領(lǐng)域:
本發(fā)明屬于集成電路設(shè)計(jì)領(lǐng)域,特別涉及有實(shí)時(shí)性要求的網(wǎng)絡(luò)通信芯 片中內(nèi)存分配、存儲和管理的方法,具體是一種基于非連續(xù)頁的動(dòng)態(tài)內(nèi)存 管理方法。
技術(shù)背景根據(jù)數(shù)據(jù)存取的不同模式,管理內(nèi)存通常有許多不同的方法。當(dāng)數(shù)據(jù)的存入和取出的順序相同時(shí),通常用類似于先進(jìn)先出(FIFO)的緩沖 (Buffer)結(jié)構(gòu)來管理,例如交換機(jī)中轉(zhuǎn)發(fā)隊(duì)列就是以不同形式的 Buffer來管理。當(dāng)數(shù)據(jù)的取出順序和存入順序不同時(shí),則在完整的內(nèi)存 存儲單元中有可能出現(xiàn)一片空閑單元(Hole),若不能正確處理這些分散 在已分配內(nèi)存中的小片空閑單元,將極大地影響內(nèi)存的利用率。軟件實(shí)現(xiàn)的動(dòng)態(tài)內(nèi)存方法多采用連續(xù)分配的方式,用兩個(gè)雙向鏈表結(jié) 構(gòu)管理空閑的內(nèi)存塊。隨著內(nèi)存分配、回收的不斷進(jìn)行,空閑鏈表將逐漸 增大,為了從這個(gè)空閑鏈表中找到一個(gè)合適的內(nèi)存塊的搜索時(shí)間也相應(yīng)的 增長,而且該時(shí)間與請求的內(nèi)存塊大小有關(guān),因此無法滿足實(shí)時(shí)性的要 求。并且,這種軟件實(shí)現(xiàn)的內(nèi)存分配方法,為了減少碎片問題,都加入內(nèi) 存的分割(splitting)和合并(coalescing)的功能,但這些方法的引 入,也在一定程度上影響到內(nèi)存管理的時(shí)間確定性(Time-Bounded Service)。 發(fā)明內(nèi)容本發(fā)明的目的就是克服現(xiàn)有技術(shù)的不足,提供一種基于非連續(xù)頁的動(dòng) 態(tài)內(nèi)存管理方法。本發(fā)明的動(dòng)態(tài)內(nèi)存管理方法是根據(jù)應(yīng)用環(huán)境中數(shù)據(jù)流的特征將內(nèi)存單 元分割為大小相同的內(nèi)存頁,這些內(nèi)存頁是內(nèi)存分配的最小單元,也是內(nèi) 存管理的最小單位,該內(nèi)存管理方法具體包括內(nèi)存分配、內(nèi)存回收和地址映射。其中內(nèi)存分配的方法是基于允許邏輯上相連的數(shù)據(jù)存儲在物理上非連續(xù)的 頁中,具體步驟包括1、 當(dāng)主機(jī)請求內(nèi)存分配時(shí),內(nèi)存管理單元比較當(dāng)前內(nèi)存的剩余資源 (包括空閑頁總量和數(shù)據(jù)標(biāo)志符DataID)和主機(jī)請求的內(nèi)存大小,若空閑頁總量大于主機(jī)請求的內(nèi)存頁總量,并且內(nèi)存管理單元中仍有可用的數(shù) 據(jù)標(biāo)志符,則繼續(xù)內(nèi)存分配,否則結(jié)束內(nèi)存分配。繼續(xù)內(nèi)存分配和結(jié)束內(nèi)存為、酉GH、J1曰趙tt一"l爾5艽口、」節(jié)T厄趙凹5甘土I兒,1六土"L宜訓(xùn)。乂W禾5正5頭hH于 分配,內(nèi)存管理模塊將從存儲DataID信息的二進(jìn)制向量中,用"首零檢 測"的方法找到一個(gè)可用的標(biāo)志符,并將該標(biāo)志符分配給這一塊數(shù)據(jù)。2、 內(nèi)存分配單元進(jìn)入實(shí)質(zhì)性分配階段,內(nèi)存管理單元關(guān)閉對新的內(nèi) 存分配請求的響應(yīng)。同時(shí),內(nèi)存管理單元根據(jù)請求的頁數(shù),從空閑頁表管 理單元讀出可用頁的頁號,并寫入到數(shù)據(jù)頁表管理單元中??臻e頁表中的 可用頁來自計(jì)數(shù)器或先進(jìn)先出隊(duì)列(FIFO),由分配模式寄存器中的值來 決定。當(dāng)該寄存器中的值為l時(shí),空閑頁表管理單元從計(jì)數(shù)器中獲得可用 頁的頁號;當(dāng)該寄存器中的值為0時(shí),從先進(jìn)先出隊(duì)列中獲得頁號。3、如果分配給主機(jī)的所有內(nèi)存頁全部從空閑頁表中轉(zhuǎn)移到數(shù)據(jù)頁表 中,則本次內(nèi)存分配完成,內(nèi)存管理單元重新進(jìn)入接收內(nèi)存分配請求的狀 態(tài),等待下一次請求;如果分配給主機(jī)的所有內(nèi)存頁沒有完全從空閑頁表 中轉(zhuǎn)移到數(shù)據(jù)頁表中,則轉(zhuǎn)到2,繼續(xù)進(jìn)行內(nèi)存頁轉(zhuǎn)移。 內(nèi)存回收的方法具體步驟包括1、 當(dāng)主機(jī)請求內(nèi)存分配時(shí),內(nèi)存管理單元比較當(dāng)前內(nèi)存的剩余資源 和主機(jī)請求的內(nèi)存大小,若空閑頁總量大于主機(jī)請求的內(nèi)存頁總量,并且 內(nèi)存管理單元中仍有可用的數(shù)據(jù)標(biāo)志符,則內(nèi)存管理單元啟動(dòng)與本次請求 對應(yīng)的倒計(jì)時(shí)器,計(jì)數(shù)初值為T0,計(jì)時(shí)步長為1秒,計(jì)時(shí)的時(shí)間基準(zhǔn)由 外部輸入。2、 如果某次請求在被成功分配一塊內(nèi)存,并且在與該次請求對應(yīng)的計(jì)時(shí)器計(jì)數(shù)到零時(shí),數(shù)據(jù)所占用的內(nèi)存資源仍沒有被回收,則轉(zhuǎn)4;如果 在計(jì)時(shí)器倒計(jì)數(shù)到零之前,主機(jī)不再使用該內(nèi)存頁中的數(shù)據(jù),可以向內(nèi)存 管理單元寫入回收內(nèi)存的指令,要求內(nèi)存管理單元回收這一塊數(shù)據(jù)所占用 的內(nèi)存頁和數(shù)據(jù)標(biāo)識符資源。指令中需指出要求回收的數(shù)據(jù)對應(yīng)的數(shù)據(jù)標(biāo)志符(DataID)。該過程中,內(nèi)存管理單元停止倒計(jì)時(shí)器并將其復(fù)位到 T0。3、 當(dāng)內(nèi)存管理單元的內(nèi)部寄存器接收到主機(jī)發(fā)送的"回收內(nèi)存"的 指令時(shí),將指令中數(shù)據(jù)標(biāo)志符對應(yīng)的所有內(nèi)存頁依次從數(shù)據(jù)頁表中讀出, 并將其寫入到空閑頁表中,然后轉(zhuǎn)5。其中讀出和寫入的次數(shù)與該數(shù)據(jù)標(biāo) 志符對應(yīng)的數(shù)據(jù)所占用的內(nèi)存頁的總量相同。4、 當(dāng)?shù)褂?jì)時(shí)器計(jì)數(shù)到零時(shí),與該計(jì)時(shí)器對應(yīng)的數(shù)據(jù)所占用的內(nèi)存資 源仍沒有被回收,則在數(shù)據(jù)頁表和空閑頁表都空閑時(shí),將超時(shí)的數(shù)據(jù)占用 的內(nèi)存頁從數(shù)據(jù)頁表中依次讀出并寫入空閑頁表中,同時(shí)在所有內(nèi)存頁回 收后,將該數(shù)據(jù)占用的數(shù)據(jù)標(biāo)志符對應(yīng)的二進(jìn)制向量位重新復(fù)位,即回收 數(shù)據(jù)表示符(DataID)資源。5、 內(nèi)存回收結(jié)束。地址映射將用戶訪問的邏輯地址轉(zhuǎn)換到能訪問物理內(nèi)存的實(shí)際地址, 在本發(fā)明的應(yīng)用環(huán)境中,內(nèi)存中的數(shù)據(jù)是連續(xù)寫入和讀出的。針對這樣的 數(shù)據(jù)流特征,地址映射的方法步驟包括1、 當(dāng)主機(jī)需要訪問內(nèi)存時(shí),先向內(nèi)存管理單元寫入一條請求讀寫的 指令。其中,當(dāng)主機(jī)讀內(nèi)存時(shí),在發(fā)出讀請求的同時(shí),指明需要讀取的數(shù) 據(jù)所對應(yīng)的數(shù)據(jù)標(biāo)識符;而當(dāng)主機(jī)需要寫內(nèi)存時(shí),只需發(fā)送寫請求,數(shù)據(jù) 所對應(yīng)的標(biāo)識符由內(nèi)存管理單元自動(dòng)管理,該標(biāo)識符在主機(jī)請求內(nèi)存分配 時(shí)由內(nèi)存分配單元分配。2、 內(nèi)存管理單元在接收到主機(jī)需要訪問內(nèi)存的指令時(shí),以所訪問數(shù) 據(jù)對應(yīng)的數(shù)據(jù)標(biāo)識符為基地址,偏移為零,組合成一個(gè)新地址,讀取數(shù)據(jù) 頁表中數(shù)據(jù)存儲的首個(gè)內(nèi)存頁的頁號,并將該頁號存入"當(dāng)前頁號"寄存器。其中,地址組合時(shí),以數(shù)據(jù)標(biāo)識符作為地址的高P位,而地址的低d 位為全零。P定義為w-d,其中W為內(nèi)存中地址線的寬度,d為邏輯地址 的頁內(nèi)偏移,相應(yīng)地,每一片內(nèi)存頁的大小為2d字節(jié)(Byte)。3、 當(dāng)主機(jī)開始訪問內(nèi)存時(shí),內(nèi)存管理單元截取邏輯地址的低d位, 作為物理地址的低d位,并以"當(dāng)前頁號"寄存器中的值為地址的高p 位,組合為可以訪問內(nèi)存的物理地址。若主機(jī)訪問的邏輯地址不是一頁中 的最后一個(gè)字節(jié),則轉(zhuǎn)4;若主機(jī)訪問的邏輯地址為一頁中的最后一個(gè)字 節(jié),內(nèi)存管理單元在同一個(gè)系統(tǒng)周期內(nèi),截取主機(jī)當(dāng)前訪問的邏輯地址的 高P位,將該p位的數(shù)據(jù)加l (記為pl)并與當(dāng)前訪問數(shù)據(jù)的數(shù)據(jù)標(biāo)識符 一起組合成一個(gè)新地址,用該地址讀取數(shù)據(jù)頁表管理單元中的頁號,并在 下一個(gè)系統(tǒng)周期時(shí),將從數(shù)據(jù)頁表中獲得的頁號更新到"當(dāng)前頁表"寄存 器中。4、 若主機(jī)訪問內(nèi)存結(jié)束,則向內(nèi)存管理單元中寫入"結(jié)束訪問"的 指令,內(nèi)存管理單元復(fù)位"當(dāng)前頁表"寄存器,并等待主機(jī)的下一次訪問 請求;若主機(jī)還需訪問內(nèi)存,則轉(zhuǎn)3,繼續(xù)內(nèi)存訪問的過程。本發(fā)明中的所涉及的操作(如讀、寫內(nèi)存等)為基本技術(shù)常識,采用 常規(guī)技術(shù)手段。本發(fā)明的發(fā)明點(diǎn)在于提供一種較為先進(jìn)的內(nèi)存管理流程。本發(fā)明以非連續(xù)的頁作為基本分配和回收的單元,允許邏輯上相連的 數(shù)據(jù)存儲在非連續(xù)的頁中。這種方式提高了內(nèi)存分配的靈活度,相應(yīng)地, 內(nèi)存的外部碎片被消除,內(nèi)存的利用率得到了提高。
圖1本發(fā)明的應(yīng)用系統(tǒng)結(jié)構(gòu)圖;圖2本發(fā)明內(nèi)存分配功能的結(jié)構(gòu)圖;圖3本發(fā)明內(nèi)存分配功能的流程圖;圖4本發(fā)明內(nèi)存分配過程的時(shí)序;圖5本發(fā)明系統(tǒng)運(yùn)行過程中內(nèi)存分配結(jié)果實(shí)例;圖6邏輯地址到物理地址的映射。
具體實(shí)施方式
本發(fā)明的典型系統(tǒng)應(yīng)用環(huán)境如圖l所示,其中內(nèi)存管理單元為本發(fā)明 的一個(gè)實(shí)例。本發(fā)明有三大主要功能 一,分配內(nèi)存,更新內(nèi)存記錄信息;二,回收內(nèi)存并更新內(nèi)存記錄信息;三,地址映射。下面結(jié)合發(fā)明內(nèi)容中對三個(gè)主要功能流程的描述進(jìn)一步介紹各功能的具體實(shí)施方式
。內(nèi)存分配功能的結(jié)構(gòu)圖如圖2所示,內(nèi)存分配流程如圖3所示。其 中,空閑頁資源用計(jì)數(shù)器和FIFO相結(jié)合的方式來管理。在分配的初始階 段,采用計(jì)數(shù)器分配空閑頁,歸還的頁將存入FIFO中,當(dāng)所有頁都轉(zhuǎn)移 到FIFO中后由FIFO管理空閑頁??臻e頁表管理單元的工作狀態(tài)由"分配 模式控制"寄存器來決定。計(jì)數(shù)器的引入消除了空閑頁表初始化的過程。 計(jì)數(shù)器還有另一個(gè)作用,出于實(shí)際應(yīng)用中內(nèi)存管理單元的魯棒性考慮,當(dāng) 內(nèi)存管理單元出現(xiàn)異常時(shí),空閑頁表管理單元在判明內(nèi)存中沒有有效數(shù)據(jù) 后,將重新回到初始狀態(tài)(可以根據(jù)保存數(shù)據(jù)標(biāo)識符的二進(jìn)制向量來判斷 內(nèi)存中是否存在數(shù)據(jù),當(dāng)該向量為全零時(shí),表示內(nèi)存中沒有有效數(shù)據(jù))。 這時(shí),只要復(fù)位計(jì)數(shù)器,并將空閑頁分配模式重置為初始狀態(tài)。整個(gè)過程 可以在單時(shí)鐘周期內(nèi)完成,不會影響整個(gè)系統(tǒng)的正常工作。內(nèi)存分配過程中,由狀態(tài)控制器從空閑頁表中讀出可用的內(nèi)存頁,將 這些內(nèi)存頁寫入到數(shù)據(jù)頁表中。數(shù)據(jù)頁表為SRAM結(jié)構(gòu),并以DataID作為 訪問的基地址進(jìn)行讀寫。當(dāng)數(shù)據(jù)對應(yīng)的內(nèi)存頁全部轉(zhuǎn)移后,分配結(jié)束。內(nèi) 存頁轉(zhuǎn)移時(shí)的時(shí)序圖如圖4所示,其中RdEn為讀取FIFO中的可用內(nèi)存頁 信息的使能信號,而UpdateCEn用于更新計(jì)數(shù)器的值,為下一次轉(zhuǎn)移內(nèi)存 頁做好準(zhǔn)備;WrDataStoreList為數(shù)據(jù)頁表寫使能信號;TransFinish用 于控制內(nèi)存頁轉(zhuǎn)移是否完成;FinePages為空閑內(nèi)存頁的頁號。內(nèi)存中每一部分?jǐn)?shù)據(jù)都有一個(gè)唯一的ID (DataID)與之相對應(yīng)。 DataID用一個(gè)二進(jìn)制數(shù)組來表示(bitmap),每一位代表一個(gè)DataID, DataID的值由其對應(yīng)位在bitmap中的位置譯碼得到。內(nèi)存分配不但要分 配可用的頁,同時(shí)還要分配可用的DataID, DataID通過"首零檢測器"算法得到。首零檢測器的輸入是DataID對應(yīng)的bitmap,輸出為首個(gè)可用 的DataID在bitmap中的位置。DataID的位寬可以根據(jù)應(yīng)用調(diào)整,如當(dāng) 采用4bit表示DataID,則表示系統(tǒng)中可用的DataID總量為24個(gè)。本發(fā)明支持兩種內(nèi)存回收方式顯式和隱式。兩種內(nèi)存回收方式都需 要訪問數(shù)據(jù)頁表和空閑頁表,因此必須處理好兩者訪問公共資源時(shí)的沖突 問題。內(nèi)存的顯式回收由主機(jī)主動(dòng)提出,在數(shù)據(jù)對應(yīng)的倒計(jì)時(shí)器計(jì)時(shí)溢出 之前,主機(jī)發(fā)送指令要求內(nèi)存管理單元回收這一部分?jǐn)?shù)據(jù)所占用的內(nèi)存資 源,指令中需包括要回收的數(shù)據(jù)對應(yīng)的DataID;而內(nèi)存的隱式回收由內(nèi) 存管理單元自動(dòng)完成,不需要主機(jī)參與。當(dāng)內(nèi)存分配單元為一條數(shù)據(jù)成功 分配一塊內(nèi)存時(shí),將啟動(dòng)與該塊數(shù)據(jù)對應(yīng)的一個(gè)倒計(jì)時(shí)器,計(jì)時(shí)的間隔為 l秒,計(jì)時(shí)的初值T0可以由用戶配置,在本發(fā)明的實(shí)施例中T0取4秒。當(dāng)?shù)褂?jì)時(shí)器計(jì)時(shí)到零時(shí),內(nèi)存管理單元在內(nèi)存分配和內(nèi)存顯式回收等任務(wù) 之外,插入一條低優(yōu)先級的任務(wù),在數(shù)據(jù)頁表和空閑頁表都空閑時(shí),將超 時(shí)數(shù)據(jù)對應(yīng)的內(nèi)存資源以隱式的方式回收,其中包括將超時(shí)數(shù)據(jù)塊占用的 內(nèi)存頁從數(shù)據(jù)頁表中依次讀出并寫入空閑頁表中,同時(shí)在所有內(nèi)存頁回收 后,將該塊數(shù)據(jù)占用的數(shù)據(jù)標(biāo)志符對應(yīng)的二進(jìn)制向量位重新復(fù)位,即回收 數(shù)據(jù)標(biāo)識符資源。內(nèi)存隱式回收這一功能由一個(gè)專用的狀態(tài)機(jī)控制其狀態(tài) 的轉(zhuǎn)換,避開數(shù)據(jù)頁表和空閑頁表訪問過程中的沖突問題。本發(fā)明的應(yīng)用環(huán)境中,數(shù)據(jù)是連續(xù)讀寫的,當(dāng)主機(jī)需要訪問內(nèi)存時(shí), 先向內(nèi)存管理單元寫入一條請求讀寫的指令。其中,當(dāng)主機(jī)讀內(nèi)存時(shí),要 在發(fā)出讀請求的同時(shí),指明需要讀取的數(shù)據(jù)所對應(yīng)的數(shù)據(jù)標(biāo)識符;而當(dāng)主 機(jī)需要寫內(nèi)存時(shí),只需發(fā)送寫請求,數(shù)據(jù)所對應(yīng)的標(biāo)識符由內(nèi)存管理單元 自動(dòng)管理,該標(biāo)識符在主機(jī)請求內(nèi)存分配時(shí)由內(nèi)存分配單元分配。讀寫過 程中使用的數(shù)據(jù)標(biāo)識符記為ID。內(nèi)存管理單元在接收到主機(jī)需要訪問內(nèi) 存的指令時(shí),以所訪問數(shù)據(jù)對應(yīng)的數(shù)據(jù)標(biāo)識符為基地址,偏移為零,組合 成一個(gè)新地址,讀取數(shù)據(jù)頁表中數(shù)據(jù)存儲的首個(gè)內(nèi)存頁的頁號,并將該頁 號存入"當(dāng)前頁號"寄存器。其中,地址組合的方式如圖6所示。當(dāng)主機(jī)開始訪問內(nèi)存時(shí),內(nèi)存管理單元截取邏輯地址的低d位,作為物理地址的 低d位,并以"當(dāng)前頁號"寄存器中的值CP為地址的高p位,組合為可 以訪問內(nèi)存的物理地址。同時(shí),當(dāng)主機(jī)訪問的邏輯地址為一頁中的最后一 個(gè)字節(jié)時(shí),內(nèi)存管理單元在同一個(gè)系統(tǒng)周期內(nèi),截取主機(jī)當(dāng)前訪問的邏輯 地址的高P位,將該P(yáng)位的數(shù)據(jù)加1 (記為pl)并與當(dāng)前訪問數(shù)據(jù)的數(shù)據(jù) 標(biāo)識符一起組合成一個(gè)新地址,用該地址讀取數(shù)據(jù)頁表管理單元中的頁 號,并在下一個(gè)系統(tǒng)周期時(shí),將從數(shù)據(jù)頁表中獲得的頁號更新到"當(dāng)前頁 表"寄存器中。其中P定義為W-d, W為內(nèi)存中地址線的寬度,d為邏輯地址的頁內(nèi)偏移,相應(yīng)地,每一片內(nèi)存頁的大小為2"字節(jié)(Byte)。地址 組合的方式如圖6所示。當(dāng)主機(jī)完成對某一塊數(shù)據(jù)的訪問時(shí),需向內(nèi)存管理單元中寫入"結(jié)束 訪問"的指令,內(nèi)存管理單元復(fù)位本次訪問使用的寄存器,并等待主機(jī)的 下一次訪問請求。本發(fā)明在系統(tǒng)中的驗(yàn)證結(jié)果如圖5所示,其中橫坐標(biāo)是系統(tǒng)時(shí)間, 縱坐標(biāo)(左)反映本發(fā)明中可用內(nèi)存頁數(shù)目的實(shí)時(shí)變化,而縱坐標(biāo)(右) 反映本發(fā)明中可用數(shù)據(jù)ID (DataID)數(shù)目的實(shí)時(shí)變化。
權(quán)利要求
1、一種基于非連續(xù)頁的動(dòng)態(tài)內(nèi)存管理方法,包括內(nèi)存分配、內(nèi)存回收和地址映射,其特征在于內(nèi)存分配的方法是基于允許邏輯上相連的數(shù)據(jù)存儲在物理上非連續(xù)的頁中,具體步驟包括a、當(dāng)主機(jī)請求內(nèi)存分配時(shí),內(nèi)存管理單元比較當(dāng)前內(nèi)存的剩余資源和主機(jī)請求的內(nèi)存大小,若空閑頁總量大于主機(jī)請求的內(nèi)存頁總量,并且內(nèi)存管理單元中仍有可用的數(shù)據(jù)標(biāo)志符,則繼續(xù)內(nèi)存分配,否則結(jié)束內(nèi)存分配;如果繼續(xù)內(nèi)存分配,內(nèi)存管理模塊將從存儲DataID信息的二進(jìn)制向量中,用“首零檢測”的方法找到一個(gè)可用的標(biāo)志符,并將該標(biāo)志符分配給這一塊數(shù)據(jù);所述的當(dāng)前內(nèi)存的剩余資源包括空閑頁總量和數(shù)據(jù)標(biāo)志符;b、內(nèi)存管理單元關(guān)閉對新的內(nèi)存分配請求的響應(yīng),內(nèi)存管理單元根據(jù)請求的頁數(shù),從空閑頁表管理單元讀出可用頁的頁號,并寫入到數(shù)據(jù)頁表管理單元中;空閑頁表中的可用頁來自計(jì)數(shù)器或先進(jìn)先出隊(duì)列,由分配模式寄存器中的值來決定,當(dāng)該寄存器中的值為1時(shí),空閑頁表管理單元從計(jì)數(shù)器中獲得可用頁的頁號;當(dāng)該寄存器中的值為0時(shí),從先進(jìn)先出隊(duì)列中獲得頁號;c、如果分配給主機(jī)的所有內(nèi)存頁全部從空閑頁表中轉(zhuǎn)移到數(shù)據(jù)頁表中,則本次內(nèi)存分配完成,內(nèi)存管理單元重新進(jìn)入接收內(nèi)存分配請求的狀態(tài),等待下一次請求;如果分配給主機(jī)的所有內(nèi)存頁沒有完全從空閑頁表中轉(zhuǎn)移到數(shù)據(jù)頁表中,轉(zhuǎn)到步驟b,繼續(xù)進(jìn)行內(nèi)存頁轉(zhuǎn)移;內(nèi)存回收的方法具體步驟包括d、當(dāng)主機(jī)請求內(nèi)存分配時(shí),內(nèi)存管理單元比較當(dāng)前內(nèi)存的剩余資源和主機(jī)請求的內(nèi)存大小,若空閑頁總量大于主機(jī)請求的內(nèi)存頁總量,并且內(nèi)存管理單元中仍有可用的數(shù)據(jù)標(biāo)志符,則內(nèi)存管理單元啟動(dòng)與本次請求對應(yīng)的倒計(jì)時(shí)器,計(jì)數(shù)初值為T0,計(jì)時(shí)步長為1秒,計(jì)時(shí)的時(shí)間基準(zhǔn)由外部輸入;e、如果與本次請求中存儲在內(nèi)存頁的數(shù)據(jù)在倒計(jì)數(shù)器計(jì)數(shù)到零時(shí),內(nèi)存頁中的數(shù)據(jù)仍沒有被回收,則轉(zhuǎn)步驟g;如果與本次請求中存儲在內(nèi)存頁的數(shù)據(jù)在倒計(jì)數(shù)器計(jì)數(shù)到零前,主機(jī)不再使用該內(nèi)存頁中的數(shù)據(jù),向內(nèi)部寄存器寫入回收內(nèi)存的指令,同時(shí)停止倒計(jì)時(shí)器并將其復(fù)位到T0;f、當(dāng)內(nèi)存管理單元的內(nèi)部寄存器接收到顯式回收內(nèi)存的指令時(shí),將指令中數(shù)據(jù)標(biāo)志符對應(yīng)的所有內(nèi)存頁依次從數(shù)據(jù)頁表中讀出,并將其寫入到空閑頁表中,然后轉(zhuǎn)步驟h;讀出和寫入的次數(shù)與該數(shù)據(jù)標(biāo)志符所占用的內(nèi)存頁的總量相同;g、與本次請求中存儲在內(nèi)存頁的數(shù)據(jù)在倒計(jì)數(shù)器計(jì)數(shù)到零時(shí),內(nèi)存頁中的數(shù)據(jù)仍沒有被回收的情況下,如果在數(shù)據(jù)頁表和空閑頁表都空閑時(shí),將超時(shí)的數(shù)據(jù)占用的內(nèi)存頁從數(shù)據(jù)頁表中依次讀出并寫入空閑頁表中,同時(shí)在所有內(nèi)存頁回收后,將該數(shù)據(jù)占用的數(shù)據(jù)標(biāo)志符對應(yīng)的二進(jìn)制向量位重新復(fù)位,即回收數(shù)據(jù)表示符資源;h、內(nèi)存回收結(jié)束;地址映射的方法具體步驟包括i、當(dāng)主機(jī)需要訪問內(nèi)存時(shí),先向內(nèi)存管理單元寫入一條請求讀寫的指令,其中,當(dāng)主機(jī)讀內(nèi)存時(shí),在發(fā)出讀請求的同時(shí),指明需要讀取的數(shù)據(jù)所對應(yīng)的數(shù)據(jù)標(biāo)識符;而當(dāng)主機(jī)需要寫內(nèi)存時(shí),只需發(fā)送寫請求,數(shù)據(jù)所對應(yīng)的標(biāo)識符由內(nèi)存管理單元自動(dòng)管理,該標(biāo)識符在主機(jī)請求內(nèi)存分配時(shí)由內(nèi)存分配單元分配;j、內(nèi)存管理單元在接收到主機(jī)需要訪問內(nèi)存的指令時(shí),以所訪問數(shù)據(jù)對應(yīng)的數(shù)據(jù)標(biāo)識符為基地址,偏移為零,組合成一個(gè)新地址,讀取數(shù)據(jù)頁表中數(shù)據(jù)存儲的首個(gè)內(nèi)存頁的頁號,并將該頁號存入“當(dāng)前頁號”寄存器;k、當(dāng)主機(jī)開始訪問內(nèi)存時(shí),內(nèi)存管理單元截取邏輯地址的低d位,作為物理地址的低d位,并以“當(dāng)前頁號”寄存器中的值為地址的高p位,組合為可以訪問內(nèi)存的物理地址,若主機(jī)訪問的邏輯地址不是一頁中的最后一個(gè)字節(jié),則轉(zhuǎn)步驟1;若主機(jī)訪問的邏輯地址為一頁中的最后一個(gè)字節(jié),內(nèi)存管理單元在同一個(gè)系統(tǒng)周期內(nèi),截取主機(jī)當(dāng)前訪問的邏輯地址的高p位,將該p位的數(shù)據(jù)加1并與當(dāng)前訪問數(shù)據(jù)的數(shù)據(jù)標(biāo)識符一起組合成一個(gè)新地址,用該地址讀取數(shù)據(jù)頁表管理單元中的頁號,并在下一個(gè)系統(tǒng)周期時(shí),將從數(shù)據(jù)頁表中獲得的頁號更新到“當(dāng)前頁表”寄存器中;l、若主機(jī)訪問內(nèi)存結(jié)束,則向內(nèi)存管理單元中寫入“結(jié)束訪問”的指令,內(nèi)存管理單元復(fù)位“當(dāng)前頁表”寄存器,并等待主機(jī)的下一次訪問請求;若主機(jī)還需訪問內(nèi)存,則轉(zhuǎn)步驟k,繼續(xù)內(nèi)存訪問的過程。
全文摘要
本發(fā)明涉及一種動(dòng)態(tài)內(nèi)存管理方法。目前的內(nèi)存管理方法影響內(nèi)存的利用率和實(shí)時(shí)性。本發(fā)明的動(dòng)態(tài)內(nèi)存管理方法包括內(nèi)存分配、內(nèi)存回收和地址映射,具體是將內(nèi)存單元分割為大小相同的內(nèi)存頁,允許邏輯上相連的數(shù)據(jù)存儲在物理上不相連的內(nèi)存頁中。本發(fā)明采用計(jì)數(shù)器和FIFO相結(jié)合的方式管理內(nèi)存頁,使得內(nèi)存分配和回收更加靈活,并消除了內(nèi)存分配過程中的外部碎片問題,提高了內(nèi)存的利用率,同時(shí)內(nèi)存的分配和回收具有實(shí)時(shí)性和可預(yù)測性的特點(diǎn)。
文檔編號G06F12/02GK101231619SQ20081005986
公開日2008年7月30日 申請日期2008年2月22日 優(yōu)先權(quán)日2008年2月22日
發(fā)明者廉玉平, 艷 張, 陳金龍, 霍明旭, 雁 韓 申請人:浙江大學(xué)