欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

連續(xù)物理存儲(chǔ)器分配的方法和系統(tǒng)的制作方法

文檔序號(hào):6363081閱讀:212來(lái)源:國(guó)知局

專利名稱::連續(xù)物理存儲(chǔ)器分配的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域
:本發(fā)明涉及在隨機(jī)存取存儲(chǔ)器中分配連續(xù)存儲(chǔ)器(的技術(shù))。
背景技術(shù)
:在計(jì)算機(jī)系統(tǒng)的內(nèi)核體系結(jié)構(gòu)中,使用連續(xù)物理存儲(chǔ)器(即包括連續(xù)的真實(shí)(物理)地址的存儲(chǔ)器)正變得越來(lái)越少見(jiàn)。內(nèi)核設(shè)計(jì)者們假設(shè)硬件支持分散-集中I/O(scatter-gatherI/O),該假設(shè)常常是正確的。但是,仍有很多舊的硬件組件不支持分散-集中I/O,并且一些較新的硬件組件也不支持分散-集中I/O。各種較新的硬件設(shè)備組件不支持其緩沖描述符環(huán)(bufferdescriptorring)的分散-集中I/O。一個(gè)例子是由位于(美國(guó))加利福尼亞州SanJose的AlteonWebsystemsInc(被NortelNetworks公司所收購(gòu))生產(chǎn)的千兆以太網(wǎng)/PCI網(wǎng)絡(luò)接口卡,Tigon2ASIC,版本5或6,SX光纖連接器IBMFRU07L8918。操作系統(tǒng)為內(nèi)核編程提供了API(applicationprograminterfaces,應(yīng)用程序接口)。特別而言,操作系統(tǒng)提供了API,以便在內(nèi)核虛擬地址空間中分配存儲(chǔ)器。一個(gè)例子是AIXTM操作系統(tǒng)所提供的xmalloc()。該API不保證由它所分配的物理存儲(chǔ)器是連續(xù)的。某些操作系統(tǒng)提供了這樣的API,其可以在虛擬地址空間中分配存儲(chǔ)器,并保證該物理存儲(chǔ)器是固定的。一個(gè)例子是AIXTM操作系統(tǒng)的rmalloc()。由該命令分配的存儲(chǔ)器是固定的(pinned),但不可換頁(yè)(notpageable)。提供連續(xù)物理存儲(chǔ)器的API(如剛剛提到的rmalloc())的使用是受限制的。一般不允許編寫內(nèi)核擴(kuò)展、設(shè)備驅(qū)動(dòng)程序和其它模塊的程序員使用如rmalloc()這樣的API。此種API一般只是由固件程序員在某些情況下使用的。在這方面,使用rmalloc()時(shí)可用的自由存儲(chǔ)器池是16MB,并在大多數(shù)使用AIXTM操作系統(tǒng)的系統(tǒng)如IBMRS/6000系列系統(tǒng)中,完全由固件使用。對(duì)于應(yīng)用程序(即用戶模式)編程,為存儲(chǔ)器分配提供的標(biāo)準(zhǔn)API是malloc()和realloc()。在這兩種情況下,作為基礎(chǔ)的物理存儲(chǔ)器的連續(xù)性都無(wú)法保證。因此,這些調(diào)用不適于在需要連續(xù)物理存儲(chǔ)器的情況下使用。鑒于上述情況,顯然需要一種改進(jìn)的分配連續(xù)物理存儲(chǔ)器的方法。
發(fā)明內(nèi)容這里描述的算法可以從在不確保作為基礎(chǔ)的物理存儲(chǔ)器是連續(xù)的情況下分配的存儲(chǔ)器提供物理連續(xù)的存儲(chǔ)器。這些算法可以融入用于分配存儲(chǔ)器的操作系統(tǒng)調(diào)用中,以確保這些調(diào)用所分配的存儲(chǔ)器是物理上連續(xù)的。提供物理連續(xù)的存儲(chǔ)器涉及到在一個(gè)(相對(duì)較大的)已分配的虛擬存儲(chǔ)器塊中,或者在多個(gè)(相對(duì)較小的)已分配的虛擬存儲(chǔ)器塊中,識(shí)別出連續(xù)的物理存儲(chǔ)器頁(yè)。如此識(shí)別出的物理頁(yè)被歸入一個(gè)連續(xù)物理存儲(chǔ)器池中,以在需要時(shí)使用。如果只分配一個(gè)單個(gè)虛擬存儲(chǔ)器塊,則如果至少某些頁(yè)被用作連續(xù)頁(yè),任何未被使用的頁(yè)都不可釋放。但是,如果那些塊未被分配帶有歸入連續(xù)物理存儲(chǔ)器池以便于隨后的使用的其它頁(yè),則某些未使用的頁(yè)可以被釋放,用于其它用途。任何未歸入連續(xù)物理存儲(chǔ)器池的頁(yè)都可以從分配中釋放,用于其它用途。只分配一個(gè)單個(gè)存儲(chǔ)器塊較簡(jiǎn)單,但效率較低,而分配多個(gè)離散(不連續(xù))塊較為復(fù)雜,但由于“浪費(fèi)”了更少的未使用頁(yè),而效率更高。只分配一個(gè)單個(gè)的相對(duì)較大的存儲(chǔ)器塊較為簡(jiǎn)單,導(dǎo)致更多的物理連續(xù)頁(yè),但效率較低,而分配多個(gè)離散(不連續(xù))的、相對(duì)較小的塊較為復(fù)雜,導(dǎo)致較少的物理連續(xù)頁(yè),但由于“浪費(fèi)”較少的未使用頁(yè),而效率可以較高。圖1的流程圖示出了用于以僅涉及一個(gè)虛擬存儲(chǔ)器塊的方式分配物理連續(xù)存儲(chǔ)器的第一算法。圖2和3的示意圖示出了根據(jù)圖1所示的第一算法、涉及分配物理連續(xù)存儲(chǔ)器的處理過(guò)程。圖4的流程圖示出了以涉及多個(gè)虛擬存儲(chǔ)器塊的方式分配物理連續(xù)存儲(chǔ)器的第二算法。圖5和6的示意圖示出了根據(jù)圖4所示的第二算法、涉及分配物理連續(xù)存儲(chǔ)器的處理過(guò)程。圖7的示意圖示出了一種計(jì)算機(jī)系統(tǒng),在其中可實(shí)施參照?qǐng)D1至6以及說(shuō)明書(shū)后面所附代碼片段1至4所描述的技術(shù)。另外,說(shuō)明書(shū)后面還附有代碼片段1至4,其中示出了可用于實(shí)施參照?qǐng)D1至6所描述的算法的一些偽代碼片段。具體實(shí)施例方式這里在操作系統(tǒng)環(huán)境中描述了一種用于分配物理連續(xù)存儲(chǔ)器的方法、計(jì)算機(jī)系統(tǒng)和計(jì)算機(jī)軟件。這里結(jié)合AIXTM操作系統(tǒng)描述了一個(gè)特定實(shí)現(xiàn),盡管也可以在其它操作系統(tǒng)上實(shí)施。依次描述了用于分配連續(xù)物理存儲(chǔ)器的第一和第二算法。每個(gè)算法都有其特定的優(yōu)點(diǎn),下面是對(duì)二者的概述第一算法下面參照?qǐng)D1至3,對(duì)分配連續(xù)物理存儲(chǔ)器的第一算法中的步驟進(jìn)行描述。下面描述的步驟與圖1的流程圖所示的步驟是一致的。步驟110在虛擬地址空間中分配一個(gè)單獨(dú)的、較大的存儲(chǔ)器塊(用戶模式下的malloc()、realloc(),內(nèi)核模式下xmalloc())。步驟120將所獲得的塊中的每頁(yè)標(biāo)記為不可換頁(yè)的。這意味著這些頁(yè)永遠(yuǎn)不會(huì)被交換出去,而其物理地址是持久的(內(nèi)核模式下的xmempin())。步驟130獲取該塊中每個(gè)虛擬頁(yè)的真實(shí)物理地址。步驟140分配兩個(gè)數(shù)組(數(shù)據(jù)結(jié)構(gòu)),其元素的數(shù)量與該塊中頁(yè)的數(shù)量相同。第一數(shù)組保存每頁(yè)的虛擬地址,而第二數(shù)組保存相應(yīng)頁(yè)的物理地址。步驟150對(duì)兩個(gè)數(shù)組進(jìn)行排序,以使第二數(shù)組中的元素以升序排列。當(dāng)排序時(shí),應(yīng)注意保持第一個(gè)和第二個(gè)數(shù)組元素的1∶1映射關(guān)系不變。結(jié)果,第二數(shù)組具有以升序排序的元素,而第二數(shù)組的元素沒(méi)有特定的排列順序。步驟160剖析第二數(shù)組,標(biāo)記連續(xù)的頁(yè)。步驟170將那些標(biāo)記過(guò)的頁(yè)歸入物理連續(xù)池。圖2示意性地表現(xiàn)了對(duì)單個(gè)存儲(chǔ)器塊210的分配。該單個(gè)塊210包括虛擬存儲(chǔ)器頁(yè)220Vl...Vn。進(jìn)而,這些虛擬存儲(chǔ)器頁(yè)220分別與物理存儲(chǔ)器頁(yè)230P201...P500對(duì)應(yīng)。在諸虛擬存儲(chǔ)器頁(yè)220和諸物理存儲(chǔ)器頁(yè)230之間并沒(méi)有特定的相互關(guān)系。如圖2所示提供了象征的物理存儲(chǔ)器地址P201、P204等作為例子。圖3與圖2相對(duì)應(yīng),示意性地表現(xiàn)了排序后的虛擬存儲(chǔ)器頁(yè)220和物理存儲(chǔ)器頁(yè)230。在本例中,如圖3所示,可以識(shí)別出兩組連續(xù)物理存儲(chǔ)器頁(yè)。這些連續(xù)物理存儲(chǔ)器頁(yè)包括其地址為P201、P202、P203、P204以及P310、P311的頁(yè)。這兩組物理存儲(chǔ)器頁(yè)230被放入連續(xù)物理存儲(chǔ)器池,以便在需要時(shí)使用。識(shí)別出的未使用的物理存儲(chǔ)器頁(yè)具有地址P400和P500,但它們不能被釋放,因?yàn)榇鎯?chǔ)器塊210向上述兩組連續(xù)物理存儲(chǔ)器頁(yè)貢獻(xiàn)了一些頁(yè)。第二算法下面參照?qǐng)D4至6,對(duì)分配物理連續(xù)存儲(chǔ)器的第二算法的步驟進(jìn)行描述。下面描述的步驟與圖4的流程圖所示的步驟是對(duì)應(yīng)的。步驟410在虛擬地址空間中分配小存儲(chǔ)器塊(用戶模式下的malloc()、realloc(),內(nèi)核模式下的xmalloc())。這些塊可以是10或100或更多的頁(yè),并可以是可編程的。分配若干這樣的塊。注意在這種方法中,連續(xù)性被降低,因而需要分配更多的頁(yè)。步驟420將上述所獲得的每個(gè)塊的每頁(yè)標(biāo)記為不可換頁(yè)。這意味著這些頁(yè)永遠(yuǎn)不會(huì)被交換出去,而其物理地址是持久的(內(nèi)核模式下的xmempin())。步驟430獲得每個(gè)塊中的每個(gè)虛擬頁(yè)的真實(shí)物理地址。步驟440分配兩個(gè)數(shù)組(數(shù)據(jù)結(jié)構(gòu)),其元素的數(shù)量與全部存儲(chǔ)器塊中頁(yè)的總數(shù)相同。第一數(shù)組保存每頁(yè)的虛擬地址,而第二數(shù)組保存相應(yīng)頁(yè)的物理地址。步驟450對(duì)兩個(gè)數(shù)組進(jìn)行排序,以使第二數(shù)組中的元素以升序排列。當(dāng)排序時(shí),必須注意保持第一和第二數(shù)組元素的1∶1映射關(guān)系不變。結(jié)果,第二數(shù)組具有以升序排序的元素,而第一數(shù)組的元素沒(méi)有特定的排列順序。步驟460剖析第二數(shù)組,標(biāo)記連續(xù)的頁(yè)。步驟470那些標(biāo)記過(guò)的頁(yè)歸入物理連續(xù)池。步驟480檢驗(yàn)在步驟1中分配的所有塊。如果任何一個(gè)塊都沒(méi)有向連續(xù)存儲(chǔ)器池貢獻(xiàn)一個(gè)頁(yè),則將其釋放(使用free()或xmemfree())。圖5示意性地表現(xiàn)了n個(gè)存儲(chǔ)器塊510的分配。如圖5所示,這些塊510包括虛擬存儲(chǔ)器頁(yè)520Vl...Vn。進(jìn)而,這些虛擬存儲(chǔ)器頁(yè)520分別與物理存儲(chǔ)器頁(yè)530P21...P66對(duì)應(yīng)。在諸虛擬存儲(chǔ)器頁(yè)520和諸物理存儲(chǔ)器頁(yè)530之間并沒(méi)有特定的相互關(guān)系。如圖5所示,提供了象征性的物理存儲(chǔ)器地址P21、P34等作為例子。圖6與圖5相對(duì)應(yīng),示意性地表現(xiàn)了排序后的虛擬存儲(chǔ)器頁(yè)520和物理存儲(chǔ)器頁(yè)530。在本例中,如圖6所示,可以識(shí)別出兩組連續(xù)物理存儲(chǔ)器頁(yè)。這些連續(xù)物理存儲(chǔ)器頁(yè)包括以下兩組物理存儲(chǔ)器頁(yè)P(yáng)21、P22、P23、P24以及P34、P35、P36、P37。識(shí)別出的兩個(gè)未使用的頁(yè)具有物理存儲(chǔ)器地址P50和P77。兩個(gè)被使用的頁(yè)也可以被釋放,因?yàn)檫@些頁(yè)不是這樣的已分配存儲(chǔ)器塊的一部分,該存儲(chǔ)器塊共有一組連續(xù)物理存儲(chǔ)器頁(yè)的部分頁(yè)。這些頁(yè)是P58和P66,作為虛擬頁(yè)V11和V12,在一單個(gè)存儲(chǔ)器塊中被分配。如圖6所示,這些頁(yè)P(yáng)58和P66是與塊n640m相關(guān)聯(lián)的。算法的實(shí)現(xiàn)第一算法和第二算法都可以以下列方式之一使用。在一種實(shí)現(xiàn)中,該算法可以納入一個(gè)用戶模式庫(kù)中。另一方面,該算法也可以被包含在malloc()的代碼中,這樣用戶模式應(yīng)用可以利用malloc()代碼的修改后的功能。該算法可以在內(nèi)核擴(kuò)展中實(shí)現(xiàn),從而在內(nèi)核中提供便利(能力)。代碼片段1至4示出了偽代碼,作為所述算法的示例性實(shí)現(xiàn)。代碼片段1所示偽代碼用于排序相對(duì)應(yīng)的物理和虛擬存儲(chǔ)器地址的數(shù)組元素。代碼片段2所示偽代碼用于初始化連續(xù)存儲(chǔ)器池。代碼片段3所示偽代碼用于取消初始化(uninitialize)連續(xù)存儲(chǔ)器池。代碼片段4所示偽代碼用于獲得所需數(shù)量的連續(xù)存儲(chǔ)器頁(yè)??梢赃m當(dāng)?shù)亟M合使用代碼片段1至4的偽代碼片段,以實(shí)現(xiàn)上述算法。代碼片段1至4的偽代碼片段代表實(shí)現(xiàn)該算法的一種方式??梢允褂煤芏嗖煌木幋a技術(shù)和數(shù)據(jù)結(jié)構(gòu),來(lái)實(shí)現(xiàn)所述算法。上述代碼是用戶模式操作的一種實(shí)施。在用戶模式中實(shí)施該算法的一個(gè)重要提示如下。該偽代碼可以使用”pdiagex”(portablediagnostickernelextension,可移植診斷內(nèi)核擴(kuò)展)所導(dǎo)出(export)的調(diào)用。這是AIXTM操作系統(tǒng)中的一個(gè)通用內(nèi)核擴(kuò)展,用于診斷編程錯(cuò)誤。該代碼使用兩個(gè)調(diào)用((a)pdiag_dd_dma_setup()(b)pdiag_dd_dma_complete()),以在用戶模式下獲得物理地址。如果沒(méi)有使用該擴(kuò)展,則應(yīng)當(dāng)替代地使用具有相似功能的兩個(gè)系統(tǒng)調(diào)用。第一和第二算法概述上述第一算法會(huì)造成大量的存儲(chǔ)器浪費(fèi)。并非所有的頁(yè)都?xì)w入連續(xù)存儲(chǔ)器池,而且未使用的頁(yè)無(wú)法被釋放。因?yàn)樗械捻?yè)都被使用單個(gè)malloc()調(diào)用分配,內(nèi)核存儲(chǔ)器分配函數(shù)被緊鄰地執(zhí)行,因而獲得連續(xù)物理存儲(chǔ)器的可能性極高。當(dāng)分配小虛擬存儲(chǔ)器塊時(shí),獲得了固定的和物理的地址,每個(gè)這樣的操作對(duì)于每個(gè)塊并非很緊密相繼地發(fā)生。在這些操作之間,與存儲(chǔ)器分配、存儲(chǔ)器清理(cleanup)等有關(guān)的許多其它內(nèi)核服務(wù)被執(zhí)行。因而,物理地址傾向于被分散(就是說(shuō),分布在一個(gè)物理地址范圍中)。與此相反,當(dāng)使用一個(gè)大的塊時(shí),上述操作是緊密相繼地發(fā)生的,因而減少了分散的(即非連續(xù))的物理地址的機(jī)會(huì)。如果有效地使用資源優(yōu)先于所需的物理連續(xù)存儲(chǔ)器的量,則第二算法特別有利。第二算法可以更有效地使用資源,而釋放不需要的存儲(chǔ)器。然而,這樣所獲得的連續(xù)存儲(chǔ)器的總量要小于使用第一算法所獲得的總量。第一算法涉及的編程是較簡(jiǎn)單的。第二算法由于使用了第一算法中未使用的數(shù)據(jù)結(jié)構(gòu),因此涉及的編程比第一個(gè)算法涉及的更復(fù)雜。計(jì)算機(jī)硬件和軟件圖11是一個(gè)計(jì)算機(jī)系統(tǒng)1100的示意圖,該計(jì)算機(jī)系統(tǒng)可被用于執(zhí)行實(shí)現(xiàn)這里所描述的技術(shù)的處理過(guò)程中的步驟。計(jì)算機(jī)系統(tǒng)1100被提供用于執(zhí)行被編程來(lái)幫助實(shí)行上述技術(shù)的計(jì)算機(jī)軟件。該計(jì)算機(jī)軟件運(yùn)行于安裝在計(jì)算機(jī)系統(tǒng)1100上的適當(dāng)?shù)牟僮飨到y(tǒng)之中。計(jì)算機(jī)軟件涉及一組編程的邏輯指令,這些指令可以由計(jì)算機(jī)系統(tǒng)1100進(jìn)行解釋,以便命令計(jì)算機(jī)系統(tǒng)1100執(zhí)行由這些指令指定的預(yù)定功能。計(jì)算機(jī)軟件可以是以任何語(yǔ)言、代碼或表示法記錄的表達(dá),包括一組指令,意在使兼容的信息處理系統(tǒng)直接或者在轉(zhuǎn)換為另一種語(yǔ)言、代碼或表示法之后,執(zhí)行特定的功能。計(jì)算機(jī)軟件是由包括適當(dāng)?shù)挠?jì)算機(jī)語(yǔ)言的語(yǔ)句的計(jì)算機(jī)程序進(jìn)行編程的。計(jì)算機(jī)程序經(jīng)過(guò)編譯器處理,而成為計(jì)算機(jī)軟件,該軟件具有二進(jìn)制形式,適合于由操作系統(tǒng)執(zhí)行。對(duì)計(jì)算機(jī)軟件進(jìn)行編程的方式涉及各種軟件組件,或代碼手段,用來(lái)執(zhí)行上述技術(shù)的處理過(guò)程中的特定步驟。計(jì)算機(jī)系統(tǒng)1100的組件包括計(jì)算機(jī)1120、輸入設(shè)備1100、1115和視頻顯示器1190。計(jì)算機(jī)1120包括處理器1140、存儲(chǔ)器模塊1150、輸入/輸出(I/O)接口1160和1165、視頻接口1145和存儲(chǔ)設(shè)備1155。處理器1140是中央處理單元(CPU),其執(zhí)行操作系統(tǒng)和在操作系統(tǒng)之下執(zhí)行的計(jì)算機(jī)軟件。存儲(chǔ)器模塊1150包括隨機(jī)存取存儲(chǔ)器(RAM)和只讀存儲(chǔ)器(ROM),并在處理器1140的指示下被使用。視頻接口1145與視頻顯示器1190相連,并提供視頻信號(hào)用于在視頻顯示器1190上顯示。用戶操作計(jì)算機(jī)1120的輸入是通過(guò)由鍵盤1110和鼠標(biāo)1115組成的輸入設(shè)備1110和1115提供的。存儲(chǔ)設(shè)備1155可以包括盤驅(qū)動(dòng)器或任何其它合適的非易失性存儲(chǔ)介質(zhì)。計(jì)算機(jī)1120的每個(gè)組件都與一個(gè)總線1130相連,該總線包括地址、數(shù)據(jù)和控制總線,以使這些組件可以通過(guò)總線1130相互通信。計(jì)算機(jī)系統(tǒng)1100可以通過(guò)一個(gè)輸入/輸出(I/O)接口1165使用到網(wǎng)絡(luò)1180(如因特網(wǎng))的通信通道與一臺(tái)或多臺(tái)其它相似的計(jì)算機(jī)相連。計(jì)算機(jī)軟件可以作為記錄在便攜式存儲(chǔ)介質(zhì)上的計(jì)算機(jī)程序產(chǎn)品提供。在這種情況下,該計(jì)算機(jī)軟件由計(jì)算機(jī)系統(tǒng)1100從存儲(chǔ)設(shè)備1155上訪問(wèn)。可替代地,計(jì)算機(jī)軟件可以由計(jì)算機(jī)1120直接從網(wǎng)絡(luò)1180上訪問(wèn)。不管哪種情況,用戶都可以使用鍵盤1110和鼠標(biāo)1115與計(jì)算機(jī)系統(tǒng)1100交互,以操作在計(jì)算機(jī)1120上執(zhí)行的計(jì)算機(jī)軟件。計(jì)算機(jī)系統(tǒng)1100只是為了說(shuō)明的目的、作為示例描述的。其它配置或類型的計(jì)算機(jī)系統(tǒng)也可以同樣好地被用來(lái)實(shí)施所描述的技術(shù)。結(jié)論這里描述的技術(shù)可被用于提供相當(dāng)大的連續(xù)存儲(chǔ)器池,其足以使用大于4K的數(shù)據(jù)緩沖器。一個(gè)典型的操作系統(tǒng)中頁(yè)的大小是4K,而且通常不會(huì)超出數(shù)據(jù)緩沖器的這個(gè)4K的界限。所描述的技術(shù)可以為“熱插拔”PCI(peripheralconnectioninterface,外圍連接接口)組件很好地工作,并且不依賴于固件初始化,或者安裝時(shí)不需要重新啟動(dòng)(reboot)。所描述的技術(shù)對(duì)于不使用rmalloc()的小規(guī)模存儲(chǔ)器需求或類似的極少可用資源也是有用的。連續(xù)存儲(chǔ)器池可由應(yīng)用和內(nèi)核程序員使用??捎玫倪B續(xù)物理存儲(chǔ)器的量是可調(diào)整的,并可以通過(guò)適當(dāng)?shù)馁Y源管理來(lái)增加或減少。通過(guò)適當(dāng)?shù)毓芾碣Y源可以提供最小存儲(chǔ)器池。不需要硬件設(shè)備的任何額外功能,也不需要硬件存儲(chǔ)器映射的任何改變。不需要資源鎖定。也不需要“破解”(hack)操作系統(tǒng)固件以分配物理存儲(chǔ)器,或改變內(nèi)核。資源并非被永久阻塞(占用)。每當(dāng)需要時(shí),存儲(chǔ)器和資源可以被卸載,以便用于通常目的。在任何特定實(shí)例中可用的連續(xù)物理存儲(chǔ)器的量取決于計(jì)算機(jī)系統(tǒng)上安裝的存儲(chǔ)器的大小。該算法每次被初始化時(shí),并不能事先確定可用的物理連續(xù)的量。這里描述的兩個(gè)算法都會(huì)造成一些存儲(chǔ)器浪費(fèi)。第二算法減少了這種存儲(chǔ)器浪費(fèi)的程度,但其代價(jià)是減少了可用的連續(xù)存儲(chǔ)器的總量。雖然這里描述的技術(shù)和安排與AIXTM操作有關(guān),但這些技術(shù)和安排也可以被應(yīng)用于其它基于Unix的操作系統(tǒng)。在非Unix操作系統(tǒng)如WindowsNT中的實(shí)施也是可能的。所描述的算法并不依賴于任何特定的操作系統(tǒng)??梢詫?duì)這里描述的技術(shù)和安排進(jìn)行各種改動(dòng)和修改,正如對(duì)相關(guān)領(lǐng)域的技術(shù)人員來(lái)說(shuō)顯而易見(jiàn)的那樣。<prelisting-type="program-listing">  Algorithmsort  算法  Inputphysical(Thearraythatholdsphysicaladdresses)  輸入(保存物理地址的數(shù)組)  virtual(Thearraythatholdsvirtualaddresses)  (保存虛擬地址的數(shù)組)  size(Noofelementsinthearray)  (一數(shù)組元素的個(gè)數(shù))  outputphysicalarraysortedinascendingorder  輸出以升序排序的物理數(shù)組  {  /*Useanysortingtechniquetosortthefirstarrayelementsin  ascendingorder*/  使用任何排序技術(shù)將第一數(shù)組的元素以升序排序  /*Selectionofsortingtechniquewillbebasedontheirindividualmerits/demerits*/  對(duì)排序技術(shù)的選擇基于它們各自的優(yōu)點(diǎn)/缺點(diǎn)  /*Whilesortingcaremustbetakenthatthe1∶1correspondence  betweeneachelementoffirstandsecondarrayisintact*/  排序時(shí),應(yīng)注意保持第一數(shù)組和第二個(gè)數(shù)組的各元素之間的1∶1對(duì)應(yīng)關(guān)系不變   /*Belowisthecodeforoneverysimplesort*/  下面為一種很簡(jiǎn)單的排序的代碼  for(i=0;i<size;i++)  {  for(j=size-1;j>i;j--)  {  if(physical[j]<physical[j-1])  {  tmp=physical[j];  physical[j]=physical[j-1|;  physical[j-1]=tmp;  /*Maintain1∶1correspondence*/  保持1∶1對(duì)應(yīng)關(guān)系  tmp=virtual[j];  virtual[j]=virtual[j-1];  virtual[j-1]=tmp  }  }  }  }</pre>代碼片段1<prelisting-type="program-listing">  Algorithminitialize_contiguous_mem_pool  算法  Inputnone  輸入  Outputnone  輸出  {  Increasepriorityoftheprocess/*sincelargeamountofcomputationisinvolved*/  增加進(jìn)程的優(yōu)先級(jí)因?yàn)樯婕按罅康挠?jì)算  malloc()/*Allocateonechunkofseveralpagese.g20000pages*/  分配一個(gè)塊,其由若干頁(yè)(如20000頁(yè))構(gòu)成  /*Forfindingphysicealaddressfromvirtualaddress,it’sarequirement  thatthevirtualaddressmustbealignedonpageboundaryformostsystemcalls*/  對(duì)大多數(shù)系統(tǒng)調(diào)用來(lái)說(shuō),為了從虛擬存儲(chǔ)器地址發(fā)現(xiàn)物理存儲(chǔ)器地址,虛擬地  址必須與頁(yè)邊界對(duì)齊  Alignthevirtualaddressobtainedonpageboundary  將獲得的虛擬地址與頁(yè)邊界對(duì)齊  while(tilllastpageinthechunk)  (直到塊中的最后一頁(yè))  {  getthevirtualaddressforapage;  獲得一頁(yè)的虛擬地址  obtainphysicaladdressforthevirtualaddress;  獲得虛擬地址的物理地址  /*callslikepdiag_dd_dma_setup()canbeusedhere*/  這里可以使用pdiag_dd_dma_setup等調(diào)用  /*Ifitcantbeused,newsystemcallshavetobeimplemented*/  如果無(wú)法使用,則必須實(shí)施新系統(tǒng)調(diào)用  storethephysicaladdressinthephysicalarray  將物理地址存入physical數(shù)組  storethevirtualaddressinthevirtualarray  將虛擬地址存入virtual數(shù)組  }  sort();/*sortthearray*/  對(duì)數(shù)組排序  }</pre>代碼片段2<prelisting-type="program-listing">  Algorithmuninitialize_contiguous_mem_pool  算法  Inputnone  輸入  Outputnone  輸出  {  while(tilllastpageinthechunk)  (直到塊中的最后一頁(yè))  {  getthevirtualaddressforapage;  獲得一頁(yè)的虛擬地址  unpinthememory  解除固定該存儲(chǔ)器  /*herecallslikepdiag_dd_dma_completecanbeused*/  這里可以使用諸如pdiag_dd_dma_complete等調(diào)用  /*Thiscallunpinsandun-attachesthememoryinthekernel*/  該調(diào)用在內(nèi)核中解除固定并解除附加該存儲(chǔ)器  }  freethemalloeedmemorychunk  釋放使用malloc分配的存儲(chǔ)器塊  }</pre>代碼片段3<prelisting-type="program-listing"> Algorithmget_contiguous_memory  算法  Inputnoofpagesneeded  輸入所需頁(yè)的數(shù)量  OutputNoofcontigouspagesobtained  輸出獲得的連續(xù)頁(yè)的數(shù)量  1ifnoofpagesneedednotfound  如果沒(méi)有發(fā)現(xiàn)所需的頁(yè)數(shù),則為1  {  currentelement=firstelementofthephysicaladdressarray  物理地址數(shù)組中的第一個(gè)元素  nextelement=secondelementofthephysicaladdressarray  物理地址數(shù)組中的第二個(gè)元素  pagesobtained=1;  while(tilllastelementofthephysicalarrayischecked)  (直到physical數(shù)組的最后一個(gè)元素被檢查)  {  if(nextelement==currentelement+pagesize)  {  /*Thetwopagesarecontiguous*/   兩個(gè)頁(yè)是連續(xù)的  pagesobtained++;    }  if(pagesobtained==noofpagesneeded)  (所需頁(yè)的數(shù)量)  {  markpagesasused;  將頁(yè)標(biāo)記為已用的  return(pagesobtained);}  incrementcurrentelementandnextelement  將currentelement和nextelement加1  }  return1;  }</pre>代碼片段權(quán)利要求1.一種用于提供物理連續(xù)的存儲(chǔ)器地址的方法,該方法包括以下步驟分配包括一個(gè)或多個(gè)離散的虛擬頁(yè)的虛擬存儲(chǔ)器地址空間的至少一個(gè)部分;獲得所述至少一個(gè)部分的每個(gè)所述頁(yè)的物理存儲(chǔ)器地址;確定所述頁(yè)的哪些具有連續(xù)的物理存儲(chǔ)器地址;以及將所述確定的虛擬存儲(chǔ)器地址分配給一個(gè)連續(xù)物理存儲(chǔ)器池用隨后的使用。2.如權(quán)利要求1所述的方法,進(jìn)一步包括以下步驟將所述虛擬存儲(chǔ)器中的至少一個(gè)部分中的所述頁(yè)的每一個(gè)指定為不可換頁(yè)。3.如權(quán)利要求1所述的方法,進(jìn)一步包括以下步驟提供兩個(gè)數(shù)組,它們具有元素?cái)?shù)量與所述虛擬存儲(chǔ)器的至少一個(gè)部分中的所述頁(yè)的總數(shù)量相同。4.如權(quán)利要求3所述的方法,其中所述兩個(gè)數(shù)組包括保存每個(gè)所述頁(yè)的虛擬地址的一個(gè)第一個(gè)數(shù)組,以及保存每個(gè)所述頁(yè)的相應(yīng)的物理地址的一個(gè)第二個(gè)數(shù)組。5.如權(quán)利要求1所述的方法,進(jìn)一步包括以下步驟對(duì)所述兩個(gè)數(shù)組進(jìn)行排序,使得所述第二數(shù)組的內(nèi)容按物理地址的升序排序。6.如權(quán)利要求5所述的方法,其中所述排序步驟保持所述第一數(shù)組和所述第二數(shù)組的相應(yīng)元素之間的1∶1的關(guān)系。7.如權(quán)利要求1所述的方法,進(jìn)一步包括以下步驟標(biāo)記構(gòu)成連續(xù)物理存儲(chǔ)器地址的所述第二數(shù)組的元素。8.如權(quán)利要求1所述的方法,其中只分配虛擬存儲(chǔ)器的一個(gè)部分。9.如權(quán)利要求1所述的方法,其中分配多個(gè)虛擬存儲(chǔ)器部分。10.如權(quán)利要求8所述的方法,進(jìn)一步包括以下步驟釋放沒(méi)有至少一個(gè)頁(yè)被分配給所述連續(xù)物理存儲(chǔ)器池的虛擬存儲(chǔ)器的所述多個(gè)被分配的部分中的任何一個(gè)。11.一種用于提供物理連續(xù)的存儲(chǔ)器地址的計(jì)算機(jī)軟件,該計(jì)算機(jī)軟件記錄在介質(zhì)上,并能夠由可以解釋該計(jì)算機(jī)軟件的計(jì)算機(jī)系統(tǒng)執(zhí)行,該計(jì)算機(jī)軟件包括用于分配包括一個(gè)或多個(gè)離散的虛擬頁(yè)的虛擬存儲(chǔ)器地址空間的至少一個(gè)部分的代碼裝置;用于獲得所述至少一個(gè)部分的每個(gè)所述頁(yè)的物理存儲(chǔ)器地址的代碼裝置;用于確定所述頁(yè)的哪些具有連續(xù)的物理存儲(chǔ)器地址的代碼裝置;以及用于將所述確定的虛擬存儲(chǔ)器地址分配給一個(gè)連續(xù)物理存儲(chǔ)器池用于隨后的使用的代碼裝置。12.一種用于提供物理上連續(xù)的存儲(chǔ)器地址的計(jì)算機(jī)系統(tǒng),該執(zhí)行計(jì)算機(jī)軟件的計(jì)算機(jī)系統(tǒng),包括用于分配包括一個(gè)或多個(gè)離散的虛擬頁(yè)的虛擬存儲(chǔ)器地址空間的至少一個(gè)部分的裝置;用于獲得所述至少一個(gè)部分的每個(gè)所述頁(yè)的物理存儲(chǔ)器地址的裝置;用于確定所述頁(yè)的哪些具有連續(xù)的物理存儲(chǔ)器地址的裝置;以及用于將所述確定的虛擬存儲(chǔ)器地址分配給一個(gè)連續(xù)物理存儲(chǔ)器池用于于隨后的使用的裝置。全文摘要由已分配的但不確保作為基礎(chǔ)的物理存儲(chǔ)器是否連續(xù)的存儲(chǔ)器提供物理上連續(xù)的存儲(chǔ)器的方法和系統(tǒng),該方法涉及在已分配的虛擬存儲(chǔ)器中識(shí)別出連續(xù)的物理存儲(chǔ)器頁(yè)。將這樣的頁(yè)歸入連續(xù)物理存儲(chǔ)器池,以便在需要時(shí)使用。任何未歸于連續(xù)物理存儲(chǔ)器池、且未與其它歸入連續(xù)物理存儲(chǔ)器池的頁(yè)共同被分配的頁(yè),可以被從分配中釋放,以用于其它用途。文檔編號(hào)G06F12/06GK1497449SQ0313479公開(kāi)日2004年5月19日申請(qǐng)日期2003年9月29日優(yōu)先權(quán)日2002年9月30日發(fā)明者M(jìn)·C·帕蒂爾,MC帕蒂爾申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
云南省| 北碚区| 黄梅县| 新营市| 且末县| 虹口区| 阳江市| 齐齐哈尔市| 台中市| 长葛市| 农安县| 灌云县| 峨眉山市| 盱眙县| 蕉岭县| 崇仁县| 张家界市| 琼结县| 瓦房店市| 镶黄旗| 曲靖市| 奉化市| 堆龙德庆县| 弥渡县| 扬州市| 万宁市| 四子王旗| 若羌县| 米脂县| 玉龙| 综艺| 五寨县| 商都县| 河津市| 潍坊市| 乐山市| 文水县| 象州县| 兴安盟| 阿巴嘎旗| 年辖:市辖区|