專利名稱:一種內(nèi)存存取方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明關(guān)于計(jì)算機(jī)內(nèi)存管理技術(shù),特別是關(guān)于計(jì)算機(jī)外設(shè)硬件驅(qū)動(dòng)程序的 連續(xù)內(nèi)存塊的內(nèi)存管理技術(shù),具體的講是一種內(nèi)存存取方法及裝置。
背景技術(shù):
在現(xiàn)有技術(shù)中,計(jì)算機(jī)外設(shè)硬件需要通過(guò)直接內(nèi)存存取(DMA)方式與海 量?jī)?nèi)存交互數(shù)據(jù)。操作系統(tǒng)采用基于頁(yè)面的方式來(lái)管理內(nèi)存,在系統(tǒng)運(yùn)行一段 時(shí)間后會(huì)出現(xiàn)內(nèi)存碎片,這樣就無(wú)法直接分配得到滿足交互數(shù)據(jù)要求的連續(xù)物 理內(nèi)存。
如圖1所示,為現(xiàn)有技術(shù)的內(nèi)存存取技術(shù)方案之一。如果外設(shè)硬件驅(qū)動(dòng)程序 需要一塊1G大小的連續(xù)物理內(nèi)存作為外設(shè)硬件與系統(tǒng)的交互數(shù)據(jù)內(nèi)存,物理頁(yè) 面大小為4K,那么可直接從系統(tǒng)中分配一塊1G的連續(xù)物理內(nèi)存,并由系統(tǒng)告訴 外設(shè)硬件這塊連續(xù)物理內(nèi)存的基地址和長(zhǎng)度,外設(shè)硬件即可與這塊內(nèi)存進(jìn)行數(shù) 據(jù)交互。
這種內(nèi)存存取方式雖然提供了一種最為簡(jiǎn)單的外設(shè)硬件直接內(nèi)存存取的方 法,但是采用該方法進(jìn)行數(shù)據(jù)交互時(shí),外設(shè)硬件一次傳輸?shù)膬?nèi)容將受限于系統(tǒng) 連續(xù)物理內(nèi)存的大小。就圖l所示的實(shí)例而言,系統(tǒng)必須存在一塊空閑的1G或 大于1G的連續(xù)物理內(nèi)存,否則外設(shè)硬件與系統(tǒng)的交互數(shù)據(jù)將無(wú)法進(jìn)行。
如圖2所示,為現(xiàn)有技術(shù)的內(nèi)存存取技術(shù)方案之二。如果外設(shè)硬件驅(qū)動(dòng)程序 需要一塊1G大小的連續(xù)物理內(nèi)存作為外設(shè)硬件與系統(tǒng)的交互數(shù)據(jù)內(nèi)存,系統(tǒng)最 大連續(xù)物理內(nèi)存為2M,物理頁(yè)面大小為4K,那么可先從系統(tǒng)中分配一塊2M的 連續(xù)物理內(nèi)存,用于存儲(chǔ)一組指針,每個(gè)指針指向一塊獨(dú)立的連續(xù)物理內(nèi)存, 這些獨(dú)立的連續(xù)物理內(nèi)存大小相同, 一般可為一個(gè)頁(yè)面大小,這些獨(dú)立的連續(xù)物理內(nèi)存之和大于或等于1G,并由系統(tǒng)告訴外設(shè)硬件用于存儲(chǔ)指針的那塊連續(xù) 物理內(nèi)存的地址和內(nèi)存長(zhǎng)度。外設(shè)硬件通過(guò)讀取指針的內(nèi)容,獲取到對(duì)應(yīng)的獨(dú) 立連續(xù)物理內(nèi)存的地址,即可與這塊獨(dú)立連續(xù)物理內(nèi)存進(jìn)行交互數(shù)據(jù)。這種方 式通過(guò)指針與獨(dú)立連續(xù)物理內(nèi)存的映射關(guān)系來(lái)實(shí)現(xiàn),指針與獨(dú)立連續(xù)物理內(nèi)存 的映射關(guān)系可被稱作線性描述符表。
這種方式雖然減小了對(duì)系統(tǒng)連續(xù)物理內(nèi)存的需求,但是對(duì)存儲(chǔ)指針(線性 描述符表)的連續(xù)物理內(nèi)存的需求仍然很高。就圖2所示的實(shí)例而言,系統(tǒng)必須
存在一塊空閑的2M或大于2M的連續(xù)物理內(nèi)存以存儲(chǔ)線性描述符表,否則外設(shè) 硬件與系統(tǒng)的交互數(shù)據(jù)將無(wú)法進(jìn)行。
中國(guó)發(fā)明專利03115874.9公開(kāi)了一種靜態(tài)內(nèi)存管理方法,該發(fā)明專利所公 開(kāi)的技術(shù)方案被合并于此,以作為本發(fā)明的現(xiàn)有技術(shù)。
中國(guó)發(fā)明專利申請(qǐng)200610099137.2公開(kāi)了一種微電腦系統(tǒng)的直接內(nèi)存存取 作業(yè)方法,該發(fā)明所公開(kāi)的技術(shù)方案被合并于此,以作為本發(fā)明的現(xiàn)有技術(shù)。
發(fā)明內(nèi)容
本發(fā)明提供一種內(nèi)存存取方法及裝置,通過(guò)多級(jí)非線性的內(nèi)存描述機(jī)制使 系統(tǒng)與外設(shè)硬件之間進(jìn)行數(shù)據(jù)交互,在無(wú)需大量的系統(tǒng)連續(xù)物理內(nèi)存的情況下, 仍可使系統(tǒng)與外設(shè)硬件之間進(jìn)行海量數(shù)據(jù)交互。
本發(fā)明的目的之一是提供一種內(nèi)存存取方法,所述的方法包括獲取外設(shè) 硬件的物理內(nèi)存需求;根據(jù)所述外設(shè)硬件的物理內(nèi)存需求,為所述外設(shè)硬件分配
多塊連續(xù)物理內(nèi)存;根據(jù)為所述外設(shè)硬件分配的多塊連續(xù)物理內(nèi)存,建立至少 包含最高級(jí)和最低級(jí)的多級(jí)內(nèi)存描述表,每級(jí)內(nèi)存描述表存儲(chǔ)了下一級(jí)內(nèi)存描 述表的地址和內(nèi)存長(zhǎng)度,最低級(jí)內(nèi)存描述表存儲(chǔ)了為所述外設(shè)硬件分配的多塊 連續(xù)物理內(nèi)存的地址和長(zhǎng)度;將所述最高級(jí)內(nèi)存描述表存儲(chǔ)的下一級(jí)內(nèi)存描述
表的地址和內(nèi)存長(zhǎng)度傳給所述外設(shè)硬件,所述外設(shè)硬件根據(jù)所述多級(jí)內(nèi)存描述 表到達(dá)為其分配的多塊連續(xù)物理內(nèi)存,并利用所述多塊連續(xù)物理內(nèi)存進(jìn)行數(shù)據(jù) 存取。本發(fā)明的目的之二是提供一種內(nèi)存存取裝置,所述的裝置包括內(nèi)存需求 獲取單元,獲取外設(shè)硬件的物理內(nèi)存需求;外設(shè)硬件內(nèi)存分配單元,根據(jù)所述 外設(shè)硬件的物理內(nèi)存需求,為所述外設(shè)硬件分配多塊連續(xù)物理內(nèi)存;內(nèi)存描述 表建立單元,根據(jù)為所述外設(shè)硬件分配的多塊連續(xù)物理內(nèi)存,建立至少包含最 高級(jí)和最低級(jí)的多級(jí)內(nèi)存描述表,每級(jí)內(nèi)存描述表存儲(chǔ)了下一級(jí)內(nèi)存描述表的 地址和內(nèi)存長(zhǎng)度,最低級(jí)內(nèi)存描述表存儲(chǔ)了為所述外設(shè)硬件分配的多塊連續(xù)物 理內(nèi)存的地址和長(zhǎng)度;數(shù)據(jù)交互單元,將所述最高級(jí)內(nèi)存描述表存儲(chǔ)的下一級(jí)
內(nèi)存描述表的地址和內(nèi)存長(zhǎng)度傳給所述外設(shè)硬件,所述外設(shè)硬件根據(jù)所述多級(jí) 內(nèi)存描述表到達(dá)為其分配的多塊連續(xù)物理內(nèi)存,并利用所述多塊連續(xù)物理內(nèi)存 進(jìn)行數(shù)據(jù)存取。
本發(fā)明采用多級(jí)非線性內(nèi)存描述表結(jié)構(gòu),使系統(tǒng)對(duì)外設(shè)硬件進(jìn)行內(nèi)存分配 不再受限于系統(tǒng)中最大連續(xù)物理內(nèi)存。特別是當(dāng)操作系統(tǒng)運(yùn)行一段時(shí)間之后內(nèi) 存碎片不斷增加時(shí),同樣能夠?yàn)橥庠O(shè)硬件分配到所需的物理內(nèi)存,只需要將最 高級(jí)表的地址和長(zhǎng)度告知外設(shè)硬件,就能通過(guò)該多級(jí)非線性表到達(dá)為該外設(shè)硬 件分配的連續(xù)物理內(nèi)存。該方案還能夠通過(guò)擴(kuò)展該非線性表的級(jí)數(shù)來(lái)實(shí)現(xiàn)海量 內(nèi)存的存取,為將來(lái)滿足硬件設(shè)備對(duì)內(nèi)存的更高要求做好準(zhǔn)備。
圖l為現(xiàn)有技術(shù)中內(nèi)存存取原理圖之一;
圖2為現(xiàn)有技術(shù)中內(nèi)存存取原理圖之二;
圖3為本發(fā)明實(shí)施例的系統(tǒng)原理圖4本發(fā)明實(shí)施例內(nèi)存存取裝置的細(xì)化結(jié)構(gòu)圖5本發(fā)明實(shí)施例1的內(nèi)存存取裝置的細(xì)化結(jié)構(gòu)圖6為本發(fā)明實(shí)施例1的外設(shè)硬件等長(zhǎng)內(nèi)存分配單元的細(xì)化結(jié)構(gòu)圖7為本發(fā)明實(shí)施例1的一種多級(jí)內(nèi)存描述原理圖8為本發(fā)明實(shí)施例1的內(nèi)存存取裝置的工作方法流程圖; 圖9本發(fā)明實(shí)施例2的內(nèi)存存取裝置的細(xì)化結(jié)構(gòu)圖;圖10為本發(fā)明實(shí)施例2的外設(shè)硬件組合內(nèi)存分配單元的細(xì)化結(jié)構(gòu)圖11為本發(fā)明實(shí)施例2的一種多級(jí)內(nèi)存描述原理圖12為本發(fā)明實(shí)施例2的另一種多級(jí)內(nèi)存描述原理圖13為本發(fā)明實(shí)施例2的內(nèi)存存取裝置的工作方法流程圖14為本發(fā)明實(shí)施例一種通用的多級(jí)非線性內(nèi)存描述原理圖。
具體實(shí)施例方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,下面結(jié)合實(shí)施方式和 附圖,對(duì)本發(fā)明做進(jìn)一步詳細(xì)說(shuō)明。在此,本發(fā)明的示意性實(shí)施方式及其說(shuō)明 用于解釋本發(fā)明,但并不作為對(duì)本發(fā)明的限定。
圖3為本發(fā)明實(shí)施例的系統(tǒng)原理圖,如圖所示,內(nèi)存存取裝置301連接外設(shè) 硬件302和物理內(nèi)存303,內(nèi)存存取裝置301為外設(shè)硬件302分配所需的物理內(nèi)存, 所需的物理內(nèi)存由多塊連續(xù)物理內(nèi)存組成,此外內(nèi)存存取裝置301還負(fù)責(zé)將這些 連續(xù)物理內(nèi)存的地址告知外設(shè)硬件302,外設(shè)硬件302通過(guò)訪問(wèn)這些連續(xù)物理內(nèi) 存實(shí)現(xiàn)與系統(tǒng)的數(shù)據(jù)交換。該系統(tǒng)還包括微處理器304,連接內(nèi)存存取裝置301, 它主要完成系統(tǒng)的核心控制功能。
圖4為本發(fā)明實(shí)施例內(nèi)存存取裝置301的細(xì)化結(jié)構(gòu)圖。如圖所示,內(nèi)存存取 裝置301包括內(nèi)存需求獲取單元3011,連接外設(shè)硬件302,獲取外設(shè)硬件的物 理內(nèi)存需求;外設(shè)硬件內(nèi)存分配單元3012,根據(jù)所述外設(shè)硬件的物理內(nèi)存需求, 從物理內(nèi)存303中為所述外設(shè)硬件分配多塊連續(xù)物理內(nèi)存3031,這些連續(xù)物理內(nèi) 存塊包括MO、 Ml,, Mn;內(nèi)存描述表建立單元3013,根據(jù)為所述外設(shè)硬件 分配的多塊連續(xù)物理內(nèi)存3031 ,在物理內(nèi)存303中建立至少包含最高級(jí)和最低級(jí) 的多級(jí)內(nèi)存描述表3032,每級(jí)內(nèi)存描述表存儲(chǔ)了下一級(jí)內(nèi)存描述表的地址和內(nèi) 存長(zhǎng)度,最低級(jí)內(nèi)存描述表存儲(chǔ)了為所述外設(shè)硬件分配的多塊連續(xù)物理內(nèi)存 3031的地址和長(zhǎng)度;數(shù)據(jù)交互單元3014,將所述最高級(jí)內(nèi)存描述表存儲(chǔ)的下一 級(jí)內(nèi)存描述表的地址和內(nèi)存長(zhǎng)度傳給所述外設(shè)硬件302,所述外設(shè)硬件302根據(jù) 所述多級(jí)內(nèi)存描述表3032到達(dá)為其分配的多塊連續(xù)物理內(nèi)存3031,并利用所述
9多塊連續(xù)物理內(nèi)存303 1進(jìn)行數(shù)據(jù)存取。
下面以外設(shè)硬件的物理內(nèi)存需求為1G的情況,詳細(xì)說(shuō)明本發(fā)明的具體實(shí)施
方式
實(shí)施例l:
圖5為本實(shí)施例內(nèi)存存取裝置301的細(xì)化結(jié)構(gòu)圖,為了實(shí)施方便,本實(shí)施例
的外設(shè)硬件內(nèi)存分配單元3012為外設(shè)硬件等長(zhǎng)內(nèi)存分配單元501,用于為所述外
設(shè)硬件分配相同長(zhǎng)度的多塊連續(xù)物理內(nèi)存,所述相同長(zhǎng)度的多塊連續(xù)物理內(nèi)存 的長(zhǎng)度之和大于或等于所述外設(shè)硬件的物理內(nèi)存需求。如圖5所示,M0,M1,..., Mn可以為相同長(zhǎng)度的連續(xù)物理內(nèi)存,在本實(shí)施例中,外設(shè)硬件所需的1G物理內(nèi) 存可以由1024個(gè)1M的連續(xù)物理內(nèi)存組成,或由2048個(gè)512K的連續(xù)物理內(nèi)存組 成,或由4096個(gè)256K的連續(xù)物理內(nèi)存組成,或由8192個(gè)128K的連續(xù)物理內(nèi)存組 合而成。
由于系統(tǒng)運(yùn)行一段時(shí)間后,大塊的物理內(nèi)存較少而小塊的物理內(nèi)存較多, 要求一次性分配多個(gè)較大的連續(xù)物理內(nèi)存往往會(huì)失敗,這就是內(nèi)存碎片現(xiàn)象。 本實(shí)施例中為外設(shè)硬件優(yōu)先分配較大的物理內(nèi)存,如果較大的連續(xù)物理內(nèi)存不 能滿足需要,則重新嘗試分配較小的連續(xù)物理內(nèi)存,直到多個(gè)連續(xù)物理內(nèi)存之 和大于等于外設(shè)硬件所需的物理內(nèi)存為止。
圖6為本實(shí)施例外設(shè)硬件等長(zhǎng)內(nèi)存分配單元501的細(xì)化結(jié)構(gòu)圖,如圖所示, 外設(shè)硬件等長(zhǎng)內(nèi)存分配單元501包括內(nèi)存長(zhǎng)度排序單元5011和等長(zhǎng)內(nèi)存分配單 元5012。內(nèi)存長(zhǎng)度排序單元5011,按照連續(xù)物理內(nèi)存長(zhǎng)度由大到小的順序進(jìn)行 排序,如可以按照1M-512K-256K-128K等進(jìn)行排序;等長(zhǎng)內(nèi)存分配單元5012, 如果最大長(zhǎng)度的多塊連續(xù)物理內(nèi)存之和大于或等于所述外設(shè)硬件的物理內(nèi)存需 求,則將最大長(zhǎng)度的多塊連續(xù)物理內(nèi)存分配給所述外設(shè)硬件;如果最大長(zhǎng)度的 多塊連續(xù)物理內(nèi)存之和小于所述外設(shè)硬件的物理內(nèi)存需求,則按照內(nèi)存長(zhǎng)度由 大到小的順序嘗試分配其他長(zhǎng)度的連續(xù)物理內(nèi)存,直到某個(gè)長(zhǎng)度的多塊連續(xù)物 理內(nèi)存之和大于或等于所述外設(shè)硬件的物理內(nèi)存需求,并將該長(zhǎng)度的多塊連續(xù)物理內(nèi)存分配給所述外設(shè)硬件。
在本實(shí)施例中,外設(shè)硬件等長(zhǎng)內(nèi)存分配單元501首先嘗試為外設(shè)硬件分配
1024個(gè)1M的連續(xù)內(nèi)存,如果沒(méi)有這么多個(gè)1M的連續(xù)內(nèi)存,則重新嘗試為外設(shè) 硬件分配2048個(gè)512K的連續(xù)內(nèi)存,如果還是不滿足則繼續(xù)嘗試分配其他更小的 內(nèi)存,直到判斷系統(tǒng)中存在8192個(gè)128K的連續(xù)物理內(nèi)存,則將8192個(gè)128K的連 續(xù)物理內(nèi)存分配給外設(shè)硬件302。
在本實(shí)施例中,內(nèi)存描述表建立單元3013首先根據(jù)多個(gè)連續(xù)物理內(nèi)存3031 建立最低級(jí)內(nèi)存描述表,由于最低級(jí)內(nèi)存描述表必須指向8192個(gè)128K的連續(xù)物 理內(nèi)存,因此必須包含8192個(gè)指針以及8192個(gè)內(nèi)存長(zhǎng)度(128K),對(duì)于64bit的 系統(tǒng),存放指針的內(nèi)存以及存放長(zhǎng)度的內(nèi)存都為8字節(jié),這樣對(duì)于最低級(jí)內(nèi)存描 述表就需要8192 X 8 X 2428K物理內(nèi)存來(lái)存放最低級(jí)內(nèi)存描述表。
內(nèi)存描述表建立單元3013進(jìn)一步包括描述表內(nèi)存分配單元(圖中未示), 本實(shí)施例中的描述表內(nèi)存分配單元,用于為每級(jí)內(nèi)存描述表分配相同長(zhǎng)度的至 少一塊連續(xù)物理內(nèi)存。當(dāng)確定了最低級(jí)內(nèi)存描述表需要128K的物理內(nèi)存后,首 先嘗試為最低級(jí)內(nèi)存描述表分配128K的連續(xù)物理內(nèi)存,如果系統(tǒng)中沒(méi)有128K的 連續(xù)物理內(nèi)存,則可以嘗試分配2塊64K的連續(xù)物理內(nèi)存,依次下去,直到多塊 連續(xù)物理內(nèi)存之和大于等于128K為止。假設(shè)在本實(shí)施例中,不存在一塊連續(xù)的 128K的連續(xù)物理內(nèi)存,而是存在2塊64K的連續(xù)物理內(nèi)存,則將這兩塊64K的連 續(xù)物理內(nèi)存分配最低級(jí)內(nèi)存描述表。
然后,內(nèi)存描述表建立單元3013根據(jù)最低級(jí)內(nèi)存描述表建立次低級(jí)內(nèi)存描 述表,該次低級(jí)內(nèi)存描述表需要包含2個(gè)指針來(lái)指向2塊64K的內(nèi)存,因此必須 包含2個(gè)指針以及2個(gè)內(nèi)存長(zhǎng)度(64K),對(duì)于64bit的系統(tǒng),存放指針的內(nèi)存以 及存放長(zhǎng)度的內(nèi)存都為8字節(jié),這樣就需要2 X 8 X 2=32字節(jié)的連續(xù)物理內(nèi)存來(lái)存 放次最低級(jí)內(nèi)存描述表。 一般情況下,系統(tǒng)中會(huì)存在32字節(jié)的連續(xù)物理內(nèi)存, 因此,此時(shí)的次低級(jí)內(nèi)存描述表就相當(dāng)于最高級(jí)內(nèi)存描述表。圖7為本實(shí)施例的 一種多級(jí)內(nèi)存描述原理圖。
ii本實(shí)施例中當(dāng)外設(shè)硬件所需的物理內(nèi)存為1G,而系統(tǒng)可以提供8192個(gè)128K 的連續(xù)物理內(nèi)存以及2個(gè)64K的連續(xù)物理內(nèi)存時(shí),僅需要最高級(jí)內(nèi)存描述表和最 低級(jí)內(nèi)存描述表就能實(shí)現(xiàn)對(duì)8192個(gè)128K的連續(xù)物理內(nèi)存進(jìn)行描述。數(shù)據(jù)交互單 元3014將最高級(jí)的內(nèi)存描述表傳給外設(shè)硬件302,所述外設(shè)硬件302根據(jù)所述多 級(jí)內(nèi)存描述表3032到達(dá)為其分配的多塊連續(xù)物理內(nèi)存3031,并利用所述多塊連 續(xù)物理內(nèi)存303 l進(jìn)行數(shù)據(jù)存取。
圖8為本實(shí)施例中內(nèi)存存取裝置的工作方法流程圖。以下結(jié)合圖7的內(nèi)存分 配原理圖對(duì)圖8進(jìn)行詳細(xì)描述,如圖所示,
步驟S801,首先確定外設(shè)硬件的物理內(nèi)存需求,如1G。
步驟S802,根據(jù)物理內(nèi)存需求,確定進(jìn)行嘗試分配的內(nèi)存長(zhǎng)度,并按照內(nèi) 存長(zhǎng)度由大到小的順序進(jìn)行排序,如1M-512K-256K-128K等等。
步驟S803和步驟S804,按照設(shè)定的由大的小的順序嘗試為外設(shè)硬件分配連 續(xù)物理內(nèi)存,首先判斷最大長(zhǎng)度的連續(xù)物理內(nèi)存是否滿足需求,即是否存在1024 個(gè)1M的連續(xù)物理內(nèi)存,如果存在1024個(gè)1M的連續(xù)物理內(nèi)存則進(jìn)入步驟S805; 如果不存在則返回步驟S803,繼續(xù)嘗試分配512K的連續(xù)物理內(nèi)存,直到存在某 個(gè)長(zhǎng)度的連續(xù)物理內(nèi)存滿足需求,如存在8192個(gè)128K的連續(xù)物理內(nèi)存,此時(shí)進(jìn) 入步驟S805;
步驟S805,將該長(zhǎng)度的多個(gè)連續(xù)物理內(nèi)存分配給外設(shè)硬件,如將8192個(gè) 128K的連續(xù)物理內(nèi)存分配給外設(shè)硬件。
步驟S806,根據(jù)分配的多個(gè)連續(xù)物理內(nèi)存建立最低級(jí)內(nèi)存描述表。該最低 級(jí)內(nèi)存描述表存儲(chǔ)了為外設(shè)硬件分配的多塊連續(xù)物理內(nèi)存的地址和長(zhǎng)度。如本 實(shí)施例中,該最低級(jí)內(nèi)存描述表存儲(chǔ)了8192個(gè)指針和內(nèi)存長(zhǎng)度,共占用128K。 在本實(shí)施例中,假設(shè)不存在128K的連續(xù)物理內(nèi)存而是存在2塊64K的連續(xù)物理內(nèi) 存,則將這兩塊連續(xù)物理內(nèi)存分配給最低級(jí)內(nèi)存描述表。每個(gè)64K的連續(xù)物理 內(nèi)存包含了4096個(gè)指針和內(nèi)存長(zhǎng)度(128K)。
步驟S807,根據(jù)最低級(jí)內(nèi)存描述表依次建立其上一級(jí)的內(nèi)存描述表,直到建立最高級(jí)內(nèi)存描述表。本實(shí)施例1中,由于最低級(jí)內(nèi)存描述表的上一級(jí)只需要 32字節(jié)的連續(xù)物理內(nèi)存,比較容易得到滿足,因此,最低級(jí)內(nèi)存描述表的上一 級(jí)就是最高級(jí)內(nèi)存描述表。
步驟S808,將最高級(jí)內(nèi)存描述表的內(nèi)容發(fā)給外設(shè)硬件。 步驟S809,外設(shè)硬件通過(guò)多級(jí)內(nèi)存描述表到達(dá)為其分配的連續(xù)物理內(nèi)存, 并與系統(tǒng)進(jìn)行數(shù)據(jù)交互。
實(shí)施例2:
圖9為本實(shí)施例內(nèi)存存取裝置301的細(xì)化結(jié)構(gòu)圖,作為另一種可替代的方式, 本實(shí)施例的外設(shè)硬件內(nèi)存分配單元3012為外設(shè)硬件組合內(nèi)存分配單元901,用于 為外設(shè)硬件分配多種長(zhǎng)度的多塊連續(xù)物理內(nèi)存,所述多種長(zhǎng)度的多塊連續(xù)物理 內(nèi)存的長(zhǎng)度之和大于或等于所述外設(shè)硬件的物理內(nèi)存需求。如圖5所示,MO, Ml, ..., Mn可以為多種長(zhǎng)度的連續(xù)物理內(nèi)存,在本實(shí)施例中,外設(shè)硬件所需 的1G物理內(nèi)存可以由1024個(gè)256K連續(xù)物理內(nèi)存、2048個(gè)128K的連續(xù)物理內(nèi)存、 4096個(gè)64K的連續(xù)物理內(nèi)存,以及8192個(gè)32K的連續(xù)物理內(nèi)存組合而成。
由于系統(tǒng)運(yùn)行一段時(shí)間后,大塊的物理內(nèi)存較少而小塊的物理內(nèi)存較多, 要求一次性分配多個(gè)較大的連續(xù)物理內(nèi)存往往會(huì)失敗,這就是內(nèi)存碎片現(xiàn)象。 本實(shí)施例中為外設(shè)硬件優(yōu)先分配較大的物理內(nèi)存,如果較大的連續(xù)物理內(nèi)存不 能滿足需求,則將相差的部分用較小的連續(xù)物理內(nèi)存來(lái)替代,直到各種長(zhǎng)度的 多塊連續(xù)物理內(nèi)存的長(zhǎng)度之和大于或等于所述外設(shè)硬件需要的物理內(nèi)存。
圖10為本實(shí)施例外設(shè)硬件組合內(nèi)存分配單元901的細(xì)化結(jié)構(gòu)圖,如圖所示, 外設(shè)硬件組合內(nèi)存分配單元901包括內(nèi)存長(zhǎng)度排序單元9011和組合內(nèi)存分配單 元9012。內(nèi)存長(zhǎng)度排序單元9011,按照連續(xù)物理內(nèi)存長(zhǎng)度由大到小的順序進(jìn)行 排序,如可以按照256K-128K-64K-32K等進(jìn)行排序;組合內(nèi)存分配單元9012, 如果最大長(zhǎng)度的多塊連續(xù)物理內(nèi)存之和大于或等于所述外設(shè)硬件的物理內(nèi)存需 求,則將最大長(zhǎng)度的多塊連續(xù)物理內(nèi)存分配給所述外設(shè)硬件;如果最大長(zhǎng)度的 多塊連續(xù)物理內(nèi)存之和小于所述外設(shè)硬件的物理內(nèi)存需求,則按照內(nèi)存長(zhǎng)度由大到小的順序嘗試分配其他長(zhǎng)度的連續(xù)物理內(nèi)存,直到所分配的多種長(zhǎng)度的多 塊連續(xù)物理內(nèi)存之和大于或等于所述外設(shè)硬件的物理內(nèi)存需求,并將所述多種 長(zhǎng)度的多塊連續(xù)物理內(nèi)存分配給所述外設(shè)硬件。
在本實(shí)施例中,外設(shè)硬件組合內(nèi)存分配單元901首先嘗試為外設(shè)硬件分配
256K的連續(xù)內(nèi)存,假設(shè)系統(tǒng)中只存在1024個(gè)256K的連續(xù)物理內(nèi)存,則將剩下的 內(nèi)存需求由其他更小的連續(xù)物理內(nèi)存來(lái)替代,如,系統(tǒng)中還存在2048個(gè)128K的 連續(xù)物理內(nèi)存、4096個(gè)64K的連續(xù)物理內(nèi)存以及8192個(gè)32K的連續(xù)物理內(nèi)存,由 于這四種長(zhǎng)度的多塊連續(xù)物理內(nèi)存之和為1G,因此將上述這四種長(zhǎng)度的多塊連 續(xù)物理內(nèi)存的組合(1024X256K+2048X128K+4096X64K+8192X32K=1G)分 配給外設(shè)硬件以滿足其1G的物理內(nèi)存需求。
在本實(shí)施例中,內(nèi)存描述表建立單元3013首先根據(jù)多個(gè)連續(xù)物理內(nèi)存3031 建立最低級(jí)內(nèi)存描述表,由于最低級(jí)內(nèi)存描述表必須指向1024個(gè)256K的連續(xù)物 理內(nèi)存、2048個(gè)128K的連續(xù)物理內(nèi)存、4096個(gè)64K的連續(xù)物理內(nèi)存以及8192個(gè) 32K的連續(xù)物理內(nèi)存,因此必須包含1024+2048+4096+8192=15360個(gè)指針以分別 指向這些連續(xù)物理內(nèi)存,對(duì)于64bit的系統(tǒng),存放指針的內(nèi)存以及存放長(zhǎng)度的內(nèi) 存都為8字節(jié),這樣對(duì)于最低級(jí)內(nèi)存描述表就需要(1024+2048+4096+8192) X (8+8) =2401的物理內(nèi)存來(lái)存放最低級(jí)內(nèi)存描述表。
內(nèi)存描述表建立單元3013進(jìn)一步包括描述表內(nèi)存分配單元(圖中未示), 用于為每級(jí)內(nèi)存描述表分配相同長(zhǎng)度的至少一塊連續(xù)物理內(nèi)存,或?yàn)槊考?jí)內(nèi)存 描述表分配多種長(zhǎng)度的多塊連續(xù)物理內(nèi)存。如果系統(tǒng)中存在一塊240K的連續(xù)物 理內(nèi)存,則可以將該240K的連續(xù)物理內(nèi)存分配給最低級(jí)內(nèi)存描述表,如果不存 在,則本實(shí)施例中的描述表內(nèi)存分配單元,可為最低級(jí)內(nèi)存描述表分配多種長(zhǎng) 度的多塊連續(xù)物理內(nèi)存。
如本實(shí)施例中的最低級(jí)內(nèi)存描述表存儲(chǔ)于4塊連續(xù)物理內(nèi)存,每塊連續(xù)物理 內(nèi)存存儲(chǔ)了指向4種不同長(zhǎng)度的連續(xù)物理內(nèi)存的指針以及內(nèi)存長(zhǎng)度。其中第一 塊連續(xù)物理內(nèi)存包含1024個(gè)指針指向256K的連續(xù)物理內(nèi)存,該連續(xù)物理內(nèi)存為16K;第二塊連續(xù)物理內(nèi)存包含2048個(gè)指針指向128K的連續(xù)物理內(nèi)存,該連續(xù) 物理內(nèi)存為32K;第三塊連續(xù)物理內(nèi)存包含4096個(gè)指針指向64K的連續(xù)物理內(nèi) 存,該連續(xù)物理內(nèi)存為64K;第四塊連續(xù)物理內(nèi)存包含8192個(gè)指針指向32K的連 續(xù)物理內(nèi)存,該連續(xù)物理內(nèi)存為128K。
然后,內(nèi)存描述表建立單元3013根據(jù)最低級(jí)內(nèi)存描述表建立次低級(jí)內(nèi)存描 述表,該次低級(jí)內(nèi)存描述表需要包含4個(gè)指針來(lái)指向這4塊連續(xù)物理內(nèi)存,因此 必須包含4個(gè)指針以及4個(gè)內(nèi)存長(zhǎng)度,對(duì)于64bit的系統(tǒng),存放指針的內(nèi)存以及存 放長(zhǎng)度的內(nèi)存都為8字節(jié),這樣就需要4X8X2二64字節(jié)的連續(xù)物理內(nèi)存來(lái)存放次 最低級(jí)內(nèi)存描述表。 一般情況下,系統(tǒng)中會(huì)存在64字節(jié)的連續(xù)物理內(nèi)存,因此, 此時(shí)的次低級(jí)內(nèi)存描述表就相當(dāng)于最高級(jí)內(nèi)存描述表。
圖ll為本實(shí)施例的一種多級(jí)內(nèi)存描述原理圖。該圖中,系統(tǒng)中存在一塊 240K的連續(xù)物理內(nèi)存來(lái)存放最低級(jí)內(nèi)存描述表,因此該最低級(jí)內(nèi)存描述表就是 最高級(jí)內(nèi)存描述表。圖12為本實(shí)施例的另一種多級(jí)內(nèi)存描述原理圖,該圖中, 最低級(jí)內(nèi)存描述表存儲(chǔ)于4塊連續(xù)物理內(nèi)存,每塊連續(xù)物理內(nèi)存的指針?lè)謩e指向 長(zhǎng)度為256K、 128K、 64K以及32K的連續(xù)物理內(nèi)存。
本實(shí)施例中當(dāng)外設(shè)硬件所需的物理內(nèi)存為1G時(shí),系統(tǒng)可以提供1024個(gè)256K 的連續(xù)物理內(nèi)存、2048個(gè)128K的連續(xù)物理內(nèi)存、4096個(gè)64K的連續(xù)物理內(nèi)存以 及8192個(gè)32K的連續(xù)物理內(nèi)存的組合來(lái)共同提供1G的物理內(nèi)存給外設(shè)硬件。同 時(shí),系統(tǒng)還提供16K的連續(xù)物理內(nèi)存用于存放1024個(gè)指針和內(nèi)存長(zhǎng)度、32K的連 續(xù)物理內(nèi)存用于存放2048個(gè)指針和內(nèi)存長(zhǎng)度、64K的連續(xù)物理內(nèi)存用于存放 4096個(gè)指針和內(nèi)存長(zhǎng)度,以及128K的連續(xù)物理內(nèi)存用于存放8192個(gè)指針和內(nèi)存 長(zhǎng)度。以上16K+32K+64K+128K^240K的物理內(nèi)存即存儲(chǔ)了最低級(jí)內(nèi)存描述表。 此外,還需要用64字節(jié)的連續(xù)物理內(nèi)存存儲(chǔ)最高級(jí)內(nèi)存描述表。
數(shù)據(jù)交互單元3014將最高級(jí)的內(nèi)存描述表傳給外設(shè)硬件302,所述外設(shè)硬件 302根據(jù)所述多級(jí)內(nèi)存描述表3032到達(dá)為其分配的多塊連續(xù)物理內(nèi)存3031,并利 用所述多塊連續(xù)物理內(nèi)存303 l進(jìn)行數(shù)據(jù)存取。圖13為本實(shí)施例中內(nèi)存存取裝置的工作方法流程圖。以下結(jié)合圖12的內(nèi)存
分配原理圖對(duì)圖13進(jìn)行詳細(xì)描述,如圖所示,
步驟S1301,首先確定外設(shè)硬件的物理內(nèi)存需求,如1G。 步驟S1302,根據(jù)物理內(nèi)存需求,確定進(jìn)行嘗試分配的內(nèi)存長(zhǎng)度,并按照內(nèi) 存長(zhǎng)度由大到小的順序進(jìn)行排序,如256K-128K-64K-32K等等。
步驟S1303和步驟S1304,按照設(shè)定的由大的小的順序嘗試為外設(shè)硬件分配 連續(xù)物理內(nèi)存,直到多種長(zhǎng)度的連續(xù)物理內(nèi)存之和滿足外設(shè)硬件的物理內(nèi)存需 求。首先分配最大的連續(xù)物理內(nèi)存256K,由于系統(tǒng)中只存在1024個(gè)256K因此不 滿足需求,繼續(xù)分配128K的連續(xù)物理內(nèi)存,由于系統(tǒng)中只存在2048個(gè)128K的連 續(xù)物理內(nèi)存,兩者之和還是不足1G,因此繼續(xù)分配64K的連續(xù)物理內(nèi)存,由于 系統(tǒng)中只存在4096個(gè)64K的連續(xù)物理內(nèi)存,還是不滿足需求,直到分配完8192 個(gè)32K的連續(xù)物理內(nèi)存之后,這4種長(zhǎng)度的連續(xù)物理內(nèi)存之和等于1G,滿足了外 設(shè)硬件的需求。內(nèi)存分配成功,進(jìn)入步驟S1305。
步驟S1305,將多種長(zhǎng)度的多個(gè)連續(xù)物理內(nèi)存分配給外設(shè)硬件,g卩,將1024 個(gè)256K、 2048個(gè)128K、 4096個(gè)64K以及8192個(gè)32K連續(xù)物理內(nèi)存分配給外設(shè)硬 件302。
步驟S1306,根據(jù)分配的多個(gè)連續(xù)物理內(nèi)存建立最低級(jí)內(nèi)存描述表。該最低 級(jí)內(nèi)存描述表存儲(chǔ)了為外設(shè)硬件分配的多塊連續(xù)物理內(nèi)存的地址和長(zhǎng)度。如本 實(shí)施例中,該最低級(jí)內(nèi)存描述表存儲(chǔ)了 1024+2048+4096+8192個(gè)連續(xù)物理內(nèi)存的 指針以及內(nèi)存長(zhǎng)度,共占用240K。在本實(shí)施例中,假設(shè)不存在240K的連^^物理 內(nèi)存而是分別存在4塊連續(xù)物理內(nèi)存,每塊連續(xù)物理內(nèi)存分別存儲(chǔ)了以上4種長(zhǎng) 度的連續(xù)物理內(nèi)存的指針和內(nèi)存長(zhǎng)度。則將這4塊連續(xù)物理內(nèi)存分配給最低級(jí)內(nèi) 存描述表。如圖12所示,這4塊連續(xù)物理內(nèi)存的長(zhǎng)度分別為16K、 32K、 64K和 128K。
步驟S1307,根據(jù)最低級(jí)內(nèi)存描述表依次建立其上一級(jí)的內(nèi)存描述表,直到 建立最高級(jí)內(nèi)存描述表。本實(shí)施例中,由于最低級(jí)內(nèi)存描述表的上一級(jí)只需要64字節(jié)的連續(xù)物理內(nèi)存,比較容易得到滿足,因此,最低級(jí)內(nèi)存描述表的上一 級(jí)就是最高級(jí)內(nèi)存描述表。
步驟S 1308,將最高級(jí)內(nèi)存描述表的內(nèi)容發(fā)給外設(shè)硬件。 步驟S1309,外設(shè)硬件通過(guò)多級(jí)內(nèi)存描述表到達(dá)為其分配的連續(xù)物理內(nèi)存, 并與系統(tǒng)進(jìn)行數(shù)據(jù)交互。
圖14為本發(fā)明實(shí)施例的一種通用的多級(jí)非線性內(nèi)存描述表結(jié)構(gòu)。 本發(fā)明實(shí)施例采用多級(jí)非線性內(nèi)存描述表結(jié)構(gòu),使系統(tǒng)對(duì)外設(shè)硬件進(jìn)行內(nèi) 存分配不再受限于系統(tǒng)中最大連續(xù)物理內(nèi)存。特別是當(dāng)操作系統(tǒng)運(yùn)行一段時(shí)間 之后內(nèi)存碎片不斷增加時(shí),同樣能夠?yàn)橥庠O(shè)硬件分配到所需的物理內(nèi)存,只需 要將最高級(jí)內(nèi)存描述表存儲(chǔ)的地址和長(zhǎng)度告知外設(shè)硬件,就能通過(guò)該多級(jí)非線 性表到達(dá)為該外設(shè)硬件分配的連續(xù)物理內(nèi)存。該方案還能夠通過(guò)擴(kuò)展該非線性 表的級(jí)數(shù)來(lái)實(shí)現(xiàn)海量?jī)?nèi)存的存取,為將來(lái)滿足硬件設(shè)備對(duì)內(nèi)存的更高要求做好 準(zhǔn)備。
以上所述的具體實(shí)施方式
,對(duì)本發(fā)明的目的、技術(shù)方案和有益效果進(jìn)行了 進(jìn)一步詳細(xì)說(shuō)明,所應(yīng)理解的是,以上所述僅為本發(fā)明的具體實(shí)施方式
而已, 并不用于限定本發(fā)明的保護(hù)范圍,凡在本發(fā)明的精神和原則之內(nèi),所做的任何 修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1. 一種內(nèi)存存取方法,其特征是,所述的方法包括獲取外設(shè)硬件的物理內(nèi)存需求;根據(jù)所述外設(shè)硬件的物理內(nèi)存需求,為所述外設(shè)硬件分配多塊連續(xù)物理內(nèi)存;根據(jù)為所述外設(shè)硬件分配的多塊連續(xù)物理內(nèi)存,建立至少包含最高級(jí)和最低級(jí)的多級(jí)內(nèi)存描述表,每級(jí)內(nèi)存描述表存儲(chǔ)了下一級(jí)內(nèi)存描述表的地址和內(nèi)存長(zhǎng)度,最低級(jí)內(nèi)存描述表存儲(chǔ)了為所述外設(shè)硬件分配的多塊連續(xù)物理內(nèi)存的地址和長(zhǎng)度;將所述最高級(jí)內(nèi)存描述表存儲(chǔ)的下一級(jí)內(nèi)存描述表的地址和內(nèi)存長(zhǎng)度傳給所述外設(shè)硬件,所述外設(shè)硬件根據(jù)所述多級(jí)內(nèi)存描述表到達(dá)為其分配的多塊連續(xù)物理內(nèi)存,并利用所述多塊連續(xù)物理內(nèi)存進(jìn)行數(shù)據(jù)存取。
2、 根據(jù)權(quán)利要求l所述的方法,其特征在于,根據(jù)所述外設(shè)硬件的物理內(nèi) 存需求,為所述外設(shè)硬件分配多塊連續(xù)物理內(nèi)存,包括為所述外設(shè)硬件分配相同長(zhǎng)度的多塊連續(xù)物理內(nèi)存,所述相同長(zhǎng)度的多塊連續(xù)物理內(nèi)存的長(zhǎng)度之和大于或等于所述外設(shè)硬件的物理內(nèi)存需求;或?yàn)樗鐾庠O(shè)硬件分配多種長(zhǎng)度的多塊連續(xù)物理內(nèi)存,所述多種長(zhǎng)度的多塊 連續(xù)物理內(nèi)存的長(zhǎng)度之和大于或等于所述外設(shè)硬件的物理內(nèi)存需求。
3、 根據(jù)權(quán)利要求2所述的方法,其特征在于,為所述外設(shè)硬件分配相同長(zhǎng) 度的多塊連續(xù)物理內(nèi)存,所述相同長(zhǎng)度的多塊連續(xù)物理內(nèi)存的長(zhǎng)度之和大于或 等于所述外設(shè)硬件的物理內(nèi)存需求,具體包括按照連續(xù)物理內(nèi)存長(zhǎng)度由大到小的順序進(jìn)行排序;如果最大長(zhǎng)度的多塊連續(xù)物理內(nèi)存之和大于或等于所述外設(shè)硬件的物理內(nèi) 存需求,則將最大長(zhǎng)度的多塊連續(xù)物理內(nèi)存分配給所述外設(shè)硬件;如果最大長(zhǎng)度的多塊連續(xù)物理內(nèi)存之和小于所述外設(shè)硬件的物理內(nèi)存需 求,則按照內(nèi)存長(zhǎng)度由大到小的順序嘗試分配其他長(zhǎng)度的連續(xù)物理內(nèi)存,直到 某個(gè)長(zhǎng)度的多塊連續(xù)物理內(nèi)存之和大于或等于所述外設(shè)硬件的物理內(nèi)存需求,并將該長(zhǎng)度的多塊連續(xù)物理內(nèi)存分配給所述外設(shè)硬件。
4、 根據(jù)權(quán)利要求2所述的方法,其特征在于,為所述外設(shè)硬件分配多種長(zhǎng) 度的多塊連續(xù)物理內(nèi)存,所述多種長(zhǎng)度的多塊連續(xù)物理內(nèi)存的長(zhǎng)度之和大于或 等于所述外設(shè)硬件的物理內(nèi)存需求,具體包括按照連續(xù)物理內(nèi)存長(zhǎng)度由大到小的順序進(jìn)行排序;如果最大長(zhǎng)度的多塊連續(xù)物理內(nèi)存之和大于或等于所述外設(shè)硬件的物理內(nèi)存需求,則將所述最大長(zhǎng)度的多塊連續(xù)物理內(nèi)存分配給所述外設(shè)硬件;如果所述最大長(zhǎng)度的多塊連續(xù)物理內(nèi)存之和小于所述外設(shè)硬件的物理內(nèi)存 需求,則按照內(nèi)存長(zhǎng)度由大到小的順序嘗試分配其他長(zhǎng)度的連續(xù)物理內(nèi)存,直 到所分配的多種長(zhǎng)度的多塊連續(xù)物理內(nèi)存之和大于或等于所述外設(shè)硬件的物理 內(nèi)存需求,并將所述多種長(zhǎng)度的多塊連續(xù)物理內(nèi)存分配給所述外設(shè)硬件。
5、 根據(jù)權(quán)利要求l所述的方法,其特征在于,所述方法還包括 為每級(jí)內(nèi)存描述表分配相同長(zhǎng)度的至少一塊連續(xù)物理內(nèi)存;或 為每級(jí)內(nèi)存描述表分配多種長(zhǎng)度的多塊連續(xù)物理內(nèi)存。
6、 一種內(nèi)存存取裝置,其特征在于,所述裝置包括 內(nèi)存需求獲取單元,獲取外設(shè)硬件的物理內(nèi)存需求;外設(shè)硬件內(nèi)存分配單元,根據(jù)所述外設(shè)硬件的物理內(nèi)存需求,為所述外設(shè) 硬件分配多塊連續(xù)物理內(nèi)存;內(nèi)存描述表建立單元,根據(jù)為所述外設(shè)硬件分配的多塊連續(xù)物理內(nèi)存,建 立至少包含最高級(jí)和最低級(jí)的多級(jí)內(nèi)存描述表,每級(jí)內(nèi)存描述表存儲(chǔ)了下一級(jí) 內(nèi)存描述表的地址和內(nèi)存長(zhǎng)度,最低級(jí)內(nèi)存描述表存儲(chǔ)了為所述外設(shè)硬件分配 的多塊連續(xù)物理內(nèi)存的地址和長(zhǎng)度;數(shù)據(jù)交互單元,將所述最高級(jí)內(nèi)存描述表存儲(chǔ)的下一級(jí)內(nèi)存描述表的地址 和內(nèi)存長(zhǎng)度傳給所述外設(shè)硬件,所述外設(shè)硬件根據(jù)所述多級(jí)內(nèi)存描述表到達(dá)為 其分配的多塊連續(xù)物理內(nèi)存,并利用所述多塊連續(xù)物理內(nèi)存進(jìn)行數(shù)據(jù)存取。
7、 根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述外設(shè)硬件內(nèi)存分配單元為外設(shè)硬件等長(zhǎng)內(nèi)存分配單元,為所述外設(shè)硬件分配相同長(zhǎng)度的多塊連續(xù)物 理內(nèi)存,所述相同長(zhǎng)度的多塊連續(xù)物理內(nèi)存的長(zhǎng)度之和大于或等于所述外設(shè)硬 件的物理內(nèi)存需求;或外設(shè)硬件組合內(nèi)存分配單元,為所述外設(shè)硬件分配多種長(zhǎng)度的多塊連續(xù)物 理內(nèi)存,所述多種長(zhǎng)度的多塊連續(xù)物理內(nèi)存的長(zhǎng)度之和大于或等于所述外設(shè)硬 件的物理內(nèi)存需求。
8、 根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述外設(shè)硬件等長(zhǎng)內(nèi)存分配 單元,具體包括內(nèi)存長(zhǎng)度排序單元,按照連續(xù)物理內(nèi)存長(zhǎng)度由大到小的順序進(jìn)行排序; 等長(zhǎng)內(nèi)存分配單元,如果最大長(zhǎng)度的多塊連續(xù)物理內(nèi)存之和大于或等于所 述外設(shè)硬件的物理內(nèi)存需求,則將最大長(zhǎng)度的多塊連續(xù)物理內(nèi)存么、配給所述外 設(shè)硬件;如果最大長(zhǎng)度的多塊連續(xù)物理內(nèi)存之和小于所述外設(shè)硬f牛的物理內(nèi)存 需求,則按照內(nèi)存長(zhǎng)度由大到小的順序嘗試分配其他長(zhǎng)度的連續(xù)物理內(nèi)存,直 到某個(gè)長(zhǎng)度的多塊連續(xù)物理內(nèi)存之和大于或等于所述外設(shè)硬件的物理內(nèi)存需 求,并將該長(zhǎng)度的多塊連續(xù)物理內(nèi)存分配給所述外設(shè)硬件。
9、 根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述外設(shè)硬件^合內(nèi)存分配 單元,具體包括內(nèi)存長(zhǎng)度排序單元,按照連續(xù)物理內(nèi)存長(zhǎng)度由大到小的順序進(jìn)行排序; 組合內(nèi)存分配單元,如果最大長(zhǎng)度的多塊連續(xù)物理內(nèi)存之和大于或等于所 述外設(shè)硬件的物理內(nèi)存需求,則將最大長(zhǎng)度的多塊連續(xù)物理內(nèi)存灸、配給所述外 設(shè)硬^牛;如果最大長(zhǎng)度的多塊連續(xù)物理內(nèi)存之和小于所述外設(shè)5更《4的物理內(nèi)存 需求,則按照內(nèi)存長(zhǎng)度由大到小的順序嘗試分配其他長(zhǎng)度的連續(xù)物理內(nèi)存,直 到所分配的多種長(zhǎng)度的多塊連續(xù)物理內(nèi)存之和大于或等于所述外設(shè)硬件的物理 內(nèi)存需求,并將所述多種長(zhǎng)度的多塊連續(xù)物理內(nèi)存分配給所述外設(shè)硬件。
10、 根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述內(nèi)存描述表建立單元,還包括描述表內(nèi)存分配單元,為每級(jí)內(nèi)存描述表分配相同長(zhǎng)度的至少一塊連續(xù)物 理內(nèi)存,或?yàn)槊考?jí)內(nèi)存描述表分配多種長(zhǎng)度的多塊連續(xù)物理內(nèi)存。
全文摘要
本發(fā)明提供一種內(nèi)存存取方法與裝置,所述內(nèi)存存取方法包括獲取外設(shè)硬件的物理內(nèi)存需求;根據(jù)外設(shè)硬件的物理內(nèi)存需求,為外設(shè)硬件分配多塊連續(xù)物理內(nèi)存;根據(jù)為外設(shè)硬件分配的多塊連續(xù)物理內(nèi)存,建立至少包含最高級(jí)和最低級(jí)的多級(jí)內(nèi)存描述表,每級(jí)內(nèi)存描述表存儲(chǔ)了下一級(jí)內(nèi)存描述表的地址和內(nèi)存長(zhǎng)度,最低級(jí)內(nèi)存描述表存儲(chǔ)了為外設(shè)硬件分配的多塊連續(xù)物理內(nèi)存的地址和長(zhǎng)度;將最高級(jí)內(nèi)存描述表存儲(chǔ)的下一級(jí)內(nèi)存描述表的地址和內(nèi)存長(zhǎng)度傳給外設(shè)硬件,外設(shè)硬件根據(jù)多級(jí)內(nèi)存描述表到達(dá)為其分配的多塊連續(xù)物理內(nèi)存,并利用多塊連續(xù)物理內(nèi)存進(jìn)行數(shù)據(jù)存取。
文檔編號(hào)G06F12/08GK101546292SQ20081010268
公開(kāi)日2009年9月30日 申請(qǐng)日期2008年3月25日 優(yōu)先權(quán)日2008年3月25日
發(fā)明者周志雄, 銳 汪 申請(qǐng)人:北京恒光創(chuàng)新科技股份有限公司;北京恒光通信技術(shù)有限公司;北京恒光科技發(fā)展有限公司