專利名稱:能夠有效使用存儲器的存儲池管理方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及用于計算機等的存儲池管理方法和系統(tǒng)。
背景技術(shù):
眾所周知各種各樣的裝置或系統(tǒng)由軟件程序控制。在這種裝置中,當程序執(zhí)行時使用各種數(shù)據(jù)。雖然所有的數(shù)據(jù)都存儲在(主)存儲器中有利于程序的高速執(zhí)行,但是大容量的存儲器非常昂貴。因此,存儲器的容量通常小于存儲所有的數(shù)據(jù)所需要的容量。因此,存儲器根據(jù)來自程序的占用(getting)請求存儲所需的數(shù)據(jù)部分。
當存儲器沒有可分配的存儲區(qū)用來接收來自程序的占用請求時,暫停程序的執(zhí)行直到在存儲器中出現(xiàn)可分配的存儲區(qū)。因此,必須盡可能有效的使用存儲器,以避免這種情況。
采用相關(guān)的存儲池管理系統(tǒng)來有效地利用存儲器,并稱作可變長度存儲池管理系統(tǒng)。存儲池管理系統(tǒng)允許來自程序的占用請求隨意請求存儲器容量。
當接收到占用請求時,存儲池管理系統(tǒng)搜索存儲器等于或大于所請求的存儲器容量的可分配存儲區(qū)的可用或未占用的存儲區(qū)。當作存儲器中找到可分配存儲區(qū)時,存儲池管理系統(tǒng)占用或調(diào)取部分或全部可分配的存儲區(qū)作為具有所請求的存儲器容量的調(diào)取存儲區(qū)。所調(diào)取的存儲區(qū)分配給或被程序占用。存儲池管理系統(tǒng)接收到另一個占用請求時重復上述操作。
另一方面,存儲池管理系統(tǒng)響應(yīng)來自程序的釋放請求釋放被程序占用的占用存儲區(qū),將占用區(qū)變?yōu)榭芍匦率褂么鎯^(qū)??芍匦率褂么鎯^(qū)與可用存儲區(qū)相同,并且相鄰的可用存儲區(qū)聯(lián)合起來形成連續(xù)的可用存儲區(qū)。
當可重新使用存儲區(qū)與另一個占用存儲區(qū)相鄰時,它只能用于所請求的存儲器容量小于或等于自身容量的請求。因此,存在一種情況,雖然可用存儲區(qū)的總和大于新的占用請求所請求的容量,但是存儲池管理系統(tǒng)不能接收新的占用請求。即,存儲池管理系統(tǒng)存在可用存儲區(qū)碎片的問題。
另一種相關(guān)的存儲池管理系統(tǒng)稱作固定長度存儲池管理系統(tǒng)。存儲池管理系統(tǒng)將存儲器的存儲區(qū)分為多個存儲池。每個存儲池包括多個容量的子存儲池。存儲池的子存儲池的容量彼此不同。
存儲池管理系統(tǒng)允許來自程序的特定的請求存儲器容量。特定的請求存儲器容量必須等于存儲池的任何一個的子存儲池的容量。換句話說,存儲池管理系統(tǒng)以子存儲池為單位調(diào)取和釋放存儲區(qū)。
雖然存儲池管理系統(tǒng)沒有可用存儲區(qū)的碎片問題,但是存在下面所述的另外的問題。
當相應(yīng)的存儲池沒有可用的子存儲池時,存儲池管理系統(tǒng)不能接收特定的請求存儲容量等于某個子存儲池的容量的新的占用請求。即使其他存儲池有足夠的可用存儲區(qū)也會有這樣的情況。即,存儲池管理系統(tǒng)具有盡管有足夠的可用存儲區(qū)但不能接受占用請求的問題。換句話說,存儲池管理系統(tǒng)具有由存儲區(qū)分區(qū)引起的分區(qū)缺點。
發(fā)明概述因此,本發(fā)明的目的是提供一種能夠有效利用存儲器的存儲池管理系統(tǒng)。
本發(fā)明的其它目的會隨著說明書的進展而闡述清楚。
根據(jù)本發(fā)明的第一方面,存儲池管理方法用于從具有多個子存儲池的存儲池中得到存儲區(qū)。該方法包括以下步驟接收來自任務(wù)程序的指定請求存儲區(qū)容量的存儲區(qū)占用請求;以子存儲池為單位按關(guān)于請求存儲區(qū)容量的預定的搜索順序,從存儲池中搜索等于或大于所請求存儲區(qū)容量的可分配存儲區(qū);當在任何一個子存儲池中發(fā)現(xiàn)可分配存儲區(qū)時,從可分配存儲區(qū)得到所請求存儲區(qū)容量的存儲區(qū)。
根據(jù)本發(fā)明的第二方面,用在計算機中的計算機程序產(chǎn)品從具有多個子存儲池的存儲池中得到存儲區(qū)。計算機程序產(chǎn)品包括載有計算機可讀的指令和存儲計算機可讀指令的記錄媒體。該指令用于讓計算機可以根據(jù)以下步驟操作接收來自任務(wù)程序的指定請求存儲區(qū)容量的存儲區(qū)占用請求;以子存儲池為單位按關(guān)于請求存儲區(qū)容量的預定的搜索順序,從存儲池中搜索等于或大于所請求存儲區(qū)容量的可分配存儲區(qū);當在任何一個子存儲池中發(fā)現(xiàn)可分配存儲區(qū)時,從可分配存儲區(qū)得到所請求存儲區(qū)容量的存儲區(qū)。
根據(jù)本發(fā)明的第三方面,存儲池管理系統(tǒng)用于從具有多個子存儲池的存儲池中得到存儲區(qū)。存儲池管理系統(tǒng)包括用來接收來自任務(wù)程序的指定請求存儲區(qū)容量的存儲區(qū)占用請求的占用請求接收部分。搜索順序控制部分連接到接收部分,以根據(jù)關(guān)于請求存儲區(qū)容量的預定的搜索順序通知子存儲池ID,響應(yīng)占用請求接收部分的請求。占用部分連接到占用請求接收部分,以嘗試根據(jù)從搜索順序控制部分通過占用請求接收部分發(fā)來的相應(yīng)的子存儲池ID從子存儲池中占用所請求存儲區(qū)容量的存儲區(qū)。
圖1是根據(jù)本發(fā)明的第一實施例的存儲池管理系統(tǒng)的方框圖;
圖2示出了在由圖1的存儲池管理系統(tǒng)管理的存儲器中存儲池的結(jié)構(gòu);圖3是在圖1的存儲池管理系統(tǒng)中所用的搜索順序表,搜索可分配存儲區(qū);圖4是用來說明在圖1的存儲池管理系統(tǒng)中所提供的存儲器占用請求接收部分的工作的流程圖;圖5是用來說明在圖1的存儲池管理系統(tǒng)中所提供的存儲器釋放請求接收部分的工作的流程圖;圖6是用來說明在圖1的存儲池管理系統(tǒng)中所提供的搜索順序控制部分的工作的流程圖;圖7是用來說明圖1的存儲池管理系統(tǒng)中所提供的隊列控制部分的工作的流程圖,圖示情況為隊列控制部分從存儲器請求接收部分接收到存儲池ID和請求存儲區(qū)容量;圖8示出了由圖1的存儲池管理系統(tǒng)所用的任務(wù)控制模塊(TCB)的結(jié)構(gòu);圖9是用來圖示說明隊列控制部分的工作流程圖,隊列控制部分從存儲器釋放請求接收部分接收到存儲池ID、子存儲池ID和最大可用存儲區(qū)容量;圖10是用來說明在圖1的存儲池管理系統(tǒng)中所提供的存儲器占用部分的工作的流程圖;圖11是用來說明在圖1的存儲池管理系統(tǒng)中所提供的存儲器釋放部分的工作的流程圖;圖12是根據(jù)本發(fā)明的第二實施例的存儲池管理系統(tǒng)的方框圖;圖13示出了在由圖12的存儲池管理系統(tǒng)管理的存儲器中存儲組的結(jié)構(gòu);圖14是在圖12的存儲池管理系統(tǒng)中所用的搜索順序表,搜索可分配存儲區(qū);圖15是用來說明在圖12的存儲池管理系統(tǒng)中所提供的存儲器占用請求接收部分的工作的流程圖;圖16是用來說明在圖12的存儲池管理系統(tǒng)中所提供的存儲器釋放請求接收部分的工作的流程圖;圖17是用來說明在圖12的存儲池管理系統(tǒng)中所提供的搜索順序控制部分的工作的流程圖。
優(yōu)選實施例的說明參考圖1到11,說明根據(jù)本發(fā)明的第一實施例的存儲池管理系統(tǒng)。
簡言之,存儲池管理系統(tǒng)預先將各存儲池分為多個子存儲池,并根據(jù)請求的存儲區(qū)容量以不同的方搜索順序搜索可分配存儲區(qū)。在該結(jié)構(gòu)中,傾向于使用各子存儲池滿足特定范圍的請求存儲區(qū)容量。因此,難以產(chǎn)生子存儲池碎片。此外,因為各子存儲池不僅用于特定范圍的請求存儲區(qū)容量,所以存儲池分為子存儲池不會產(chǎn)生分區(qū)缺點。
在圖1中,存儲池管理系統(tǒng)連接到存儲器100,并包括搜索順序控制部分101、存儲器占用請求接收部分102、存儲器釋放請求接收部分103、存儲器占用部分104、隊列控制部分105和存儲器釋放部分106。
搜索順序控制部分101控制在存儲器100中的存儲池的子存儲池中搜索可用存儲區(qū)的順序。搜索順序控制部分101響應(yīng)從存儲器占用請求接收部分102來的請求將搜索順序通知存儲器占用請求接收部分102。換句話說,搜索順序控制部分101將要被搜索的子存儲池通知存儲器占用請求接收部分102。
存儲器占用請求接收部分102用來接收來自任務(wù)程序的儲器占用請求。當接收到儲器占用請求時,存儲器占用請求接收部分102詢問搜索順序控制部分101的搜索順序。然后,存儲器占用請求接收部分102使存儲器占用部分104嘗試從由搜索順序控制部分101通知的搜索順序所決定的第一子存儲池中占用或調(diào)取具有所請求的存儲區(qū)容量的可用存儲區(qū)。在第一子存儲池中沒有可用存儲區(qū)的情況下,存儲器占用請求接收部分102使存儲器占用部分104嘗試從剩余的子存儲池中按照搜索順序一個接一個的搜索,以調(diào)取具有所請求的存儲區(qū)容量的可用存儲區(qū)。
存儲器占用部分104用來從存儲器占用請求接收部分102指定的特定子存儲池中占用或調(diào)取具有所請求的存儲區(qū)容量的可用存儲區(qū),作為調(diào)取的存儲區(qū)。當在特定子存儲池中沒有可用存儲區(qū)時,存儲器占用部分104通知存儲器占用請求接收部分102搜索失敗。
存儲器釋放請求接收部分103用來接收來自任務(wù)程序的儲器釋放請求。存儲器釋放請求接收部分103使存儲器釋放部分106釋放調(diào)取的存儲區(qū)。同時,存儲器釋放請求接收部分103將對調(diào)取的存儲區(qū)的釋放通知隊列控制部分105。
存儲器釋放部分106用來釋放調(diào)取的存儲區(qū)。
當存儲器調(diào)取請求沒有接受時,隊列控制部分105用來使任務(wù)程序進入等待或睡眠狀態(tài),直到在存儲池中出現(xiàn)可用存儲區(qū)。隊列控制部分105將調(diào)取存儲區(qū)的釋放通知等待可用存儲區(qū)出現(xiàn)的任務(wù)程序。換句話說,當可用存儲區(qū)出現(xiàn)時,隊列控制部分105喚醒任務(wù)程序。
接下來,說明存儲器100的存儲區(qū)的結(jié)構(gòu)和搜索順序控制部分101保存的搜索順序表。
圖2示出了存儲器100的存儲區(qū)的結(jié)構(gòu)。如圖2所示,存儲區(qū)提供了多個存儲池(A、B、…)。各存儲池分為多個子存儲池。在本實施例中,存儲池A分為四個子存儲池A-1、A-2、A-3和A-4,同時存儲池B分為三個子存儲池B-1、B-2和B-3。在各存儲池中,子存儲池的容量彼此不同。但是,在各存儲池中,子存儲池的容量可以是相同的。
圖3示出了由搜索順序控制部分101保存的搜索順序表的例子。搜索順序表為存儲池A的搜索順序。搜索順序表有四個條目。第一個是請求存儲區(qū)容量等于或小于64K字節(jié)的。第二個是請求存儲區(qū)容量大于64K字節(jié)等于或小于128K字節(jié)的。第三個是請求存儲區(qū)容量大于128K字節(jié)等于或小于512K字節(jié)的。最后一個是請求存儲區(qū)容量等于或大于512K字節(jié)的。例如,當請求存儲區(qū)容量等于256K字節(jié)時,第三個條目(entry)用來在存儲池A中搜索可用存儲區(qū)。這些條目用來處理任何容量的請求存儲區(qū)容量。分別對應(yīng)于剩余存儲池的其它搜索順序表由搜索順序控制部分101保存。即,搜索順序表定義了相應(yīng)存儲池的搜索順序。其它搜索順序表可以與圖3的搜索順序表不同,也可以彼此不相同。
然后,參考圖4到11以及圖1到3說明存儲池管理系統(tǒng)的工作。這里,存儲池管理系統(tǒng)通過使用分別對應(yīng)于任務(wù)的控制表(TCB任務(wù)控制模塊Task Control Block)控制多個任務(wù),類似于一般的操作系統(tǒng)(或OS)。
首先,任務(wù)程序調(diào)用存儲器占用請求接收部分,以得到存儲區(qū)。即,任務(wù)程序?qū)ù鎯Τ豂D和請求存儲區(qū)容量的占用請求發(fā)送到存儲器占用請求接收部分102。當接收到來自任務(wù)程序的占用請求時,存儲器占用請求接收部分102進行如圖4所示的操作。
如圖4所示,在步驟S401中,存儲器占用請求接收部分102初始化搜索計數(shù)器“Count”。即,存儲器占用請求接收部分102在搜索計數(shù)器“Count”中置“1”作為計數(shù)值。
然后,在步驟S402中,存儲器占用請求接收部分102將存儲池ID、所請求的存儲區(qū)容量和計數(shù)值發(fā)送到搜索順序控制部分101。
接收到的存儲池ID、所請求的存儲區(qū)容量和計數(shù)值后,在步驟S402中,搜索順序控制部分101向存儲器占用請求接收部分102發(fā)送應(yīng)答。應(yīng)答(replay)代表要搜索的子存儲池的子存儲池ID或沒有要搜索的子存儲池(或搜索結(jié)束)。
在步驟S403中,當存儲器占用請求接收部分102接收到搜索順序控制部分101的應(yīng)答時,判斷應(yīng)答是否代表子存儲池ID或沒搜索到。當應(yīng)答代表子存儲池ID時,步驟S403轉(zhuǎn)到步驟S404。另一方面,當應(yīng)答代表沒有要搜索的子存儲池時,步驟S403跳到步驟S408。
在步驟S404中,存儲器占用請求接收部分102將存儲池ID和所請求的存儲區(qū)容量發(fā)送到存儲器占用部分104。存儲器占用部分104嘗試得到或調(diào)取子存儲池中所請求存儲容量的分配的子存儲器ID的存儲區(qū)。存儲器占用部分104將存儲器占用嘗試的結(jié)果通知存儲器占用請求接收部分102。當存儲器占用部分104嘗試成功時,結(jié)果表示占用或調(diào)取的存儲器地址。當存儲器占用部分104嘗試失敗時,結(jié)果表示失敗狀態(tài)。
在步驟S405中,存儲器占用請求接收部分102根據(jù)來自存儲器占用部分104的結(jié)果判斷儲器占用部分104的嘗試是否成功。當結(jié)果表示失敗狀態(tài)時,步驟S405轉(zhuǎn)到步驟S406。當結(jié)果表示存儲器地址時,步驟S405跳到步驟S407。
在步驟S406中,存儲器占用請求接收部分102使搜索計數(shù)器“Count”累加。即,存儲器占用請求接收部分102使當前計數(shù)值加“1”,產(chǎn)生新的計數(shù)值。然后,步驟S406返回到步驟S402。
另一方面,當存儲器占用請求接收部分102在步驟S405中收到存儲器地址時,在步驟S407中,存儲器占用請求接收部分102將存儲器地址發(fā)送到任務(wù)程序。
在步驟S403中,當搜索順序控制部分101通知沒有子存儲池時,在步驟S408中,存儲器占用請求接收部分102將存儲池ID和所請求的存儲區(qū)容量發(fā)送到隊列控制部分105。隊列控制部分105使任務(wù)的TCB在等候任務(wù)隊列中排隊等候?qū)?yīng)于存儲池ID的存儲池。因此,任務(wù)等待在對應(yīng)于存儲池ID的存儲池中發(fā)現(xiàn)可分配的存儲區(qū)。
當在存儲池中發(fā)現(xiàn)可分配的存儲區(qū)時,隊列控制部分105將可分配存儲區(qū)的存儲器地址存儲到TCB中,并喚醒任務(wù)。
在步驟S409中,被喚醒的任務(wù)從TCB中讀出可分配存儲區(qū)的存儲器地址。因此,任務(wù)占用并占用了所需要的存儲區(qū)容量的存儲區(qū)。
下面說明任務(wù)程序調(diào)用存儲器釋放請求接收部分103的情況。在這種情況下,任務(wù)程序?qū)ㄡ尫糯鎯ζ鞯刂返尼尫耪埱蟀l(fā)送到存儲器釋放請求接收部分103。存儲器釋放請求接收部分103接收釋放請求并如圖5所示操作。
在步驟S501中,存儲器釋放請求接收部分103將釋放的存儲器地址發(fā)送到存儲器釋放部分106,以使存儲器釋放部分106釋放所調(diào)取的對應(yīng)于釋放存儲器地址的存儲區(qū)。存儲器釋放部分106找到通過釋放所調(diào)取的在屬于釋放存儲器地址的子存儲池中的存儲區(qū)所形成的最大可用存儲區(qū)。存儲器釋放部分106將包括最大可用存儲區(qū)的子存儲池的子存儲池ID和最大可用存儲區(qū)的容量發(fā)送給存儲器釋放請求接收部分103。
在步驟S502中,根據(jù)接收到的子存儲池ID和最大可用存儲區(qū)容量之后,存儲器釋放請求接收部分103將它們與包括由子存儲池ID代表的子存儲池的存儲池的存儲池ID通知隊列控制部分105。
然后,將說明由存儲器占用請求接收部分102調(diào)用的搜索順序控制部分101的操作。
當搜索順序控制部分101接收到來自存儲器占用請求接收部分102的存儲池ID、所請求的存儲區(qū)容量和“Count”的計數(shù)值時,其操作如圖6所示。
在步驟S601中,搜索順序控制部分101根據(jù)從存儲器占用請求接收部分102發(fā)來的存儲池ID選擇搜索順序表中的一個。
然后,在步驟S602中,搜索順序控制部分101根據(jù)來自存儲器占用請求接收部分102的所請求的存儲區(qū)容量從選定的搜索順序表中找到一個條目。
隨后,在步驟S603中,搜索順序控制部分101判斷從存儲器占用請求接收部分102發(fā)來的計數(shù)值是否大于在找到的條目中的子存儲池ID的數(shù)量。當計數(shù)值等于或小于在找到的條目中的子存儲池ID的數(shù)量時,步驟S603轉(zhuǎn)到步驟S604。在步驟S604中,搜索順序控制部分101將對應(yīng)于計數(shù)值的相應(yīng)的子存儲池ID發(fā)送到存儲器占用請求接收部分102。另一方面,當計數(shù)值大于子存儲池ID的數(shù)量時,步驟S604跳到步驟S605。在步驟S605中,搜索順序控制部分101通知存儲器占用請求接收部分102沒有相應(yīng)的子存儲池ID。換句話說,搜索順序控制部分101通知存儲器占用請求接收部分102搜索結(jié)束。
現(xiàn)在,假設(shè)來自存儲器占用請求接收部分102的存儲池ID和所請求的存儲區(qū)容量分別為存儲池A和256K字節(jié)容量。在這種情況下,搜索順序控制部分101操作如下。
首先,因為存儲池ID表示存儲池A,所以搜索順序控制部分101選擇圖3的搜索順序表。然后,因為所請求的存儲區(qū)容量等于256K字節(jié),所以搜索順序控制部分101選擇搜索順序表的第三個條目。
當來自存儲器占用請求接收部分102的計數(shù)值等于“1”時,搜索順序控制部分101將“A-3”作為子存儲池ID發(fā)送給存儲器占用請求接收部分102。如果計數(shù)值等于“2”、“3”和“3”,則搜索順序控制部分101將分別發(fā)送“A-2”、“A-1”和“A-4”。當計數(shù)值等于“5”時,搜索順序控制部分101通知存儲器占用請求接收部分102搜索結(jié)束。
下面參考圖7到9說明隊列控制部分105的操作。從存儲器占用請求接收部分102收到存儲池ID和所請求的存儲區(qū)容量時,隊列控制部分105的操作如圖7所示。此外,當被存儲器釋放請求接收部分103調(diào)用或從存儲器釋放請求接收部分103收到存儲池ID、子存儲池ID和最大可用存儲區(qū)容量時,隊列控制部分105的操作如圖9所示。
如圖7所示,在步驟S701中,當從存儲器占用請求接收部分102收到存儲池ID和所請求的存儲區(qū)容量后,隊列控制部分105得到對應(yīng)于產(chǎn)生存儲池ID和所請求存儲區(qū)容量的任務(wù)的TCB。TCB具有用來存儲所請求的存儲區(qū)容量的第一域和用來存儲可分配的存儲區(qū)的存儲器地址的第二域,如圖8所示。
然后,在步驟S702中,隊列控制部分105將所請求的存儲區(qū)容量儲存在所得到的TCB的第一域中,并將第二域清空使之為零。
最后,在步驟S703中,TCB在等候任務(wù)隊列中排隊等候?qū)?yīng)于存儲池ID的存儲池,并由此使任務(wù)進入休眠狀態(tài)。例如,如圖8所示的情況,因為已經(jīng)有三個TCB在排隊,所以該TCB為第四個。等候任務(wù)隊列用已知的方法處理,例如FIFO方法、根據(jù)任務(wù)優(yōu)先權(quán)的方法等。無論如何,等候任務(wù)隊列采用調(diào)度程序(未示)來處理。
如圖9所示,在步驟S901中,當隊列控制部分105接收到存儲池ID、子存儲池ID和最大可用存儲區(qū)容量時,用最大可用存儲區(qū)容量代替“下一個容量”。
然后,在步驟S902中,隊列控制部分105判斷在對應(yīng)于存儲池ID的等候任務(wù)隊列中是否還剩有TCB。當在等候任務(wù)隊列中還留有TCB時,步驟S902轉(zhuǎn)到步驟S903。另一方面,當在等候任務(wù)隊列中沒有TCB時,步驟S902到結(jié)束。
在步驟S903中,隊列控制部分105得到在等候任務(wù)隊列最前面的TCB。
接著,在步驟S904中,隊列控制部分105將存儲在所得到的TCB中的所請求的存儲區(qū)容量與“下一個容量”進行比較。當所請求的存儲區(qū)容量等于或小于“下一個容量”時,步驟S904轉(zhuǎn)到步驟S905。當所請求的存儲區(qū)容量大于“下一個容量”時,步驟S904轉(zhuǎn)到結(jié)束。
在步驟S905中,隊列控制部分105使存儲池查詢部分1204從對應(yīng)于子存儲池ID的子存儲池中得到具有所請求的存儲區(qū)容量的存儲區(qū)。
隨后,隊列控制部分105從等候任務(wù)隊列中取出TCB并將由存儲池查詢部分1204得到的調(diào)取存儲區(qū)的存儲器地址存儲到TCB的第二域中。此外,隊列控制部分105喚醒對應(yīng)TCB的任務(wù)。
接著,在步驟S907中,隊列控制部分105從“下一個容量”中減去所請求的存儲區(qū)容量,以得到新的“下一個容量”。然后,步驟S907返回到步驟S902。
在本實施例中,隊列控制部分105僅考慮從存儲器占用請求接收部分102發(fā)來的對應(yīng)于子存儲池ID的子存儲池。但是,也可以考慮從存儲器占用請求接收部分102發(fā)來的對應(yīng)于存儲池ID的存儲池的子存儲池。這通過使隊列控制部分105具有表示在個子存儲池中的最大可用存儲區(qū)容量的最大容量表來實現(xiàn)。在這種情況下,在步驟S904中,隊列控制部分105通過采用最大容量表將在TCB中存儲的所請求的存儲區(qū)容量與在各存儲池中的最大可用存儲區(qū)容量進行比較。在這種情況下,使用搜索順序控制部分101是有利的。
下面參考圖10說明存儲池查詢部分1204的操作。
存儲池查詢部分104從存儲器占用請求接收部分102或隊列控制部分105收到子存儲池ID和所請求的存儲區(qū)容量,如上所述。然后,在步驟S1001中,存儲池查詢部分1204嘗試從對應(yīng)于子存儲池ID的子存儲池中得到所請求存儲容量的存儲區(qū)。該嘗試通過采用已知的方法進行。
下面在步驟S1002中,存儲池查詢部分1204判斷是否得到了存儲區(qū)。
當在步驟S1002中得到了存儲區(qū)時,在步驟S1003中,存儲池查詢部分1204將所得到的存儲區(qū)的存儲器地址發(fā)送到存儲器占用請求接收部分102或隊列控制部分105。
另一方面,當在步驟S1002中沒有得到存儲區(qū)時,在步驟S1004中,存儲池查詢部分1204將失敗狀態(tài)的結(jié)果發(fā)送到存儲器占用請求接收部分102或隊列控制部分105。
然后,參考圖11說明存儲器釋放部分106的操作。
如圖11所示,在步驟S1101中,存儲器釋放部分106根據(jù)存儲器釋放請求接收部分103發(fā)來的相應(yīng)的釋放存儲器地址釋放調(diào)取的存儲區(qū)。
接下來,在步驟S1102中,存儲器釋放部分106發(fā)送子存儲池的子存儲池ID,其中包括所調(diào)取的存儲區(qū)的釋放存儲器地址和由釋放所調(diào)取的存儲區(qū)形成的最大可用存儲區(qū)。
如上所述,本實施例的存儲池管理系統(tǒng)以子存儲池為單位按關(guān)于所請求的存儲區(qū)容量的預定的搜索順序在存儲池中搜索等于或大于所請求的存儲區(qū)容量的可分配的存儲區(qū)。因此,存儲池管理系統(tǒng)可以有效地利用存儲器100。即,存儲池管理系統(tǒng)可以抑制可用存儲區(qū)的碎片和分區(qū)缺點的出現(xiàn)。
因為子存儲池的考慮了所調(diào)取的存儲區(qū)容量的搜索順序依賴于所請求的存儲區(qū)容量,并且局部化了在各存儲池的子存儲池,所以難以產(chǎn)生碎片。
因為不僅在特定的一個子存儲池中進行可分配存儲區(qū)的搜索,而且在輸入搜索順序表的其它子存儲池中進行,所以不會出現(xiàn)分區(qū)缺點。
參考圖12到17,說明根據(jù)本發(fā)明第二實施例的存儲池管理系統(tǒng)。
存儲池管理系統(tǒng)通過采用符合TRON ASSOCIATION的μITRON3.0的操作系統(tǒng)的標準規(guī)范的操作系統(tǒng)的存儲器管理功能來實現(xiàn)。
圖12是存儲池管理系統(tǒng)的方框圖。存儲池管理系統(tǒng)與圖1的不同點在于具有符合OS μITRON 3.0的標準規(guī)范的存儲池查詢部分1204、存儲池等候和占用部分1205以及存儲器釋放部分1206。在OSμITRON 3.0的標準規(guī)范中,存儲池查詢部分1204、存儲池等候和占用部分1205以及存儲器釋放部分1206分別定義為“pget_blk”、“get_blk”和“rel_blk”的系統(tǒng)調(diào)用。
此外,存儲池管理系統(tǒng)包括搜索順序控制部分1201、存儲器占用請求接收部分1202和存儲器釋放請求接收部分1203。搜索順序控制部分1201、存儲器占用請求接收部分1202和存儲器釋放請求接收部分1203與圖1中的類似。
OS μITRON 3.0的標準規(guī)范在存儲器中定義了多個存儲池。在本實施例中,存儲池管理系統(tǒng)管理作為圖2的子存儲池的存儲池,以形成對應(yīng)于圖2的存儲池的存儲池組,如圖13所示。
存儲池管理系統(tǒng)采用搜索順序表響應(yīng)存儲器占用請求搜索可分配存儲區(qū)。搜索順序表分別對應(yīng)于存儲池組。
在圖14中示出了搜索順序表的例子。搜索順序表為存儲池組A的。與圖3的搜索順序表的不同點在于具有用于進入等候存儲池ID的列。在存儲池查詢部分1204在相應(yīng)的存儲池組中沒有找到可分配的存儲區(qū)的情況下,對應(yīng)于各等候存儲池ID的存儲池通過存儲池等候和占用部分1205進行搜索。為了區(qū)分正常搜索順序的存儲池ID和等候存儲池ID,在下文中存儲池ID將被稱作正常池ID。雖然等候存儲池ID通常對應(yīng)于各條目中搜索順序的第一個正常池ID,但這不是必需的。
參考圖15到17以及圖12到14說明存儲池管理系統(tǒng)的操作。
當任務(wù)程序調(diào)用存儲器占用請求接收部分1202時,將包括存儲池組ID和所請求的存儲區(qū)容量的存儲器占用請求發(fā)送到存儲器占用請求接收部分1202。收到的存儲器占用請求后,存儲器占用請求接收部分1202如圖15所示。
首先,在步驟S1501中,存儲器占用請求接收部分1202初始化搜索計數(shù)器“Count”的計數(shù)值。
然后,在步驟S1502中,存儲器占用請求接收部分1202向搜索順序控制部分1201發(fā)送存儲池組ID、所請求的存儲區(qū)容量和計數(shù)值。
接收到的存儲池ID、所請求的存儲區(qū)容量和計數(shù)值之后,在步驟S1202中,搜索順序控制部分1201向存儲器占用請求接收部分1202發(fā)送應(yīng)答。應(yīng)答(replay)表示要搜索的子存儲池的子存儲池ID或沒有要搜索的子存儲池。
在步驟S1503中,當存儲器占用請求接收部分1202接收到搜索順序控制部分1201的應(yīng)答時,判斷應(yīng)答是否代表子存儲池ID或沒搜索到。當應(yīng)答代表子存儲池ID時,步驟S1503轉(zhuǎn)到步驟S1504。另一方面,當應(yīng)答代表沒有要搜索的子存儲池時,步驟S1503跳到步驟S1508。
在步驟S1504中,存儲器占用請求接收部分1202將存儲池ID和所請求的存儲區(qū)容量發(fā)送到存儲池查詢部分1204。存儲池查詢部分1204從分配的子存儲器ID的子存儲池中嘗試得到或調(diào)取具有所請求存儲容量的存儲區(qū)。存儲池查詢部分1204將存儲器占用嘗試的結(jié)果通知存儲器占用請求接收部分1202。當存儲池查詢部分1204嘗試成功時,結(jié)果表示占用或調(diào)取的存儲區(qū)的存儲器地址。當存儲池查詢部分1204嘗試失敗時,結(jié)果表示失敗狀態(tài)。
在步驟S1505中,存儲器占用請求接收部分1202判斷來自存儲池查詢部分1204的結(jié)果是否為失敗狀態(tài)。當結(jié)果表示失敗狀態(tài)時,存儲器占用請求接收部分1202判斷存儲池查詢部分嘗試失敗,步驟S1505轉(zhuǎn)到步驟S1506。當結(jié)果表示存儲器地址時,存儲器占用請求接收部分1202判斷存儲池查詢部分得到了存儲器地址,步驟S1505跳到步驟S1507。
在步驟S1506中,存儲器占用請求接收部分1202使搜索計數(shù)器“Count”累加。即,存儲器占用請求接收部分1202使當前計數(shù)值加“1”,產(chǎn)生新的計數(shù)值。然后,步驟S1506返回到步驟S1502。
另一方面,當存儲器占用請求接收部分1202在步驟S1505中收到存儲器地址時,在步驟S1507中,存儲器占用請求接收部分1202將存儲器地址發(fā)送給任務(wù)程序。
在步驟S1503中,當存儲器占用請求接收部分1202接收到表示沒有要搜索的存儲池的應(yīng)答時,在步驟S1508中,將計數(shù)值“0”與存儲池組ID和所請求的存儲區(qū)容量一起發(fā)送到搜索順序控制部分1201。
接收到的計數(shù)值“0”、存儲池組ID和所請求的存儲區(qū)容量之后,搜索順序控制部分1201將對應(yīng)于存儲池組ID和所請求的存儲區(qū)容量的等候存儲池ID發(fā)送到存儲器占用請求接收部分1202。
然后,在步驟S1508中,存儲器占用請求接收部分1202將從搜索順序控制部分1201發(fā)來的等候存儲池ID和所請求的存儲區(qū)容量一起發(fā)送到存儲池等候和占用部分1205。
存儲池等候和占用部分1205通過OS μITRON 3.0實現(xiàn)了等待可分配存儲區(qū)出現(xiàn)的功能。存儲池等候和占用部分1205代替了圖1的隊列控制部分105的一部分。當可分配存儲區(qū)出現(xiàn)在等候存儲池分配的等候存儲池中時,存儲池等候和占用部分1205得到具有所請求的存儲區(qū)容量的存儲區(qū)。
下面參考圖16說明由任務(wù)程序調(diào)用的存儲器釋放請求接收部分1203的操作。
當存儲器釋放請求接收部分1203從任務(wù)程序接收到包括釋放存儲器地址的釋放請求時,存儲器釋放請求接收部分1203將釋放存儲器地址發(fā)送到存儲器釋放部分1206。
接收到的釋放存儲器地址后,存儲器釋放部分1206釋放所調(diào)取的對應(yīng)于釋放存儲器地址的存儲區(qū)。具有由OS μITRON 3.0實現(xiàn)的功能的存儲器釋放部分1206通知存儲池等候和占用部分1205釋放所調(diào)取的存儲區(qū)。即,存儲器釋放部分1206代替了圖1的隊列控制部分105的另一部分。釋放所調(diào)取的存儲區(qū)的通知只在當存儲池等候和占用部分1205等待在包括釋放的存儲區(qū)的存儲池中的可分配存儲區(qū)的出現(xiàn)時進行。
下面參考圖17說明由存儲器占用請求接收部分1202調(diào)用的搜索順序控制部分1201的操作。
當搜索順序控制部分1201接收到來自存儲器占用請求接收部分1202的存儲池組ID、所請求的存儲區(qū)容量和計數(shù)值時,其操作如圖17所示。
在步驟S1701中,搜索順序控制部分1201根據(jù)從存儲器占用請求接收部分1202發(fā)來的存儲池組ID選擇搜索順序表中的一個。
然后,在步驟S1702中,搜索順序控制部分1201根據(jù)來自存儲器占用請求接收部分1202的所請求的存儲區(qū)容量從選定的搜索順序表中找到一個條目。
隨后,搜索順序控制部分1201判斷從存儲器占用請求接收部分1202發(fā)來的計數(shù)值是等于“0”。當計數(shù)值等于“0”時,在步驟S1706中,搜索順序控制部分1201將所發(fā)現(xiàn)的條目的等候存儲池ID發(fā)送到存儲器占用請求接收部分1202。
當計數(shù)值不等于“0”時,在步驟S1704中,搜索順序控制部分1201進一步判斷計數(shù)值是否大于所發(fā)現(xiàn)條目中正常存儲池ID的數(shù)量。
當計數(shù)值等于或小于所發(fā)現(xiàn)條目中正常存儲池ID的數(shù)量時,在步驟S1705中,搜索順序控制部分1201將對應(yīng)于計數(shù)值的相應(yīng)的存儲池ID發(fā)送到存儲器占用請求接收部分1202。
另一方面,當計數(shù)值大于所發(fā)現(xiàn)條目中正常存儲池ID的數(shù)量時,在步驟S1707中,搜索順序控制部分1201通知存儲器占用請求接收部分1202沒有要搜索的存儲池。
根據(jù)本實施例,存儲器管理系統(tǒng)沒有可變長度存儲池管理系統(tǒng)或固定長度存儲池管理系統(tǒng)所存在的問題。因此,存儲池管理系統(tǒng)可以有效地利用存儲器100。即,存儲池管理系統(tǒng)可以抑制可用存儲區(qū)的碎片和分區(qū)缺點的出現(xiàn)。
因為存儲池的搜索順序依賴于所請求的存儲區(qū)容量,并且局部化了在各存儲池組中的存儲池,考慮了所調(diào)取的存儲區(qū)的容量,所以難以產(chǎn)生碎片。
因為不僅在特定的一個存儲池中進行可分配存儲區(qū)的搜索,而且在進入搜索順序表的其它存儲池中進行,所以不會出現(xiàn)分區(qū)缺點。
雖然本發(fā)明僅結(jié)合優(yōu)選實施例進行了說明,但是對于本領(lǐng)域的技術(shù)人員可以用各種其他方式實現(xiàn)本發(fā)明。例如,搜索順序控制部分(101或1201)、存儲器占用請求接收部分(102或1202)以及存儲器釋放請求接收部分(103或1203)可以與不同于μITRON 3.0的操作系統(tǒng)的存儲器管理功能相結(jié)合。
此外,存儲池管理系統(tǒng)可以包括計算機程序產(chǎn)品或軟件。計算機程序產(chǎn)品用在計算機中,并包括計算機可讀的指令以及存儲計算機可讀指令的記錄媒體。指令用于讓計算機能夠如上所述地操作。
權(quán)利要求
1.一種存儲池管理方法,用于從具有多個子存儲池的存儲池中得到存儲區(qū),包括以下步驟接收來自任務(wù)程序的指定請求存儲區(qū)容量的存儲區(qū)占用請求;以子存儲池為單位按關(guān)于請求存儲區(qū)容量的預定的搜索順序,從存儲池中搜索等于或大于所請求存儲區(qū)容量的可分配存儲區(qū);以及當在任何一個所述子存儲池中發(fā)現(xiàn)所述可分配存儲區(qū)時,從可分配存儲區(qū)得到所請求存儲區(qū)容量的所述存儲區(qū)。
2.根據(jù)權(quán)利要求1的存儲池管理方法,其中預定的搜索順序從關(guān)于預先確定的用于對所請求的存儲區(qū)容量進行分類的不同容量范圍的多個搜索順序中選擇。
3.根據(jù)權(quán)利要求1的存儲池管理方法,其中所述方法還包括以下步驟在搜索步驟中,在所述存儲池中未發(fā)現(xiàn)所述可分配存儲區(qū)的情況下,等待在所述存儲池中所述可分配存儲區(qū)的出現(xiàn)。
4.根據(jù)權(quán)利要求1的存儲池管理方法,其中所述子存儲池相應(yīng)于由μITRON 3.0操作系統(tǒng)所定義的存儲池。
5.一種用在計算機中的計算機程序產(chǎn)品,從具有多個子存儲池的存儲池中得到存儲區(qū),所述計算機程序產(chǎn)品包括計算機可讀的指令和存儲計算機可讀指令的記錄媒體;該指令是可改變的,以使所述計算機能夠根據(jù)以下步驟操作接收來自任務(wù)程序的指定請求存儲區(qū)容量的存儲區(qū)占用請求;以子存儲池為單位按關(guān)于請求存儲區(qū)容量的預定的搜索順序,從所述存儲池中搜索等于或大于所請求存儲區(qū)容量的可分配存儲區(qū);以及當在任何一個所述子存儲池中發(fā)現(xiàn)所述可分配存儲區(qū)時,從可分配存儲區(qū)得到所請求存儲區(qū)容量的所述存儲區(qū)。
6.根據(jù)權(quán)利要求5的計算機程序產(chǎn)品,其中預定的搜索順序從關(guān)于預先確定的用于對所請求的存儲區(qū)容量進行分類的不同容量范圍的多個搜索順序中選擇。
7.根據(jù)權(quán)利要求5的計算機程序產(chǎn)品,其中指令還包括以下步驟在搜索步驟中,在所述存儲池中未發(fā)現(xiàn)所述可分配存儲區(qū)的情況下,等待在所述存儲池中所述可分配存儲區(qū)的出現(xiàn)。
8.根據(jù)權(quán)利要求5的計算機程序產(chǎn)品,其中所述子存儲池相應(yīng)于由μITRON 3.0操作系統(tǒng)所定義的存儲池。
9.一種存儲池管理系統(tǒng),用于從具有多個子存儲池的存儲池中得到存儲區(qū),所述存儲池管理系統(tǒng)包括用來接收來自任務(wù)程序的指定請求存儲區(qū)容量的存儲區(qū)占用請求的占用請求接收部分;連接到所述接收部分的搜索順序控制部分,用來根據(jù)關(guān)于請求存儲區(qū)容量的預定的搜索順序通知子存儲池ID,響應(yīng)所述占用請求接收部分的請求;以及連接到所述占用請求接收部分的占用部分,用來嘗試根據(jù)從所述搜索順序控制部分通過所述占用請求接收部分發(fā)來的相應(yīng)的子存儲池ID從子存儲池中占用所請求存儲區(qū)容量的所述存儲區(qū)。
10.根據(jù)權(quán)利要求9的存儲池管理系統(tǒng),其中預定的搜索順序從關(guān)于預先確定的用于對所請求的存儲區(qū)容量進行分類的不同容量范圍的多個搜索順序中選擇。
11.根據(jù)權(quán)利要求9的存儲池管理系統(tǒng),其中所述存儲池管理系統(tǒng)還包括一個等待部分,用于在所述搜索順序控制部分通知所述占用請求接收部分搜索結(jié)束的情況下,等待在所述存儲池中等于或大于所述請求的存儲區(qū)容量的可分配存儲區(qū)的出現(xiàn)。
12.根據(jù)權(quán)利要求9的存儲池管理系統(tǒng),其中所述子存儲池相應(yīng)于由μITRON 3.0操作系統(tǒng)所定義的存儲池。
全文摘要
搜索順序控制部分具有用于具有子存儲池的存儲池的搜索順序表。搜索順序表具有條目,其中輸入了所請求的存儲區(qū)容量范圍和相應(yīng)的搜索順序。搜索順序控制部分響應(yīng)占用請求接收部分的請求,通過使用搜索順序表找到要搜索的子存儲池,用作可分配存儲區(qū)。搜索順序控制部分通知占用請求接收部分所找到的子存儲池的子存儲池ID。占用請求接收部分使占用部分嘗試從子存儲池ID的子存儲池得到具有所請求的存儲區(qū)容量的存儲區(qū)。占用請求接收部分重復上述操作,直到占用部分得到存儲區(qū)或搜索順序控制部分通知搜索結(jié)束。
文檔編號G06F12/02GK1432922SQ0215984
公開日2003年7月30日 申請日期2002年12月27日 優(yōu)先權(quán)日2001年12月27日
發(fā)明者角廣崇 申請人:日本電氣株式會社