本發(fā)明涉及計(jì)算機(jī)
技術(shù)領(lǐng)域:
:,尤其涉及一種內(nèi)存管理方法和裝置。
背景技術(shù):
::vxworks操作系統(tǒng)是美國風(fēng)河公司設(shè)計(jì)開發(fā)的一種嵌入式實(shí)時(shí)操作系統(tǒng),是嵌入式開發(fā)環(huán)境的關(guān)鍵組成部分,應(yīng)用廣泛。其中,基于無互鎖流水線級(jí)的微處理器(millioninstructionspersecond,簡稱mips)架構(gòu)的vxworks操作系統(tǒng),通常關(guān)聯(lián)實(shí)時(shí)處理(realtimeprocess,簡稱rtp)組件,rtp組件使得應(yīng)用程序相互獨(dú)立,互不影響,增加了內(nèi)核的穩(wěn)定性。vxworks操作系統(tǒng)通過內(nèi)存管理單元(memorymanagementunit,簡稱mmu)管理內(nèi)存,由于vxworks操作系統(tǒng)關(guān)聯(lián)了rtp組件,所以,vxworks操作系統(tǒng)在sysphysmemdesc表中只能添加大于內(nèi)存映射起始地址local_mem_local_adrs之上的內(nèi)存作為vxworks操作系統(tǒng)的內(nèi)存池,其中,sysphysmemdesc表存儲(chǔ)有內(nèi)存的虛擬地址和物理地址的映射關(guān)系。vxworks操作系統(tǒng)添加mmu之后,local_mem_local_adrs的默認(rèn)值為0xc0000000,由于vxworks操作系統(tǒng)中c編譯語言只能使用32位地址,限制了在0xc0000000之上虛擬地址最大為1g,即,vxworks操作系統(tǒng)最大只能實(shí)現(xiàn)1g的內(nèi)存尋址。然而,32位地址的最大尋址范圍可以達(dá)到4g,現(xiàn)有的vxworks操作系統(tǒng)的內(nèi)存構(gòu)成方式,極大地限制了vxworks操作系統(tǒng)的內(nèi)存尋址范圍。技術(shù)實(shí)現(xiàn)要素:本發(fā)明提供一種內(nèi)存管理方法和裝置,可以增大mips架構(gòu)下vxworks操作系統(tǒng)的內(nèi)存尋址范圍。本發(fā)明提供的內(nèi)存管理方法,包括:將無互鎖流水線級(jí)的微處理器mips架構(gòu)中大于內(nèi)存映射起始地址的第 一預(yù)設(shè)大小的內(nèi)存的地址信息添加到虛擬物理地址映射表中;其中,所述地址信息包括內(nèi)存的虛擬地址和物理地址之間的映射關(guān)系;將所述mips架構(gòu)中小于所述內(nèi)存映射起始地址的第二預(yù)設(shè)大小的內(nèi)存的地址信息添加到至少一個(gè)傳輸后備緩沖器tlb表項(xiàng)中;將所述第一預(yù)設(shè)大小的內(nèi)存與所述第二預(yù)設(shè)大小的內(nèi)存構(gòu)成操作系統(tǒng)的內(nèi)存池。本發(fā)明提供的內(nèi)存管理裝置,包括:第一內(nèi)存添加模塊,用于將無互鎖流水線級(jí)的微處理器mips架構(gòu)中大于內(nèi)存映射起始地址的第一預(yù)設(shè)大小的內(nèi)存的地址信息添加到虛擬物理地址映射表中;其中,所述地址信息包括內(nèi)存的虛擬地址和物理地址之間的映射關(guān)系;第二內(nèi)存添加模塊,用于將所述mips架構(gòu)中小于所述內(nèi)存映射起始地址的第二預(yù)設(shè)大小的內(nèi)存的地址信息添加到至少一個(gè)傳輸后備緩沖器tlb表項(xiàng)中;內(nèi)存管理模塊,用于將所述第一預(yù)設(shè)大小的內(nèi)存與所述第二預(yù)設(shè)大小的內(nèi)存構(gòu)成操作系統(tǒng)的內(nèi)存池。本發(fā)明提供一種內(nèi)存管理方法和裝置,其中,內(nèi)存管理方法包括:將mips架構(gòu)中大于內(nèi)存映射起始地址的第一預(yù)設(shè)大小的內(nèi)存的地址信息添加到虛擬物理地址映射表中,將mips架構(gòu)中小于所述內(nèi)存映射起始地址的第二預(yù)設(shè)大小的內(nèi)存的地址信息添加到至少一個(gè)tlb表項(xiàng)中,將所述第一預(yù)設(shè)大小的內(nèi)存與所述第二預(yù)設(shè)大小的內(nèi)存構(gòu)成操作系統(tǒng)的內(nèi)存池。本發(fā)明提供的內(nèi)存管理方法,通過將虛擬物理地址映射表和tlb表相結(jié)合,使得vxworks操作系統(tǒng)的內(nèi)存池也包括了小于內(nèi)存映射起始地址的內(nèi)存,增大了mips架構(gòu)下vxworks操作系統(tǒng)的內(nèi)存尋址范圍。附圖說明為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明實(shí)施例一提供的內(nèi)存管理方法的流程圖;圖2為本發(fā)明實(shí)施例二提供的內(nèi)存管理方法的流程圖;圖3為本發(fā)明實(shí)施例一提供的內(nèi)存管理裝置的結(jié)構(gòu)示意圖。具體實(shí)施方式為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。本發(fā)明提供的內(nèi)存管理方法和裝置,主要是基于mips架構(gòu)的vxworks操作系統(tǒng)實(shí)現(xiàn)的,本發(fā)明實(shí)施例提供的內(nèi)存管理方法和裝置,均以基于mips架構(gòu)的vxworks操作系統(tǒng)的內(nèi)存管理為例進(jìn)行說明。圖1為本發(fā)明實(shí)施例一提供的內(nèi)存管理方法的流程圖。如圖1所示,本實(shí)施例提供的內(nèi)存管理方法,可以包括:步驟101、將mips架構(gòu)中大于內(nèi)存映射起始地址的第一預(yù)設(shè)大小的內(nèi)存的地址信息添加到虛擬物理地址映射表中。其中,地址信息包括內(nèi)存的虛擬地址和物理地址之間的映射關(guān)系。在本步驟中,內(nèi)存映射起始地址用local_mem_local_adrs表示,目前,vxworks操作系統(tǒng)添加mmu之后,local_mem_local_adrs默認(rèn)設(shè)置為0xc0000000,當(dāng)然也可以是mips架構(gòu)設(shè)置的其他值。vxworks操作系統(tǒng)中虛擬物理地址映射表用sysphysmemdesc表示,vxworks操作系統(tǒng)關(guān)聯(lián)rtp組件,sysphysmemdesc只能存儲(chǔ)local_mem_local_adrs之上的內(nèi)存的虛擬地址和物理地址之間的映射關(guān)系,以使vxworks操作系統(tǒng)初始化sysphysmemdesc表時(shí),可以建立虛擬地址和物理地址的映射關(guān)系。其中,大于內(nèi)存映射起始地址的第一預(yù)設(shè)大小的內(nèi)存可以是虛擬地址連續(xù)的內(nèi)存,也可以是虛擬地址不連續(xù)的內(nèi)存,本實(shí)施例對(duì)此不加以限制??蛇x的,第一預(yù)設(shè)大小可以為1g。需要說明的是,本實(shí)施例對(duì)于vxworks操作系統(tǒng)中的虛擬物理地址映射 表sysphysmemdesc的具體結(jié)構(gòu)不加以限制。下面給出了一種具體的實(shí)現(xiàn)方式,在sysphysmemdesc表中可以添加虛擬地址物理地址的映射關(guān)系以及內(nèi)存大小??蛇x的,虛擬物理地址映射表可以包括至少一個(gè)子表項(xiàng),每個(gè)子表項(xiàng)均存儲(chǔ)有地址信息。相對(duì)應(yīng)的,第一預(yù)設(shè)大小的內(nèi)存可以分割成與各個(gè)子表項(xiàng)相對(duì)應(yīng)的大小,每個(gè)子表項(xiàng)存儲(chǔ)有相應(yīng)大小的內(nèi)存的地址信息。其中,各個(gè)子表項(xiàng)的大小可以相同,也可以不同,本實(shí)施例對(duì)此不加以限制??蛇x的,大于內(nèi)存映射起始地址的第一預(yù)設(shè)大小的內(nèi)存的地址信息也可以同時(shí)添加到傳輸后備緩沖器(translationlookasidebuffer,簡稱tlb)表項(xiàng)中,但是由于tlb表項(xiàng)的大小和數(shù)量受mips架構(gòu)的限制,當(dāng)tlb表項(xiàng)不足時(shí),可以在tlb表項(xiàng)中僅存儲(chǔ)第一預(yù)設(shè)大小的內(nèi)存的地址信息中的部分信息。將大于內(nèi)存映射起始地址的第一預(yù)設(shè)大小的內(nèi)存的地址信息添加到tlb表項(xiàng)中,可以提升地址信息的讀取速度。步驟103、將mips架構(gòu)中小于內(nèi)存映射起始地址的第二預(yù)設(shè)大小的內(nèi)存的地址信息添加到至少一個(gè)tlb表項(xiàng)中。其中,小于內(nèi)存映射起始地址的第二預(yù)設(shè)大小的內(nèi)存可以是虛擬地址連續(xù)的內(nèi)存,也可以是虛擬地址不連續(xù)的內(nèi)存,本實(shí)施例對(duì)此不加以限制。其中,tlb表項(xiàng)的大小和數(shù)量根據(jù)mips架構(gòu)的設(shè)置值確定,例如:tlb表項(xiàng)可以為128頁,每個(gè)tlb表項(xiàng)的大小可以為16m,則所有tlb表 項(xiàng)的大小共計(jì)為2g,即,所有tlb表項(xiàng)共計(jì)可以存儲(chǔ)2g大小內(nèi)存的虛擬地址和物理地址之間的映射關(guān)系。需要說明的是,本步驟具體可以通過mips架構(gòu)或者vxworks操作系統(tǒng)中的庫函數(shù)實(shí)現(xiàn),也可以通過自定義函數(shù)實(shí)現(xiàn),本實(shí)施例對(duì)此不加以限制。下面給出了一種具體的實(shí)現(xiàn)方式,vxworks操作系統(tǒng)中mmu在初始化的時(shí)候,通過庫函數(shù)mmumipspteset和函數(shù)mmumipstlbwiredentryset,實(shí)現(xiàn)將小于內(nèi)存映射起始地址的第二預(yù)設(shè)大小的內(nèi)存的地址信息添加到至少一個(gè)tlb表項(xiàng)中,其中,編譯語言采用c語言實(shí)現(xiàn)。mmumipspteset(&pte,/*pagetableentry,tlb表項(xiàng)的結(jié)構(gòu)體描述*/(phys_addr)paddr,/*物理地址*/(virt_addr)vaddr,/*虛擬地址*/attributes,/*屬性*/true,/*global,tlb的標(biāo)志位*/pagesize,/*頁大小*/null);mmumipstlbwiredentryset((uint32)vaddr,&pte);可選的,本步驟的一種實(shí)現(xiàn)方式可以是:根據(jù)第二預(yù)設(shè)大小和tlb表項(xiàng)的大小計(jì)算出所需的tlb表項(xiàng)的數(shù)量。將第二預(yù)設(shè)大小的內(nèi)存按照tlb表項(xiàng)的大小進(jìn)行分段,將各分段內(nèi)存的地址信息添加到各tlb表項(xiàng)中。例如:第二預(yù)設(shè)大小為1g,每項(xiàng)tlb表項(xiàng)為16m,則存儲(chǔ)1g內(nèi)存的地址信息共需要1g/16m=64項(xiàng)tlb表項(xiàng),將1g內(nèi)存按照16m進(jìn)行分段,共分為64段,然后將64個(gè)分段內(nèi)存的地址信息分別添加到64項(xiàng)tlb表項(xiàng)中。步驟105、將第一預(yù)設(shè)大小的內(nèi)存與第二預(yù)設(shè)大小的內(nèi)存構(gòu)成操作系統(tǒng)的內(nèi)存池。在本步驟中,vxworks系統(tǒng)的內(nèi)存池由兩部分構(gòu)成,分別為大于內(nèi)存映射起始地址的第一預(yù)設(shè)大小的內(nèi)存和小于內(nèi)存映射起始地址的第二預(yù)設(shè)大小的內(nèi)存,由于vxworks系統(tǒng)的內(nèi)存池也包括了小于內(nèi)存映射起始地址的內(nèi)存,相比于現(xiàn)有技術(shù),通過設(shè)置第一預(yù)設(shè)大小與第二預(yù)設(shè)大小,通過虛擬物 理地址映射表與tlb表相結(jié)合,可以使得vxworks操作系統(tǒng)實(shí)現(xiàn)大內(nèi)存,大大增大了mips架構(gòu)下vxworks操作系統(tǒng)的內(nèi)存尋址范圍。例如:將大于內(nèi)存映射起始地址的1g內(nèi)存的地址信息存儲(chǔ)在虛擬物理地址映射表sysphysmemdesc中,將小于內(nèi)存映射起始地址的1g內(nèi)存的地址信息存儲(chǔ)在64個(gè)tlb表項(xiàng)中,則vxworks操作系統(tǒng)可以實(shí)現(xiàn)2g的尋址范圍。需要說明的是,第一預(yù)設(shè)大小和第二預(yù)設(shè)大小根據(jù)需要進(jìn)行設(shè)置,本實(shí)施例對(duì)此不具體限制。需要說明的是,將第二預(yù)設(shè)大小的內(nèi)存構(gòu)成操作系統(tǒng)的內(nèi)存池,具體可以通過mips架構(gòu)或者vxworks操作系統(tǒng)中的庫函數(shù)實(shí)現(xiàn),也可以通過自定義函數(shù)實(shí)現(xiàn),本實(shí)施例對(duì)此不加以限制。下面給出了一種具體的實(shí)現(xiàn)方式,通過vxworks操作系統(tǒng)的庫函數(shù)memaddtopool,將第二預(yù)設(shè)大小的內(nèi)存添加到vxworks操作系統(tǒng)的內(nèi)存池中。memaddtopool(0x20000000,/*虛擬地址*/0x20000000);/*內(nèi)存大小*/本實(shí)施例提供了一種內(nèi)存管理方法,包括:將mips架構(gòu)中大于內(nèi)存映射起始地址的第一預(yù)設(shè)大小的內(nèi)存的地址信息添加到虛擬物理地址映射表中,將mips架構(gòu)中小于內(nèi)存映射起始地址的第二預(yù)設(shè)大小的內(nèi)存的地址信息添加到至少一個(gè)tlb表項(xiàng)中,將第一預(yù)設(shè)大小的內(nèi)存與第二預(yù)設(shè)大小的內(nèi)存構(gòu)成操作系統(tǒng)的內(nèi)存池。本實(shí)施例提供的內(nèi)存管理方法,通過將虛擬物理地址映射表和tlb表相結(jié)合,使得vxworks操作系統(tǒng)的內(nèi)存池也包括了小于內(nèi)存映射起始地址的內(nèi)存,增大了mips架構(gòu)下vxworks操作系統(tǒng)的內(nèi)存尋址范圍。圖2為本發(fā)明實(shí)施例二提供的內(nèi)存管理方法的流程圖。如圖2所示,本實(shí)施例提供的內(nèi)存管理方法,在步驟105之后,還可以包括:步驟107、當(dāng)驅(qū)動(dòng)調(diào)用內(nèi)存池中的內(nèi)存時(shí),執(zhí)行虛擬地址物理地址轉(zhuǎn)換函數(shù)獲得驅(qū)動(dòng)調(diào)用的內(nèi)存的物理地址或者虛擬地址。在本步驟中,當(dāng)驅(qū)動(dòng)需要使用vxworks操作系統(tǒng)的內(nèi)存池中的內(nèi)存時(shí),通過執(zhí)行虛擬地址物理地址轉(zhuǎn)換函數(shù)獲知具體準(zhǔn)確的物理地址或者虛擬地址。其中,虛擬地址物理地址轉(zhuǎn)換函數(shù)實(shí)現(xiàn)了內(nèi)存的虛擬地址和物理地址之間的轉(zhuǎn)換。由于vxworks操作系統(tǒng)實(shí)現(xiàn)了大內(nèi)存,因而驅(qū)動(dòng)可以使用的內(nèi)存 增大,擴(kuò)大了vxworks操作系統(tǒng)的應(yīng)用范圍。可選的,虛擬地址物理地址轉(zhuǎn)換函數(shù)包括:虛擬地址到物理地址轉(zhuǎn)換函數(shù)或者物理地址到虛擬地址轉(zhuǎn)換函數(shù)。執(zhí)行虛擬地址物理地址轉(zhuǎn)換函數(shù)獲得驅(qū)動(dòng)調(diào)用的內(nèi)存的物理地址或者虛擬地址,可以包括:根據(jù)虛擬地址到物理地址轉(zhuǎn)換函數(shù)的第一輸入?yún)?shù),查詢虛擬物理地址映射表以及所有tlb表項(xiàng),獲得第一輸入?yún)?shù)對(duì)應(yīng)的物理地址;或者,根據(jù)物理地址到虛擬地址轉(zhuǎn)換函數(shù)的第二輸入?yún)?shù),查詢虛擬物理地址映射表以及所有tlb表項(xiàng),獲得第二輸入?yún)?shù)對(duì)應(yīng)的虛擬地址。其中,第一輸入?yún)?shù)表示驅(qū)動(dòng)調(diào)用的內(nèi)存的起始虛擬地址,第二輸入?yún)?shù)表示驅(qū)動(dòng)調(diào)用的內(nèi)存的起始物理地址。需要說明的是,虛擬地址到物理地址轉(zhuǎn)換函數(shù)或者物理地址到虛擬地址轉(zhuǎn)換函數(shù),具體可以通過mips架構(gòu)或者vxworks操作系統(tǒng)中的庫函數(shù)實(shí)現(xiàn),也可以通過自定義函數(shù)實(shí)現(xiàn),本實(shí)施例對(duì)此不加以限制。下面給出了一種具體的實(shí)現(xiàn)方式。其中,虛擬地址到物理地址轉(zhuǎn)換函數(shù)具體如下:其中,在上述示例的函數(shù)中,均是先查詢sysphysmemdesc表中的地址轉(zhuǎn)換,再查詢tlb表中的地址轉(zhuǎn)換。需要說明的是,本實(shí)施例對(duì)于在虛擬物理地址映射表以及所有tlb表項(xiàng)中查詢地址信息,并不限定各個(gè)表的查詢順序。本實(shí)施例提供了一種內(nèi)存管理方法,通過將虛擬物理地址映射表和tlb表相結(jié)合,增大了mips架構(gòu)下vxworks操作系統(tǒng)的內(nèi)存尋址范圍,擴(kuò)大了 vxworks操作系統(tǒng)的應(yīng)用范圍。圖3為本發(fā)明實(shí)施例一提供的內(nèi)存管理裝置的結(jié)構(gòu)示意圖。如圖3所示,本實(shí)施例提供的內(nèi)存管理裝置,用以執(zhí)行圖1或圖2所示實(shí)施例提供的內(nèi)存管理方法,可以包括:第一內(nèi)存添加模塊11、第二內(nèi)存添加模塊13和內(nèi)存管理模塊15。第一內(nèi)存添加模塊11,用于將mips架構(gòu)中大于內(nèi)存映射起始地址的第一預(yù)設(shè)大小的內(nèi)存的地址信息添加到虛擬物理地址映射表中。其中,地址信息包括內(nèi)存的虛擬地址和物理地址之間的映射關(guān)系。第二內(nèi)存添加模塊13,用于將mips架構(gòu)中小于內(nèi)存映射起始地址的第二預(yù)設(shè)大小的內(nèi)存的地址信息添加到至少一個(gè)tlb表項(xiàng)中。內(nèi)存管理模塊15,用于將第一預(yù)設(shè)大小的內(nèi)存與第二預(yù)設(shè)大小的內(nèi)存構(gòu)成操作系統(tǒng)的內(nèi)存池。可選的,虛擬物理地址映射表包括至少一個(gè)子表項(xiàng),子表項(xiàng)存儲(chǔ)有地址信息??蛇x的,第二內(nèi)存添加模塊13具體用于:根據(jù)第二預(yù)設(shè)大小和tlb表項(xiàng)的大小計(jì)算出所需的tlb表項(xiàng)的數(shù)量。將第二預(yù)設(shè)大小的內(nèi)存按照tlb表項(xiàng)的大小進(jìn)行分段,將各分段內(nèi)存的地址信息添加到各tlb表項(xiàng)中??蛇x的,還可以包括:內(nèi)存調(diào)用模塊17。內(nèi)存調(diào)用模塊17,用于當(dāng)驅(qū)動(dòng)調(diào)用內(nèi)存池中的內(nèi)存時(shí),執(zhí)行虛擬地址物理地址轉(zhuǎn)換函數(shù)獲得驅(qū)動(dòng)調(diào)用的內(nèi)存的物理地址或者虛擬地址??蛇x的,虛擬地址物理地址轉(zhuǎn)換函數(shù)包括:虛擬地址到物理地址轉(zhuǎn)換函數(shù)或者物理地址到虛擬地址轉(zhuǎn)換函數(shù)。內(nèi)存調(diào)用模塊17具體用于:根據(jù)虛擬地址到物理地址轉(zhuǎn)換函數(shù)的第一輸入?yún)?shù),查詢虛擬物理地址映射表以及所有tlb表項(xiàng),獲得第一輸入?yún)?shù)對(duì)應(yīng)的物理地址;或者,根據(jù)物理地址到虛擬地址轉(zhuǎn)換函數(shù)的第二輸入?yún)?shù),查詢虛擬物理地址映射表以及所有tlb表項(xiàng),獲得第二輸入?yún)?shù)對(duì)應(yīng)的虛擬地址。需要說明的是,第一內(nèi)存添加模塊11、第二內(nèi)存添加模塊13、內(nèi)存管理模塊15和內(nèi)存調(diào)用模塊17,具體可以通過mips架構(gòu)或者vxworks操作 系統(tǒng)中的庫函數(shù)實(shí)現(xiàn),也可以通過自定義函數(shù)實(shí)現(xiàn),本實(shí)施例對(duì)此不加以限制。本實(shí)施例提供了一種內(nèi)存管理裝置,包括:第一內(nèi)存添加模塊、第二內(nèi)存添加模塊和內(nèi)存管理模塊。本實(shí)施例提供的內(nèi)存管理裝置,通過將虛擬物理地址映射表和tlb表相結(jié)合,使得vxworks操作系統(tǒng)的內(nèi)存池也包括了小于內(nèi)存映射起始地址的內(nèi)存,增大了mips架構(gòu)下vxworks操作系統(tǒng)的內(nèi)存尋址范圍。最后應(yīng)說明的是:以上各實(shí)施例僅用以說明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述各實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分或者全部技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的范圍。當(dāng)前第1頁12當(dāng)前第1頁12