專(zhuān)利名稱(chēng):信息處理設(shè)備、存儲(chǔ)區(qū)管理方法和計(jì)算機(jī)程序的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一個(gè)信息處理設(shè)備、一個(gè)存儲(chǔ)區(qū)管理方法和一個(gè)計(jì)算機(jī)程序。更具體地說(shuō),本發(fā)明涉及一個(gè)信息處理設(shè)備、一個(gè)存儲(chǔ)區(qū)管理方法和一個(gè)計(jì)算機(jī)程序,用于在有多個(gè)線(xiàn)程(threads)并行訪(fǎng)問(wèn)和更新存儲(chǔ)區(qū)的配置中分配一個(gè)合適的存儲(chǔ)區(qū)并執(zhí)行存儲(chǔ)管理進(jìn)程。
背景技術(shù):
在單個(gè)的操作系統(tǒng)或多個(gè)操作系統(tǒng)上執(zhí)行多個(gè)數(shù)據(jù)處理程序時(shí),系統(tǒng)共用的硬件,例如,CPU或存儲(chǔ)器,是按照時(shí)間順序來(lái)依次切換的。例如,可用區(qū)段管理軟件程序來(lái)執(zhí)行多個(gè)操作系統(tǒng)(OS)的進(jìn)程(任務(wù))調(diào)度。如果OS(α)和OS(β)共存于一個(gè)單獨(dú)的系統(tǒng)中,其中OS(α)的進(jìn)程是區(qū)段A,OS(β)的進(jìn)程是區(qū)段B,那么,區(qū)段管理軟件程序就為區(qū)段A和區(qū)段B確定調(diào)度,并用根據(jù)由所確定的調(diào)度而分配的硬件資源來(lái)執(zhí)行這些操作系統(tǒng)的進(jìn)程。
專(zhuān)利文獻(xiàn)1揭示了一個(gè)多OS系統(tǒng)的任務(wù)管理技術(shù)。根據(jù)此揭示內(nèi)容,并按照加在緊急性進(jìn)程上的優(yōu)先級(jí)來(lái)調(diào)度要由多個(gè)操作系統(tǒng)執(zhí)行的任務(wù)。
在至少一個(gè)操作系統(tǒng)(OS)上執(zhí)行多個(gè)程序的時(shí)候,存在多個(gè)線(xiàn)程,它們中的每一個(gè)都定義為一個(gè)程序執(zhí)行單元,并且每個(gè)線(xiàn)程都使用一個(gè)作為共用資源的存儲(chǔ)器。如果企圖將由指定線(xiàn)程當(dāng)前存取的一個(gè)特定的存儲(chǔ)區(qū)釋放給另一個(gè)線(xiàn)程的話(huà),就會(huì)引發(fā)一個(gè)存取差錯(cuò)。在已知的工藝技術(shù)中,通過(guò)設(shè)置一個(gè)禁止中斷期來(lái)防止差錯(cuò)引發(fā)。禁止中斷期的設(shè)置導(dǎo)致了另外的問(wèn)題,例如,進(jìn)程延遲。
未經(jīng)審查的日本專(zhuān)利申請(qǐng)出版物No.2003-345612。
發(fā)明內(nèi)容
鑒于上述的問(wèn)題研發(fā)了此本發(fā)明,本發(fā)明的一個(gè)目的是提供一個(gè)信息處理設(shè)備、一個(gè)存儲(chǔ)區(qū)管理方法和一個(gè)計(jì)算機(jī)程序,用以分配合適的存儲(chǔ)區(qū),并在多線(xiàn)程并行訪(fǎng)問(wèn)和更新存儲(chǔ)區(qū)的配置中,按照無(wú)存取差錯(cuò)的方式執(zhí)行存儲(chǔ)管理進(jìn)程。
解決這些問(wèn)題的方法如下。
根據(jù)本發(fā)明的第一方面,信息處理設(shè)備包括一個(gè)用于根據(jù)每個(gè)數(shù)據(jù)處理單元來(lái)管理線(xiàn)程信息的線(xiàn)程管理器和一個(gè)用于管理存儲(chǔ)區(qū)的存儲(chǔ)區(qū)管理器。該線(xiàn)程管理器存儲(chǔ)一個(gè)包含登錄時(shí)間信息的線(xiàn)程列表(thread list)作為線(xiàn)程管理信息,該登錄時(shí)間信息是根據(jù)每個(gè)線(xiàn)程并作為操作系統(tǒng)的功能調(diào)用時(shí)間由數(shù)據(jù)處理程序記錄的。存儲(chǔ)區(qū)管理器存儲(chǔ)一個(gè)含有釋放請(qǐng)求時(shí)間的釋放隊(duì)列作為存儲(chǔ)區(qū)管理信息,該釋放請(qǐng)求時(shí)間是根據(jù)區(qū)單元記錄的,并與請(qǐng)求釋放但還尚未釋放的存儲(chǔ)區(qū)有關(guān);在存儲(chǔ)區(qū)的分配進(jìn)程中,存儲(chǔ)區(qū)管理器將設(shè)置在含于釋放隊(duì)列內(nèi)的每個(gè)隊(duì)列成分中的釋放請(qǐng)求時(shí)間與線(xiàn)程列表中的每個(gè)隊(duì)列成分的最老的登錄時(shí)間相比較,并分配與具有釋放請(qǐng)求時(shí)間的隊(duì)列成分相應(yīng)的存儲(chǔ)區(qū),在此,該釋放請(qǐng)求時(shí)間是設(shè)置在最老的登錄時(shí)間之前的。
在本發(fā)明的一個(gè)具體實(shí)施例的信息處理設(shè)備中,線(xiàn)程管理器相應(yīng)于多個(gè)處理器中的每一個(gè)產(chǎn)生一個(gè)線(xiàn)程列表,并將含于登錄時(shí)間信息中的最老的登錄時(shí)間記錄到每個(gè)線(xiàn)程列表的標(biāo)題中,在此,該登錄時(shí)間信息是設(shè)置在含于線(xiàn)程列表內(nèi)的線(xiàn)程信息中的,并管理所記錄的、設(shè)置來(lái)要由另一個(gè)處理器訪(fǎng)問(wèn)的信息。
在本發(fā)明的一個(gè)具體實(shí)施例的信息處理設(shè)備中,存儲(chǔ)區(qū)管理器訪(fǎng)問(wèn)所有的最老的登錄時(shí)間信息,該信息是設(shè)置在與由線(xiàn)程管理器管理的處理器相應(yīng)的線(xiàn)程列表的標(biāo)題中,并從最老的登錄時(shí)間信息中選擇最老的登錄時(shí)間中的最老的一個(gè),在此,最老的登錄時(shí)間信息是設(shè)置在與全部處理器相應(yīng)的線(xiàn)程列表的標(biāo)題中的,將選中的最老的登錄時(shí)間與設(shè)置在含于釋放隊(duì)列內(nèi)的每個(gè)隊(duì)列成分中的釋放請(qǐng)求時(shí)間相比較,并分配與具有釋放請(qǐng)求時(shí)間的隊(duì)列成分相應(yīng)的一個(gè)存儲(chǔ)區(qū),在此,該釋放請(qǐng)求時(shí)間是設(shè)置在所選擇的最老的登錄時(shí)間之前的。
在本發(fā)明的一個(gè)具體實(shí)施例的信息處理設(shè)備中,線(xiàn)程管理器在線(xiàn)程列表的標(biāo)題和一個(gè)表成分上記錄另一個(gè)表成分的標(biāo)識(shí)信息,并將該線(xiàn)程列表編制成為一個(gè)允許從標(biāo)題中依次獲取每個(gè)成分的一個(gè)表,并在線(xiàn)程登錄或線(xiàn)程退役時(shí)更新設(shè)置在標(biāo)題或表成分之一中的標(biāo)識(shí)信息。
在本發(fā)明的一個(gè)具體實(shí)施例的信息處理設(shè)備中,存儲(chǔ)區(qū)管理器在釋放隊(duì)列的標(biāo)題和一個(gè)隊(duì)列成分上記錄另一個(gè)隊(duì)列成分的標(biāo)識(shí)信息,并將釋放隊(duì)列編制成為一個(gè)允許從標(biāo)題中依次獲取每個(gè)隊(duì)列成分的表,并在設(shè)置一個(gè)新隊(duì)列或取消一個(gè)隊(duì)列時(shí),更新設(shè)置在標(biāo)題和隊(duì)列成分之一中的標(biāo)識(shí)信息。
在本發(fā)明的一個(gè)具體實(shí)施例的信息處理設(shè)備中,存儲(chǔ)區(qū)管理器根據(jù)每個(gè)堆單元來(lái)執(zhí)行存儲(chǔ)區(qū)管理進(jìn)程,作為具有限定尺寸的存儲(chǔ)區(qū)的堆單元是相應(yīng)于每個(gè)處理器而設(shè)置的;存儲(chǔ)區(qū)管理器還存儲(chǔ)含有釋放請(qǐng)求時(shí)間的釋放隊(duì)列作為存儲(chǔ)區(qū)管理信息,該釋放請(qǐng)求時(shí)間是根據(jù)一個(gè)堆單元來(lái)記錄的,并與請(qǐng)求釋放但尚未釋放的堆有關(guān);在存儲(chǔ)區(qū)的分配進(jìn)程內(nèi),在含于釋放隊(duì)列內(nèi)的隊(duì)列成分中,分配根據(jù)每個(gè)堆單元記錄的存儲(chǔ)區(qū)。
在本發(fā)明的一個(gè)具體實(shí)施例的信息處理設(shè)備中,存儲(chǔ)區(qū)管理器檢查由訪(fǎng)問(wèn)存儲(chǔ)區(qū)的弱指示符組成的弱指示符鏈,該存儲(chǔ)區(qū)是與含于釋放隊(duì)列中的隊(duì)列成分相對(duì)應(yīng)的,如果在弱指示符鏈中沒(méi)有弱指示符存在,就從釋放隊(duì)列中除去該隊(duì)列成分,并釋放與此隊(duì)列成分相應(yīng)的存儲(chǔ)區(qū)。
在本發(fā)明的一個(gè)具體實(shí)施例的信息處理設(shè)備中,存儲(chǔ)區(qū)管理器檢查含于弱指示符鏈中的存儲(chǔ)區(qū)的退役標(biāo)志,該弱指示符鏈?zhǔn)怯梢粋€(gè)弱指示符組成的,該弱指示符訪(fǎng)問(wèn)與含于釋放隊(duì)列內(nèi)的隊(duì)列成分相應(yīng)的存儲(chǔ)區(qū)以及包含弱指示符訪(fǎng)問(wèn)區(qū)的存儲(chǔ)區(qū),如果退役標(biāo)志表示一個(gè)退役狀態(tài),就從釋放隊(duì)列中除去該隊(duì)列成分,并釋放與該隊(duì)列成分相應(yīng)的存儲(chǔ)區(qū)。
根據(jù)本發(fā)明的第二方面,一個(gè)存儲(chǔ)區(qū)管理方法包括如下步驟一個(gè)線(xiàn)程管理步驟,該步驟產(chǎn)生和更新一個(gè)線(xiàn)程列表,該線(xiàn)程列表是由含有登錄時(shí)間信息的線(xiàn)程信息組成的,該登錄時(shí)間信息是根據(jù)每個(gè)線(xiàn)程并作為操作系統(tǒng)的功能調(diào)用時(shí)間由數(shù)據(jù)處理程序記錄的;一個(gè)存儲(chǔ)區(qū)管理步驟,該步驟產(chǎn)生和更新含有釋放請(qǐng)求時(shí)間的釋放隊(duì)列作為存儲(chǔ)區(qū)管理信息,該釋放請(qǐng)求時(shí)間是根據(jù)每個(gè)區(qū)記錄的,并與請(qǐng)求釋放但尚未釋放的存儲(chǔ)區(qū)相關(guān);一個(gè)存儲(chǔ)區(qū)分配步驟,在存儲(chǔ)區(qū)分配進(jìn)程中,該步驟通過(guò)比較設(shè)置在含于釋放隊(duì)列內(nèi)的每個(gè)隊(duì)列成分中的釋放請(qǐng)求時(shí)間與線(xiàn)程列表中的每個(gè)隊(duì)列成分的最老的登錄時(shí)間,來(lái)分配與具有登錄請(qǐng)求時(shí)間的隊(duì)列成分相應(yīng)的存儲(chǔ)區(qū),在此,該登錄請(qǐng)求時(shí)間是設(shè)置在最老的登錄時(shí)間之前的。
在本發(fā)明的一個(gè)具體實(shí)施例的存儲(chǔ)區(qū)管理方法中,線(xiàn)程管理步驟包括相應(yīng)于多個(gè)處理器中的每一個(gè)產(chǎn)生一個(gè)線(xiàn)程列表;將含于登錄時(shí)間信息內(nèi)的最老的登錄時(shí)間記錄到每個(gè)線(xiàn)程列表的標(biāo)題中,在此,該登錄時(shí)間信息是設(shè)置在含于線(xiàn)程列表內(nèi)的線(xiàn)程信息中的;管理所記錄的、要由另一個(gè)處理器訪(fǎng)問(wèn)的信息。
在本發(fā)明的一個(gè)具體實(shí)施例的存儲(chǔ)區(qū)管理方法中,存儲(chǔ)區(qū)分配步驟包括訪(fǎng)問(wèn)設(shè)置在與處理器相應(yīng)的線(xiàn)程列表的標(biāo)題中的所有的最老的登錄時(shí)間信息;在與全部處理器相應(yīng)的線(xiàn)程列表的標(biāo)題中,從最老的登錄時(shí)間信息中選擇最老的登錄時(shí)間中的最老的一個(gè),該最老的登錄時(shí)間信息設(shè)置在與全部處理器相應(yīng)的線(xiàn)程列表的標(biāo)題中;將所選擇的最老的登錄時(shí)間與設(shè)置在含于釋放隊(duì)列內(nèi)的每個(gè)隊(duì)列成分中的釋放請(qǐng)求時(shí)間相比較;分配與具有釋放請(qǐng)求時(shí)間的隊(duì)列成分相應(yīng)的存儲(chǔ)區(qū),在此,該釋放請(qǐng)求時(shí)間是設(shè)置在所選擇的最老的登錄時(shí)間之前的。
在本發(fā)明的一個(gè)具體實(shí)施例的存儲(chǔ)區(qū)管理方法中,線(xiàn)程管理步驟包括在線(xiàn)程列表的標(biāo)題和一個(gè)表成分上記錄另一個(gè)表成分的標(biāo)識(shí)信息,將線(xiàn)程列表編制成為一個(gè)允許從標(biāo)題中依序獲取每個(gè)成分的一個(gè)表,并在線(xiàn)程登錄或線(xiàn)程退役時(shí),更新設(shè)置在標(biāo)題和表成分之一中的標(biāo)識(shí)信息。
在本發(fā)明的一個(gè)具體實(shí)施例的存儲(chǔ)區(qū)管理方法中,存儲(chǔ)區(qū)管理步驟包括在釋放隊(duì)列的標(biāo)題和一個(gè)隊(duì)列成分上記錄另一個(gè)隊(duì)列成分的標(biāo)識(shí)信息;將釋放隊(duì)列編制成為允許從標(biāo)題中依次獲取每個(gè)隊(duì)列成分的一個(gè)表;在設(shè)置一個(gè)新隊(duì)列或取消一個(gè)隊(duì)列時(shí),更新設(shè)置在標(biāo)題或隊(duì)列成分之一中的標(biāo)識(shí)信息。
在本發(fā)明的一個(gè)具體實(shí)施例的存儲(chǔ)區(qū)管理方法中,存儲(chǔ)區(qū)管理步驟包括根據(jù)每個(gè)堆單元執(zhí)行存儲(chǔ)區(qū)管理進(jìn)程,作為具有限定尺寸的存儲(chǔ)區(qū)的堆單元是相應(yīng)于每個(gè)處理器而設(shè)置的;存儲(chǔ)含有釋放請(qǐng)求時(shí)間的釋放隊(duì)列作為存儲(chǔ)區(qū)的管理信息,該釋放請(qǐng)求時(shí)間是根據(jù)一個(gè)堆單元記錄的,并與請(qǐng)求釋放但尚未釋放的存儲(chǔ)區(qū)相關(guān)。存儲(chǔ)區(qū)分配步驟包括在含于釋放隊(duì)列內(nèi)的隊(duì)列成分中分配根據(jù)每個(gè)堆單元記錄的存儲(chǔ)區(qū)。
在本發(fā)明的一個(gè)具體實(shí)施例的存儲(chǔ)區(qū)管理方法中,存儲(chǔ)區(qū)管理步驟包括檢查由一個(gè)弱指示符組成的弱指示符鏈,該弱指示符訪(fǎng)問(wèn)與含于釋放隊(duì)列中的隊(duì)列成分相應(yīng)的存儲(chǔ)區(qū),如果在此弱指示符鏈中不存在弱指示符,就從釋放隊(duì)列中除去該隊(duì)列成分,并釋放與該隊(duì)列成分相應(yīng)的存儲(chǔ)區(qū)。
在本發(fā)明的一個(gè)具體實(shí)施例的存儲(chǔ)區(qū)管理方法中,存儲(chǔ)區(qū)管理步驟包括檢查含于弱指示符鏈中的存儲(chǔ)區(qū)的退役標(biāo)志,該弱指示符鏈?zhǔn)怯梢粋€(gè)弱指示符組成的,該弱指示符訪(fǎng)問(wèn)與含于釋放隊(duì)列中的隊(duì)列成分相應(yīng)的存儲(chǔ)區(qū)和含有弱指示符訪(fǎng)問(wèn)區(qū)的存儲(chǔ)區(qū),如果退役標(biāo)志表示一個(gè)退役狀態(tài),就從釋放隊(duì)列中除去該隊(duì)列成分,并釋放與該隊(duì)列成分相應(yīng)的存儲(chǔ)區(qū)。
根據(jù)本發(fā)明的第三方面,用于執(zhí)行存儲(chǔ)區(qū)管理進(jìn)程的計(jì)算機(jī)程序包括一個(gè)線(xiàn)程管理步驟,該步驟產(chǎn)生和更新一個(gè)由含有登錄時(shí)間信息的線(xiàn)程信息組成的線(xiàn)程列表,該登錄時(shí)間信息是根據(jù)每個(gè)線(xiàn)程并作為一個(gè)操作系統(tǒng)的功能調(diào)用時(shí)間由數(shù)據(jù)處理程序記錄的;一個(gè)存儲(chǔ)區(qū)管理步驟,該步驟產(chǎn)生并更新含有釋放請(qǐng)求時(shí)間的釋放隊(duì)列作為存儲(chǔ)區(qū)管理信息,該釋放請(qǐng)求時(shí)間是根據(jù)每個(gè)區(qū)記錄的,并與請(qǐng)求釋放但尚未釋放的存儲(chǔ)區(qū)相關(guān);一個(gè)存儲(chǔ)區(qū)分配步驟,在存儲(chǔ)區(qū)分配進(jìn)程中,通過(guò)比較設(shè)置在含于釋放隊(duì)列內(nèi)的每個(gè)隊(duì)列成分中的釋放請(qǐng)求時(shí)間和在線(xiàn)程列表中的每個(gè)隊(duì)列成分的最老的登錄時(shí)間,來(lái)分配與具有登錄請(qǐng)求時(shí)間的隊(duì)列成分相應(yīng)的存儲(chǔ)區(qū),在此,該登錄請(qǐng)求時(shí)間是設(shè)置在最老的登錄時(shí)間之前的。
本發(fā)明為執(zhí)行各種各樣的程序代碼的通用計(jì)算機(jī)系統(tǒng)提供了計(jì)算機(jī)程序,這些程序存儲(chǔ)在如像CD(光盤(pán))、FD(軟盤(pán))或MO(磁光盤(pán))之類(lèi)的計(jì)算機(jī)可讀的存儲(chǔ)介質(zhì)中,或者通過(guò)如像網(wǎng)絡(luò)之類(lèi)的通信介質(zhì)而得到。通過(guò)以計(jì)算機(jī)可讀方式提供計(jì)算機(jī)程序,計(jì)算機(jī)系統(tǒng)執(zhí)行對(duì)計(jì)算機(jī)程序敏感的處理。
根據(jù)本發(fā)明的下面的說(shuō)明和附圖,本發(fā)明的這些和其它的特征和優(yōu)點(diǎn)將會(huì)變得更為明顯。在本發(fā)明的說(shuō)明的上下文中,系統(tǒng)一詞是指多個(gè)設(shè)備的邏輯集,并不限于把多個(gè)部件裝在同一個(gè)機(jī)箱中的一個(gè)設(shè)備。
根據(jù)本發(fā)明的具體實(shí)施例,含有登錄時(shí)間信息的線(xiàn)程信息的線(xiàn)程列表是作為線(xiàn)程管理信息存儲(chǔ)的,由于每一個(gè)線(xiàn)程是作為一個(gè)數(shù)據(jù)處理單元,因此,所述的登錄時(shí)間信息是根據(jù)線(xiàn)程來(lái)記錄的,含有釋放請(qǐng)求時(shí)間的釋放隊(duì)列是作為存儲(chǔ)區(qū)管理信息存儲(chǔ)的,在此,釋放請(qǐng)求時(shí)間是按一個(gè)區(qū)單元記錄的,并與請(qǐng)求釋放但尚未釋放的存儲(chǔ)區(qū)相關(guān)。在存儲(chǔ)區(qū)的分配進(jìn)程中,比較設(shè)置在含于釋放隊(duì)列內(nèi)的每個(gè)隊(duì)列成分中的釋放請(qǐng)求時(shí)間和在線(xiàn)程列表中的每個(gè)隊(duì)列成分的最老的登錄時(shí)間。僅在與具有釋放請(qǐng)求時(shí)間的隊(duì)列成分相應(yīng)的存儲(chǔ)區(qū)上執(zhí)行存儲(chǔ)分配處理,在此,該釋放請(qǐng)求時(shí)間是設(shè)置在最老的登錄時(shí)間之前的。在所有的線(xiàn)程中,只有不是存取目標(biāo)的那個(gè)存儲(chǔ)區(qū)才能被可靠地選擇并對(duì)其進(jìn)行分配處理。在每個(gè)線(xiàn)程中以不產(chǎn)生存取差錯(cuò)的方式來(lái)安全地進(jìn)行存儲(chǔ)區(qū)分配處理。
圖1是本發(fā)明的信息處理設(shè)備的方塊圖。
圖2示出了一個(gè)處理器模塊。
圖3示出了本發(fā)明的信息處理設(shè)備的軟件結(jié)構(gòu)。
圖4示出了對(duì)典型的存儲(chǔ)區(qū)的存取進(jìn)程。
圖5示出了對(duì)典型的存儲(chǔ)區(qū)的存取進(jìn)程。
圖6示出了在本發(fā)明的信息處理設(shè)備中由線(xiàn)程管理器管理的信息。
圖7詳細(xì)地示出了在本發(fā)明的信息處理設(shè)備中由線(xiàn)程管理器管理的信息。
圖8示出了在本發(fā)明的信息處理設(shè)備中由存儲(chǔ)區(qū)管理器管理的信息。
圖9是一個(gè)流程圖,該圖示出了在本發(fā)明的信息處理設(shè)備中由線(xiàn)程管理器執(zhí)行的線(xiàn)程信息登錄進(jìn)程的順序。
圖10詳細(xì)地示出了在本發(fā)明的信息處理設(shè)備中由線(xiàn)程管理器執(zhí)行的線(xiàn)程信息登錄進(jìn)程。
圖11是一個(gè)流程圖,該圖示出了在本發(fā)明的信息處理設(shè)備中由線(xiàn)程管理器執(zhí)行的線(xiàn)程信息退役進(jìn)程的順序。
圖12詳細(xì)地說(shuō)明了在本發(fā)明的信息處理設(shè)備中由線(xiàn)程管理器執(zhí)行的線(xiàn)程信息退役進(jìn)程的順序。
圖13是一個(gè)流程圖,該圖示出了在本發(fā)明的信息處理設(shè)備中由存儲(chǔ)區(qū)管理器執(zhí)行的存儲(chǔ)區(qū)釋放請(qǐng)求登記進(jìn)程的順序。
圖14是一個(gè)流程圖,該圖詳細(xì)地示出了在本發(fā)明的信息處理設(shè)備中由存儲(chǔ)區(qū)管理器執(zhí)行的存儲(chǔ)區(qū)分配進(jìn)程。
圖15示出了弱指示符和弱指示符鏈的結(jié)構(gòu)。
圖16是一個(gè)流程圖,該圖示出了從弱指示符中獲取一個(gè)值的指示符值獲取進(jìn)程。
圖17是一個(gè)流程圖,該圖示出了在含有弱指示符的結(jié)構(gòu)中,一個(gè)釋放隊(duì)列的處理(刷新處理)順序。
具體實(shí)施例方式
以下將參照附圖來(lái)詳細(xì)說(shuō)明本發(fā)明的一個(gè)信息處理設(shè)備、一個(gè)存儲(chǔ)區(qū)管理方法和一個(gè)計(jì)算機(jī)程序。
下面將參照?qǐng)D1來(lái)說(shuō)明本發(fā)明的信息處理設(shè)備的硬件結(jié)構(gòu)。處理器模塊101包括多個(gè)處理器(處理單元),并根據(jù)存儲(chǔ)在ROM(只讀存儲(chǔ)器)104和HDD(硬盤(pán)驅(qū)動(dòng)器)123中的各種程序來(lái)處理數(shù)據(jù),這些程序包括操作系統(tǒng)(OS)和在操作系統(tǒng)上運(yùn)行的應(yīng)用程序。下面將參照?qǐng)D2來(lái)說(shuō)明處理器模塊101。
為了響應(yīng)通過(guò)處理器模塊101輸入的指令,一個(gè)圖形驅(qū)動(dòng)程序102產(chǎn)生要在構(gòu)成輸出單元122的顯示器的屏幕上顯示的數(shù)據(jù),并進(jìn)行三維圖形的繪圖處理。主存儲(chǔ)器(DRAW)103存儲(chǔ)由處理器模塊101執(zhí)行的程序以及在執(zhí)行程序的過(guò)程中變化的參數(shù)。通過(guò)包括CPU總線(xiàn)在內(nèi)的主機(jī)總線(xiàn)111將這些部件互連起來(lái)。
通過(guò)橋接器105將主機(jī)總線(xiàn)連接到如像PCI(外圍部件互連/接口)總線(xiàn)之類(lèi)的外部總線(xiàn)112上。橋接器105控制在主機(jī)總線(xiàn)111、外部總線(xiàn)112、控制器106、存儲(chǔ)卡107和其它設(shè)備之間的數(shù)據(jù)輸入和輸出。
輸入單元121將信息輸入到由用戶(hù)操作的輸入裝置中,這些輸入裝置如像鍵盤(pán)和定位設(shè)備。輸出單元122包括一個(gè)如像液晶顯示器和CRT(陰極射線(xiàn)管)之類(lèi)的圖像輸出單元,以及如像揚(yáng)聲器之類(lèi)的音頻輸出裝置。
HDD(硬盤(pán)驅(qū)動(dòng)器)123驅(qū)動(dòng)裝在其中的硬盤(pán),從而記錄或回放要由處理器模塊101執(zhí)行的程序和信息。
驅(qū)動(dòng)器124讀取數(shù)據(jù)和程序,這些數(shù)據(jù)和程序是存儲(chǔ)在一個(gè)己裝入但又可圻除的記錄介質(zhì)127上的,這種記錄介質(zhì)如像磁盤(pán)、光盤(pán)、磁光盤(pán)、半導(dǎo)體存儲(chǔ)器或類(lèi)似的介質(zhì),并通過(guò)接口113、外部總線(xiàn)112、橋接器105和主機(jī)總線(xiàn)111向主存儲(chǔ)器(DRAM)103提供數(shù)據(jù)和程序。
連接端口125與外部設(shè)備128相連接,并且可以包括USB、IEEE 1349總線(xiàn)或類(lèi)似的線(xiàn)路。連接端口125通過(guò)接口113、外部總線(xiàn)112、橋接器105和主機(jī)總線(xiàn)111與處理器模塊101相連接。與網(wǎng)絡(luò)相連的通信單元126發(fā)送由HDD123或類(lèi)似裝置提供的數(shù)據(jù),并從外部接收數(shù)據(jù)。
下面將參照?qǐng)D2來(lái)說(shuō)明處理器模塊的結(jié)構(gòu)。如圖所示,處理器模塊200包括含有多個(gè)主處理器單元的主處理器組201,以及多個(gè)副處理器組202到20n,每個(gè)副處理器組都含有多個(gè)副處理器單元。每個(gè)處理器組進(jìn)而包括一個(gè)存儲(chǔ)控制器和一個(gè)次級(jí)高速緩沖存儲(chǔ)器。處理器組201到20n通過(guò)縱橫交叉(cross-bar)結(jié)構(gòu)和分組交換網(wǎng)絡(luò)之一連接起來(lái),它們中的每一個(gè)都包含八個(gè)處理器單元。為了響應(yīng)主處理器組201中的一個(gè)主處理器的指令,在多個(gè)副處理器組202到20n中至少選擇一個(gè)副處理器來(lái)執(zhí)行預(yù)定的程序。
在每個(gè)處理器組中,存儲(chǔ)流量控制器控制圖1中的主存儲(chǔ)器103的數(shù)據(jù)輸入和數(shù)據(jù)輸出。在每個(gè)處理器組中,次級(jí)高速緩沖存儲(chǔ)器作為處理數(shù)據(jù)的存儲(chǔ)區(qū)之用。
如上所述,如果在一個(gè)或多個(gè)操作系統(tǒng)上有多個(gè)程序運(yùn)行,就存在由程序執(zhí)行單元定義的多個(gè)線(xiàn)程,并且使用一個(gè)如像圖1的主存儲(chǔ)器(DRAM)之類(lèi)的存儲(chǔ)器來(lái)作為多個(gè)線(xiàn)程的共用資源。在另一個(gè)線(xiàn)程存取該存儲(chǔ)區(qū)的時(shí)候,如果一個(gè)線(xiàn)程企圖對(duì)一個(gè)存儲(chǔ)區(qū)執(zhí)行釋放進(jìn)程,就會(huì)引發(fā)存取差錯(cuò)。在已知的工藝技術(shù)中,通過(guò)設(shè)置一個(gè)禁止中斷期來(lái)防止引發(fā)存取差錯(cuò),但是,設(shè)置禁止中斷期會(huì)導(dǎo)致諸如進(jìn)程延遲之類(lèi)的繼發(fā)性問(wèn)題。
根據(jù)本發(fā)明,通過(guò)執(zhí)行一個(gè)合適的、對(duì)線(xiàn)程敏感的存儲(chǔ)管理來(lái)進(jìn)行有效的數(shù)據(jù)處理。下面將參照?qǐng)D3來(lái)詳細(xì)討論適合于線(xiàn)程的存儲(chǔ)分配和釋放進(jìn)程。
圖3示出了在本發(fā)明的信息處理設(shè)備中的一個(gè)軟件棧。該軟件棧是由操作系統(tǒng)(OS)310和在該操作系統(tǒng)上執(zhí)行的應(yīng)用程序320組成的。操作系統(tǒng)(OS)310包括用于執(zhí)行多任務(wù)控制、文件系統(tǒng)管理、存儲(chǔ)管理以及輸入和輸出處理的核心程序311。
核心程序311包括線(xiàn)程管理器(系統(tǒng)調(diào)用調(diào)度程序)312、用于進(jìn)行存儲(chǔ)區(qū)管理的存儲(chǔ)區(qū)管理器(堆管理模塊)313以及其它的核心程序模塊314。
在面向?qū)ο蟮拇鎯?chǔ)管理進(jìn)程中,將一個(gè)資源當(dāng)作一個(gè)對(duì)象來(lái)處理,并根據(jù)具有限定尺寸的、被稱(chēng)其為一個(gè)堆的存儲(chǔ)區(qū)來(lái)進(jìn)行存儲(chǔ)管理。存儲(chǔ)區(qū)管理器(堆管理模塊)313管理給這個(gè)堆的對(duì)象分配。在給每個(gè)請(qǐng)求堆的線(xiàn)程有效地分配存儲(chǔ)區(qū)(堆)的時(shí)候,存儲(chǔ)區(qū)管理器(堆管理模塊)313釋放一個(gè)限定的堆。
下面將參照?qǐng)D4和圖5來(lái)說(shuō)明給線(xiàn)程分配存儲(chǔ)區(qū)的一個(gè)典型的存儲(chǔ)分配進(jìn)程。如圖4所示,可以由一個(gè)執(zhí)行程序的線(xiàn)程通過(guò)被設(shè)置為指示符信息的標(biāo)識(shí)(ID)表350來(lái)存取在圖4中被設(shè)置為對(duì)象的存儲(chǔ)區(qū)x351、存儲(chǔ)區(qū)y352、存儲(chǔ)區(qū)z353。
為了避免第二線(xiàn)程的存取,操作系統(tǒng)(OS)的核心程序鎖定ID表350,以防止第二線(xiàn)程存取由第一線(xiàn)當(dāng)前存取的存儲(chǔ)區(qū)。這樣,直到解鎖ID表350時(shí),第二線(xiàn)程才能存取該存儲(chǔ)區(qū),因此,數(shù)據(jù)處理必須等待。
圖5示出了具有兩層結(jié)構(gòu)的ID表。ID表a371用于存取作為對(duì)象的存儲(chǔ)區(qū)x361和存儲(chǔ)區(qū)z362等。存儲(chǔ)區(qū)z362進(jìn)而包含第二個(gè)ID表b372,并允許通過(guò)應(yīng)用第二個(gè)ID表b372來(lái)存取存儲(chǔ)區(qū)a363和存儲(chǔ)區(qū)b364。照此方式,OS的核心程序鎖定ID表以防止其它的線(xiàn)程存取此存儲(chǔ)區(qū)。這樣,直到釋放鎖定時(shí)其它的線(xiàn)程才能進(jìn)行存儲(chǔ)存取,從而延遲了數(shù)據(jù)處理。
在使用存儲(chǔ)區(qū)x361的期間,即使不使用一個(gè)單個(gè)的區(qū)域,例如,圖5的存儲(chǔ)區(qū)a363和存儲(chǔ)區(qū)b364之一,在存儲(chǔ)管理進(jìn)程中,核心程序也要鎖定ID表a371。結(jié)果,不能有效地使用可以利用的存儲(chǔ)區(qū)。
本發(fā)明克服了這樣無(wú)效使用存儲(chǔ)器的問(wèn)題,從而可以對(duì)每個(gè)線(xiàn)程進(jìn)行有效的存儲(chǔ)區(qū)分配。在如圖3所示的核心程序311中,由線(xiàn)程管理器(系統(tǒng)調(diào)用調(diào)度程序)312和存儲(chǔ)區(qū)管理器(堆管理模塊)313來(lái)進(jìn)行這樣的一個(gè)進(jìn)程。下面將詳細(xì)說(shuō)明這個(gè)進(jìn)程。
下面將參照?qǐng)D6和圖7來(lái)說(shuō)明線(xiàn)程管理器(系統(tǒng)調(diào)用調(diào)度程序)312的進(jìn)程。
線(xiàn)程管理器(系統(tǒng)調(diào)用調(diào)度程序)312為每個(gè)處理器執(zhí)行線(xiàn)程,這些處理器裝在信息處理設(shè)備中以供執(zhí)行線(xiàn)程之用。線(xiàn)程管理器(系統(tǒng)調(diào)用調(diào)度程序)312根據(jù)每個(gè)處理器來(lái)保留線(xiàn)程管理信息。
下面將參照?qǐng)D6和圖7來(lái)說(shuō)明線(xiàn)程管理信息。圖6示出了根據(jù)每個(gè)處理器來(lái)生成線(xiàn)程管理信息的線(xiàn)程列表。圖中示出了僅與處理器1和處理器2對(duì)應(yīng)的線(xiàn)程列表。線(xiàn)程管理器(系統(tǒng)調(diào)用調(diào)度程序)312產(chǎn)生并保留與執(zhí)行線(xiàn)程的處理器相對(duì)應(yīng)的、作為線(xiàn)程管理信息的線(xiàn)程列表。
圖6(a)示出了作為處理器1的線(xiàn)程管理信息的線(xiàn)程列表。該線(xiàn)程列表是由在處理器1的管理程序中運(yùn)行的單個(gè)線(xiàn)程的登錄時(shí)間信息和最老的登錄時(shí)間信息的并置數(shù)據(jù)組成的。圖6(b)示出了作為處理器2的線(xiàn)程管理信息的線(xiàn)程列表。該線(xiàn)程列表是由在處理器2的管理程序中運(yùn)行的單個(gè)線(xiàn)程的登錄時(shí)間信息和最老的登錄時(shí)間信息的并置數(shù)據(jù)組成的。線(xiàn)程的登錄時(shí)間信息是指一個(gè)操作系統(tǒng)從作為各種數(shù)據(jù)處理程序的應(yīng)用程序中調(diào)用功能(function call)的時(shí)間。在任何線(xiàn)程列表中,可由另一個(gè)處理器來(lái)訪(fǎng)問(wèn)此最老的登錄時(shí)間信息。如前所述,線(xiàn)程是一個(gè)與邏輯區(qū)相應(yīng)的數(shù)據(jù)處理執(zhí)行單元。為了執(zhí)行該線(xiàn)程,保留了如像處理器和存儲(chǔ)區(qū)之類(lèi)的各種資源。
如果確定了用于執(zhí)行線(xiàn)程的處理器,就給該處理器的線(xiàn)程分配可以利用的存儲(chǔ)區(qū)。線(xiàn)程管理器(系統(tǒng)調(diào)用調(diào)度程序)312在處理器中分發(fā)線(xiàn)程,產(chǎn)生一個(gè)作為與存儲(chǔ)區(qū)分配相關(guān)的線(xiàn)程信息的線(xiàn)程列表,并管理這些線(xiàn)程。
管理程序是配置在邏輯區(qū)和硬件之間的一個(gè)特許層,并管理邏輯區(qū)。線(xiàn)程是一個(gè)由邏輯區(qū)執(zhí)行的進(jìn)程。如像由圖1和圖2中的處理器模塊所執(zhí)行的線(xiàn)程那樣,在此所述的線(xiàn)程是由邏輯區(qū)來(lái)執(zhí)行的。給每個(gè)邏輯區(qū)分配硬件資源,這些資源包括計(jì)算資源、主處理器、副處理器、存儲(chǔ)器和其它設(shè)備,并且邏輯區(qū)使用分配給它的資源來(lái)執(zhí)行這些進(jìn)程。
線(xiàn)程管理器(系統(tǒng)調(diào)用調(diào)度程序)312記錄并保留與線(xiàn)程相關(guān)的登錄時(shí)間信息,該線(xiàn)程是由作為特許層配置在邏輯區(qū)和硬件之間的管理程序來(lái)鑒別的。
下面將參照?qǐng)D7來(lái)詳細(xì)說(shuō)明由線(xiàn)程管理器(系統(tǒng)調(diào)用調(diào)度程序)312保留的線(xiàn)程列表信息。如參照?qǐng)D6所述,作為每個(gè)處理器的線(xiàn)程管理信息的線(xiàn)程列表包括每個(gè)線(xiàn)程的登錄時(shí)間信息和最老的登錄時(shí)間信息的并置數(shù)據(jù)。如圖7所示,管理信息包括根據(jù)每個(gè)處理器設(shè)置的變量400和根據(jù)每個(gè)線(xiàn)程設(shè)置的變量410。如前所述,線(xiàn)程的登錄時(shí)間信息與操作系統(tǒng)調(diào)用應(yīng)用程序的功能調(diào)用時(shí)間(function call time)相對(duì)應(yīng),這些應(yīng)用程序起著各種數(shù)據(jù)處理程序的作用。
根據(jù)每個(gè)處理器設(shè)置的變量400包括標(biāo)題(報(bào)頭)401和最老的登錄時(shí)間(oldest_time)402。標(biāo)題(報(bào)頭)401包括表前端元素的指示符信息。最老的登錄時(shí)間(oldest_time)402包括設(shè)置在表內(nèi)的若干元素中的最老的登錄時(shí)間信息。適當(dāng)?shù)馗逻@個(gè)表以響應(yīng)線(xiàn)程登錄和線(xiàn)程退役。在更新進(jìn)程中,如果在構(gòu)成表的元素中更新最老的登錄時(shí)間,那么,最老的登錄時(shí)間(oldest_time)402也一起被更新。鑒于存取進(jìn)程的效率,將標(biāo)題(報(bào)頭)401和最老的登錄時(shí)間(oldest_time)402存儲(chǔ)在不同的高速緩存線(xiàn)中。存儲(chǔ)標(biāo)題(報(bào)頭)401的高速緩存線(xiàn)只存儲(chǔ)不需要由另一個(gè)處理器訪(fǎng)問(wèn)的那些變量。可由另一個(gè)處理器來(lái)訪(fǎng)問(wèn)保留有最老的登錄時(shí)間(oldest_time)402的高速緩存線(xiàn)。
根據(jù)每個(gè)線(xiàn)程設(shè)置的變量410包括前趨線(xiàn)程標(biāo)識(shí)信息(前趨)411和登錄時(shí)間信息(時(shí)間)412。前趨線(xiàn)程標(biāo)識(shí)信息(前趨)411是前趨線(xiàn)程信息的一個(gè)標(biāo)識(shí)符(例如,一個(gè)指示符)。如所示出的那樣,該表含有線(xiàn)程信息,這些線(xiàn)程信息是按照從具有最近的登錄時(shí)間的線(xiàn)程到具有最老的登錄時(shí)間的線(xiàn)程的順序排列的。根據(jù)前趨線(xiàn)程標(biāo)識(shí)信息(前趨)411來(lái)鑒別每個(gè)線(xiàn)程信息,然后獲取這些信息。根據(jù)最老的登錄信息的標(biāo)題(報(bào)頭)401來(lái)鑒別表前端的線(xiàn)程信息。由于末端線(xiàn)程信息沒(méi)有前趨線(xiàn)程,因此設(shè)置[前趨線(xiàn)程標(biāo)識(shí)信息(前趨)=零]。登錄時(shí)間(時(shí)間)412表示每個(gè)線(xiàn)程的登錄時(shí)間。
下面將參照?qǐng)D8來(lái)說(shuō)明由存儲(chǔ)區(qū)管理器(堆管理模塊)313管理的信息。如前所述,在面向?qū)ο蟮拇鎯?chǔ)管理進(jìn)程中,資源是作為對(duì)象來(lái)處理的,并根據(jù)具有限定尺寸的、被稱(chēng)其為堆的存儲(chǔ)區(qū)來(lái)進(jìn)行存儲(chǔ)管理。管理給堆分配對(duì)象的單元是存儲(chǔ)區(qū)管理器(堆管理模塊)313。在給每個(gè)請(qǐng)求堆的線(xiàn)程有效地分配存儲(chǔ)區(qū)(堆)的時(shí)候,存儲(chǔ)區(qū)管理器(堆管理模塊)313就釋放這個(gè)限定的堆。
存儲(chǔ)區(qū)管理器(堆管理模塊)313保留根據(jù)每個(gè)處理器設(shè)置的堆管理信息。換句話(huà)說(shuō),堆管理信息單元的數(shù)量等于處理器的數(shù)量。堆管理信息包括圖8的釋放隊(duì)列。該釋放隊(duì)列是一個(gè)已請(qǐng)求釋放但尚未釋放的存儲(chǔ)區(qū)(堆)的信息。
如圖8所示,下面將討論由存儲(chǔ)區(qū)管理器(堆管理模塊)313保留的釋放隊(duì)列的結(jié)構(gòu)。作為根據(jù)每個(gè)處理器設(shè)置的堆管理信息設(shè)置了圖8的釋放隊(duì)列。圖8的釋放隊(duì)列是為各個(gè)處理器單獨(dú)配置的。
將釋放隊(duì)列設(shè)置為一個(gè)標(biāo)題信息(釋放_(tái)隊(duì)列_報(bào)頭)451和隊(duì)列成分460的并置表。隊(duì)列成分460包含堆標(biāo)識(shí)符(堆_標(biāo)識(shí))461、釋放請(qǐng)求時(shí)間(釋放_(tái)時(shí)間)462、后繼隊(duì)列信息(后繼)463和存儲(chǔ)區(qū)信息464。
堆標(biāo)識(shí)符(堆_標(biāo)識(shí))461是根據(jù)每個(gè)處理器為一個(gè)存儲(chǔ)區(qū)設(shè)置的堆標(biāo)識(shí)信息。釋放請(qǐng)求時(shí)間462表示堆的請(qǐng)求時(shí)間,也就是說(shuō),在此時(shí)間上線(xiàn)程發(fā)出堆的使用請(qǐng)求。后繼隊(duì)列信息(后繼)463是釋放隊(duì)列中后續(xù)隊(duì)列的指示符。存儲(chǔ)區(qū)信息464是與堆標(biāo)識(shí)符(堆_標(biāo)識(shí))461相應(yīng)的處理器可以利用的存儲(chǔ)區(qū)的存取信息。
標(biāo)題信息(釋放_(tái)隊(duì)列_報(bào)頭)451包含堆標(biāo)識(shí)符(堆_標(biāo)識(shí)),它是設(shè)置為含有前端隊(duì)列的指示符信息的信息。如所示出的那樣,通過(guò)跟蹤每個(gè)隊(duì)列成分的后繼隊(duì)列信息(后繼)463,從標(biāo)題信息(釋放_(tái)隊(duì)列_報(bào)頭)451中獲取全部的隊(duì)列成分。
在資源分配進(jìn)程中,給每個(gè)線(xiàn)程分配可以利用的處理器,鑒別與每個(gè)處理器相應(yīng)的堆區(qū),并準(zhǔn)備執(zhí)行線(xiàn)程。在此時(shí)刻,在與所分配的處理器相應(yīng)的釋放隊(duì)列中設(shè)置隊(duì)列成分。
根據(jù)本發(fā)明,在核心程序311中的線(xiàn)程管理器(系統(tǒng)調(diào)用調(diào)度程序)312和存儲(chǔ)區(qū)管理器(堆管理模塊)313的控制下,給線(xiàn)程進(jìn)行有效的存儲(chǔ)分配。參照?qǐng)D9來(lái)討論在核心程序311中的線(xiàn)程管理器(系統(tǒng)呼叫調(diào)度程序)312和存儲(chǔ)區(qū)管理器(堆管理模塊)313的進(jìn)程。
下面將參照?qǐng)D9到12來(lái)說(shuō)明線(xiàn)程管理器(系統(tǒng)調(diào)用調(diào)度程序)312的進(jìn)程。根據(jù)參照?qǐng)D6和圖7說(shuō)明的線(xiàn)程列表,線(xiàn)程管理器(系統(tǒng)調(diào)用調(diào)度程序)312執(zhí)行線(xiàn)程信息的登錄進(jìn)程和線(xiàn)程信息的退役進(jìn)程。
在應(yīng)用程序調(diào)用操作系統(tǒng)的功能之后,立即執(zhí)行線(xiàn)程信息的登錄進(jìn)程。更具體地說(shuō),在應(yīng)用程序調(diào)用操作系統(tǒng)的功能時(shí),產(chǎn)生使用處理器的數(shù)據(jù)處理線(xiàn)程。該線(xiàn)程設(shè)置在等待釋放存儲(chǔ)區(qū)的備用狀態(tài)上。將與線(xiàn)程相應(yīng)的線(xiàn)程信息重新設(shè)置為線(xiàn)程管理器(系統(tǒng)調(diào)用調(diào)度程序)312的管理信息。
在由操作系統(tǒng)完成一個(gè)系統(tǒng)調(diào)用進(jìn)程并把控制轉(zhuǎn)交給應(yīng)用程序之前,立即執(zhí)行線(xiàn)程信息的退役進(jìn)程。更具體地說(shuō),由操作系統(tǒng)完成存儲(chǔ)分配進(jìn)程,并將控制轉(zhuǎn)交給應(yīng)用程序??梢允褂糜刹僮飨到y(tǒng)分配的處理器和存儲(chǔ)區(qū)來(lái)執(zhí)行線(xiàn)程。在由操作系統(tǒng)完成系統(tǒng)調(diào)用并將控制還給應(yīng)用程序時(shí),將存儲(chǔ)區(qū)(堆)分配給線(xiàn)程。管理存儲(chǔ)區(qū)(堆)中在備用狀態(tài)上的線(xiàn)程信息的線(xiàn)程管理器(系統(tǒng)調(diào)用調(diào)度程序)312從線(xiàn)程列表中刪除線(xiàn)程信息。這個(gè)進(jìn)程就是退役進(jìn)程。
下面將參照?qǐng)D9的流程圖和圖10的方塊圖來(lái)說(shuō)明線(xiàn)程登錄進(jìn)程的順序。執(zhí)行線(xiàn)程登錄進(jìn)程以便將新的線(xiàn)程信息510加到如圖10所示的線(xiàn)程列表中。用含于與數(shù)據(jù)500相關(guān)的處理器中的標(biāo)題信息501來(lái)表示圖10(a)中的新的線(xiàn)程信息510的加入位置。在此加入進(jìn)程中,編造圖10(b)的線(xiàn)程列表。在加入新的線(xiàn)程信息510時(shí),需要更新在現(xiàn)有的線(xiàn)程列表中的各種信息。圖9是更新進(jìn)程的流程圖。
下面將說(shuō)明圖9的流程圖中的每個(gè)步驟。在禁止中斷的狀態(tài)下執(zhí)行圖9中的一系列的步驟。在步驟S101中,將變量[p]設(shè)置為執(zhí)行登錄進(jìn)程的處理器的標(biāo)識(shí)符。如前所述,線(xiàn)程管理器(系統(tǒng)調(diào)用調(diào)度程序)312根據(jù)每個(gè)處理器來(lái)管理線(xiàn)程列表。為了鑒別用于執(zhí)行線(xiàn)程登錄進(jìn)程的線(xiàn)程列表,將變量[p]設(shè)置為執(zhí)行登錄進(jìn)程的處理器的標(biāo)識(shí)符。在步驟S102中,將變量[線(xiàn)程]設(shè)置為執(zhí)行退役進(jìn)程的處理器的標(biāo)識(shí)符。更具體地說(shuō),將可變線(xiàn)程設(shè)置為圖10的線(xiàn)程510的標(biāo)識(shí)符。
在步驟S103中,將變量[老的_報(bào)頭]設(shè)置為前趨線(xiàn)程標(biāo)識(shí)信息(前趨_線(xiàn)程_標(biāo)識(shí)[線(xiàn)程]=報(bào)頭[p])。
此處理步驟表示給圖10(a)的標(biāo)題501設(shè)置的值[報(bào)頭[p]]也是為新的線(xiàn)程信息510的前趨線(xiàn)程信息511設(shè)置的,并且值[head[p]]是為變量[老的_報(bào)頭]設(shè)置的。
在步驟104中,將變量[報(bào)頭[p]]設(shè)置為等于線(xiàn)程。這個(gè)處理步驟表示將為圖10(a)的標(biāo)題501設(shè)置的值設(shè)置為進(jìn)入線(xiàn)程的新的線(xiàn)程信息510的標(biāo)識(shí)符。
在步驟S105中,為一個(gè)可變時(shí)間[線(xiàn)程]設(shè)置現(xiàn)行時(shí)間。這個(gè)處理步驟表示該現(xiàn)行時(shí)間是為圖10(a)的登錄線(xiàn)程信息510的登錄時(shí)間信息512設(shè)置的。
在步驟S106中確定在步驟S103中設(shè)置的變量[老的報(bào)頭]是否是零。在步驟S103中設(shè)置的變量[老的_報(bào)頭]是在登錄進(jìn)程之前為圖10(a)的標(biāo)題501設(shè)置的信息。如果在登錄進(jìn)程之前將圖10(a)的標(biāo)題501設(shè)置為[零],在線(xiàn)程列表中就沒(méi)有線(xiàn)程信息存在,并且圖10的新的線(xiàn)程信息510僅僅是為線(xiàn)程列表設(shè)置的線(xiàn)程信息。含于圖10(a)中的與處理器相關(guān)的數(shù)據(jù)500中的最老的登錄時(shí)間信息502是為在步驟S105中為登錄時(shí)間信息512設(shè)置的信息設(shè)置的,這就是說(shuō),為時(shí)間[線(xiàn)程]設(shè)置的。
如果變量[老的_報(bào)頭]不是[零],在線(xiàn)程列表中就存在其登錄時(shí)間比新的線(xiàn)程信息510更老的線(xiàn)程信息。這樣,不用更新含于如圖10(a)所示的與處理器相關(guān)的數(shù)據(jù)500中的最老的登錄時(shí)間502,就能完成處理。
這個(gè)登錄進(jìn)程產(chǎn)生了這樣的一個(gè)線(xiàn)程列表,其中,在可由與處理器相關(guān)的數(shù)據(jù)500的標(biāo)題501存取的位置上,設(shè)置圖10(b)的新的線(xiàn)程信息510。
下面將參照?qǐng)D11和圖12來(lái)詳細(xì)說(shuō)明由線(xiàn)程管理器(系統(tǒng)調(diào)用調(diào)度程序)312執(zhí)行的線(xiàn)程退役進(jìn)程。在完成操作系統(tǒng)的系統(tǒng)調(diào)用進(jìn)程之后,在把控制退還給應(yīng)用程序之前,立即執(zhí)行線(xiàn)程退役進(jìn)程。在由操作系統(tǒng)完成存儲(chǔ)分配進(jìn)程之后,在把控制退還給應(yīng)用程序之時(shí),能夠使用由操作系統(tǒng)分配的處理器和存儲(chǔ)區(qū)來(lái)執(zhí)行線(xiàn)程。在由操作系統(tǒng)完成存儲(chǔ)分配進(jìn)程之后,在把控制退還給應(yīng)用程序之時(shí),給線(xiàn)程分配存儲(chǔ)區(qū)(堆)。在備用狀態(tài)上管理線(xiàn)程信息的線(xiàn)程管理器(系統(tǒng)調(diào)用調(diào)度程序)312從線(xiàn)程列表中刪除線(xiàn)程信息。這就討論完了線(xiàn)程退役進(jìn)程。
下面將參照?qǐng)D11來(lái)說(shuō)明退役進(jìn)程的處理程序。在禁止中斷的狀態(tài)下執(zhí)行圖11的一系列的步驟。執(zhí)行圖11的步驟S201和S202以確定執(zhí)行退役進(jìn)程的處理器和線(xiàn)程。在步驟S201中,為執(zhí)行退役進(jìn)程的標(biāo)識(shí)符設(shè)置一個(gè)變量[p]。在步驟S202中,為執(zhí)行退役進(jìn)程的當(dāng)前線(xiàn)程的標(biāo)識(shí)符設(shè)置一個(gè)變量[線(xiàn)程]。
在步驟S203中,確定在退役進(jìn)程中要處理的線(xiàn)程的位置。更具體地說(shuō),根據(jù)在線(xiàn)程列表中退役進(jìn)程的線(xiàn)程信息的位置來(lái)確定是否執(zhí)行步驟S211到S213或步驟S221到S224。換句話(huà)說(shuō),如圖12(a)或12(b)所示,進(jìn)程根據(jù)是否找到了要退役的線(xiàn)程信息而變得有所不同。
如圖12(a)所示,在退役進(jìn)程中要處理的線(xiàn)程信息550位于線(xiàn)程列表的前端,這就是說(shuō),在與處理器相關(guān)的數(shù)據(jù)540的標(biāo)題541所規(guī)定的位置上。將與處理器相關(guān)的數(shù)據(jù)540的標(biāo)題541的標(biāo)題信息[head[p]]設(shè)置為要退役的線(xiàn)程信息550的標(biāo)識(shí)信息[線(xiàn)程]。如果在步驟S203中的判定結(jié)果為“是”,就執(zhí)行步驟S211到S213。
如圖12(b)所示,在退役進(jìn)程中要處理的線(xiàn)程信息550并非位于線(xiàn)程列表的前端。在此情況下,就不把與處理器相關(guān)的數(shù)據(jù)540的標(biāo)題541的標(biāo)題信息[報(bào)頭[p]]設(shè)置為在退役進(jìn)程中要處理的線(xiàn)程信息550的標(biāo)識(shí)信息[線(xiàn)程]。如果在步驟S203中的判定結(jié)果為“否”,處理程序就著手進(jìn)行步驟S221到S224。
如圖12(a)所示,線(xiàn)程信息550現(xiàn)在位于線(xiàn)程列表的前面。在步驟S221中,與處理器相關(guān)的數(shù)據(jù)540的標(biāo)題541的標(biāo)題信息[報(bào)頭[p]]是為前趨線(xiàn)程標(biāo)識(shí)信息[前趨[線(xiàn)程]]551設(shè)置的,而此前趨線(xiàn)程標(biāo)識(shí)信息又是為在退役進(jìn)程中要處理的線(xiàn)程信息550設(shè)置的。如圖12(a)所示,這個(gè)處理步驟相當(dāng)于設(shè)置一個(gè)信息,該信息給與處理器相關(guān)的數(shù)據(jù)540的標(biāo)題541規(guī)定一個(gè)線(xiàn)程信息560。在退役進(jìn)程中,如果在要處理的線(xiàn)程信息550中不含有前趨線(xiàn)程,就將前趨線(xiàn)程標(biāo)識(shí)信息[前趨[線(xiàn)程]]551設(shè)置為[零]。同樣地,將標(biāo)題541的標(biāo)題信息[報(bào)頭[p]]設(shè)置為[零]。
在步驟S212中判定是否將與處理器相關(guān)的數(shù)據(jù)540的標(biāo)題541的標(biāo)題信息[報(bào)頭[p]設(shè)置為零。如果判定設(shè)置為零,由于線(xiàn)程信息550的退役,在線(xiàn)程列表中就沒(méi)有線(xiàn)程信息存在了。在此情況下,將與處理器相關(guān)的數(shù)據(jù)540的最老的登錄時(shí)間[最老的_時(shí)間]設(shè)置為0。
如果在步驟S212中判定沒(méi)有把與處理器相關(guān)的數(shù)據(jù)540的標(biāo)題541的標(biāo)題信息[報(bào)頭[p]]設(shè)置為零,即使是在線(xiàn)程信息550退役之后,在線(xiàn)程列表中也存在線(xiàn)程信息。在此情況下,不用重寫(xiě)與處理器相關(guān)的數(shù)據(jù)540的最老的登錄時(shí)間[最老的_時(shí)間],就結(jié)束處理程序。
如圖12(b)所示,在退役進(jìn)程中要處理的線(xiàn)程信息550并非位于線(xiàn)程列表的前面。在步驟S221中,假設(shè)變量[succ]是一個(gè)緊接在線(xiàn)程列表中退役線(xiàn)程前面的線(xiàn)程。在此假設(shè)線(xiàn)程列表的前端是一個(gè)正向端。換句話(huà)說(shuō),這個(gè)緊接在前面的線(xiàn)程相應(yīng)于圖12(b)中的線(xiàn)程信息570。
在步驟S222中,將緊接在退役線(xiàn)程前面的線(xiàn)程的前趨線(xiàn)程標(biāo)識(shí)信息[前趨[succ]]更新為退役線(xiàn)程的前趨線(xiàn)程標(biāo)識(shí)信息[前趨[線(xiàn)程]]。這個(gè)處理步驟相當(dāng)于設(shè)置一個(gè)信息,該信息給圖12(b)所示的線(xiàn)程信息570的前趨線(xiàn)程標(biāo)識(shí)信息規(guī)定了線(xiàn)程信息580。如果在退役進(jìn)程中、在要處理的線(xiàn)程信息550之前沒(méi)有前趨線(xiàn)程存在,就將前趨線(xiàn)程標(biāo)識(shí)信息[前趨[線(xiàn)程]]551設(shè)置為[零],因而,線(xiàn)程信息570的前趨線(xiàn)程標(biāo)識(shí)信息也設(shè)置為[零]。
在步驟S223中,確定是否將退役線(xiàn)程的前趨線(xiàn)程標(biāo)識(shí)信息[前趨[線(xiàn)程]]設(shè)置為零了。如果判定設(shè)置為零了,線(xiàn)程信息550的退役就表示具有最老的登錄時(shí)間的線(xiàn)程的退役。在此情況下,將時(shí)間[succ]設(shè)置為與處理器相關(guān)的數(shù)據(jù)540的最老的登錄時(shí)間[最老的_時(shí)間],并結(jié)束處理程序。換句話(huà)說(shuō),如果不存在圖12(b)的線(xiàn)程信息580,就執(zhí)行此進(jìn)程。將線(xiàn)程信息570的登錄時(shí)間572設(shè)置為與處理器相關(guān)的數(shù)據(jù)540的最老的登錄時(shí)間[最老的_時(shí)間]。
如果在步驟S223中確定沒(méi)有將退役線(xiàn)程的前趨線(xiàn)程標(biāo)識(shí)信息[前趨[線(xiàn)程]]設(shè)置為零,就存在這樣的一個(gè)線(xiàn)程信息,它具有比在退役進(jìn)程中要處理的線(xiàn)程信息550更老的登錄時(shí)間,這個(gè)線(xiàn)程信息就是圖12(b)中的線(xiàn)程信息580。這樣,不用重寫(xiě)與處理器相關(guān)的數(shù)據(jù)540的最老的登錄時(shí)間[最老的_時(shí)間]就結(jié)束處理程序。
下面將參照?qǐng)D13來(lái)說(shuō)明存儲(chǔ)區(qū)管理器(堆管理模塊)313的進(jìn)程。存儲(chǔ)區(qū)管理器(堆管理模塊)313保留了圖8的釋放隊(duì)列,以作為根據(jù)每個(gè)處理器而設(shè)置的堆管理信息。該釋放隊(duì)列是一個(gè)已請(qǐng)求釋放但尚未釋放的存儲(chǔ)區(qū)(堆)的信息。
存儲(chǔ)區(qū)管理器(堆管理模塊)313執(zhí)行存儲(chǔ)區(qū)(堆)的釋放請(qǐng)求登記進(jìn)程和存儲(chǔ)區(qū)分配進(jìn)程。執(zhí)行存儲(chǔ)區(qū)(堆)的釋放請(qǐng)求登記進(jìn)程以便將一個(gè)新的隊(duì)列加入到參照?qǐng)D8說(shuō)明的釋放隊(duì)列中。執(zhí)行存儲(chǔ)區(qū)的分配進(jìn)程以便將存儲(chǔ)區(qū)(堆)分配給線(xiàn)程,并根據(jù)需要從釋放隊(duì)列中刪除一個(gè)隊(duì)列。
下面將參照?qǐng)D13的流程圖來(lái)說(shuō)明存儲(chǔ)區(qū)的釋放請(qǐng)求登記進(jìn)程。在步驟S301中,將一個(gè)隊(duì)列成分的堆標(biāo)識(shí)[hid]設(shè)置為請(qǐng)求釋放存儲(chǔ)區(qū)的一個(gè)堆標(biāo)識(shí)符,在此,該隊(duì)列成分是作為釋放隊(duì)列中的一個(gè)新隊(duì)列而設(shè)置的。如前所述,為與處理器相應(yīng)的每個(gè)堆設(shè)置作為存儲(chǔ)區(qū)管理信息的釋放隊(duì)列。存儲(chǔ)區(qū)管理器(堆管理模塊)313根據(jù)每個(gè)堆來(lái)釋放和分配存儲(chǔ)區(qū)。存儲(chǔ)區(qū)管理器(堆管理模塊)313設(shè)置一個(gè)請(qǐng)求釋放的堆標(biāo)識(shí),作為要加入到釋放隊(duì)列中的隊(duì)列的堆標(biāo)識(shí)。
在步驟S302中,為新的隊(duì)列成分的后繼隊(duì)列信息(后繼)設(shè)置釋放隊(duì)列標(biāo)題(釋放_(tái)隊(duì)列_報(bào)頭[hid])。在步驟S303中,如果確定將釋放隊(duì)列標(biāo)題(釋放_(tái)隊(duì)列_報(bào)頭[hid])的值設(shè)置為等于釋放區(qū)的后繼隊(duì)列信息(后繼),就將新的隊(duì)列成分的指示符信息輸入到釋放隊(duì)列標(biāo)題(釋放_(tái)隊(duì)列_報(bào)頭[hid])中,并在隊(duì)列中設(shè)置如像存儲(chǔ)區(qū)信息之類(lèi)的各種信息。從而結(jié)束處理程序。
在步驟S303中,如果確定釋放隊(duì)列標(biāo)題(釋放_(tái)隊(duì)列_報(bào)頭[hid])的值不等于釋放區(qū)的后繼隊(duì)列信息(后繼),處理程序就回到步驟S302上,以重復(fù)步驟S302和303。在核查了釋放隊(duì)列標(biāo)題(釋放_(tái)隊(duì)列_報(bào)頭[hid])的值等于釋放區(qū)的后繼隊(duì)列信息(后繼)之后,將如像存儲(chǔ)區(qū)信息之類(lèi)的各種信息設(shè)置到隊(duì)列之中。從而結(jié)束處理程序。
在由具有重寫(xiě)的釋放區(qū)的后繼隊(duì)列信息(后繼)的另一個(gè)處理器來(lái)同時(shí)執(zhí)行另一個(gè)隊(duì)列設(shè)置進(jìn)程的時(shí)候,在步驟S303中確定釋放隊(duì)列標(biāo)題(釋放_(tái)隊(duì)列_報(bào)頭[hid])的值不等于釋放區(qū)的后續(xù)隊(duì)列信息(后繼)。
在釋放隊(duì)列中設(shè)置一個(gè)新的隊(duì)列,以響應(yīng)在步驟S303中的確定,即釋放隊(duì)列標(biāo)題(釋放_(tái)隊(duì)列_報(bào)頭[hid])的值等于釋放區(qū)的后續(xù)隊(duì)列信息(后繼)??煽康乇A?保證)與進(jìn)程相應(yīng)的存儲(chǔ)區(qū)。
下面將參照?qǐng)D14來(lái)說(shuō)明存儲(chǔ)區(qū)管理器(堆管理模塊)313的存儲(chǔ)區(qū)(堆)分配進(jìn)程。在步驟S401中,將變量[hid]設(shè)置為執(zhí)行存儲(chǔ)區(qū)分配的處理器的標(biāo)識(shí)符。根據(jù)每個(gè)處理器來(lái)執(zhí)行存儲(chǔ)區(qū)分配進(jìn)程。首先鑒別一個(gè)要為其分配存儲(chǔ)區(qū)的處理器。
在步驟402中確定在存儲(chǔ)器中是否存在一個(gè)其尺寸與請(qǐng)求分配的存儲(chǔ)區(qū)相同的未使用的存儲(chǔ)區(qū)。更具體地說(shuō),存儲(chǔ)區(qū)管理器(堆管理模塊)313檢驗(yàn)在存儲(chǔ)器中是否存在一個(gè)未使用的區(qū)域,它的尺寸與線(xiàn)程所需要的存儲(chǔ)區(qū)的尺寸相同。如果確定有這樣的一個(gè)存儲(chǔ)區(qū),處理程序就進(jìn)行步驟S405。存儲(chǔ)區(qū)管理器(堆管理模塊)313分配該存儲(chǔ)區(qū),以作為與具有在步驟S401中設(shè)置的標(biāo)識(shí)符的處理器相應(yīng)的線(xiàn)程的數(shù)據(jù)處理存儲(chǔ)區(qū)。
如果在步驟402中確定不能得到一個(gè)其尺寸與請(qǐng)求分配的存儲(chǔ)區(qū)的尺寸相同的未使用的存儲(chǔ)區(qū),那么,處理程序就著手進(jìn)行步驟S403。在步驟403中,存儲(chǔ)區(qū)管理器(堆管理模塊)313確定請(qǐng)求分配的存儲(chǔ)區(qū)的尺寸是否小于預(yù)定的閾值。如果確定請(qǐng)求分配的存儲(chǔ)區(qū)的尺寸小于預(yù)定的閾值,處理程序就著手進(jìn)行步驟S404。在步驟S404中,存儲(chǔ)區(qū)管理器(堆管理模塊)313確定在堆區(qū)中是否存在滿(mǎn)足請(qǐng)求分配的存儲(chǔ)區(qū)的尺寸的未使用的存儲(chǔ)區(qū)。如果確定在堆區(qū)中存在滿(mǎn)足請(qǐng)求分配的存儲(chǔ)區(qū)的尺寸的未使用的存儲(chǔ)區(qū),在步驟S405中,存儲(chǔ)區(qū)管理器(堆管理模塊)313就執(zhí)行設(shè)置為未使用的堆區(qū)的存儲(chǔ)區(qū)的分配進(jìn)程。如果所請(qǐng)求的存儲(chǔ)區(qū)的尺寸小于預(yù)定的閾值并且僅滿(mǎn)足未使用的堆區(qū)的分配,就進(jìn)行這個(gè)處理步驟。
如果在步驟403中確定請(qǐng)求分配的存儲(chǔ)區(qū)尺寸不小于預(yù)定的閾值,或者,如果在步驟S404中確定在堆區(qū)中不存在滿(mǎn)足請(qǐng)求分配的存儲(chǔ)區(qū)尺寸的未使用區(qū),那么,在步驟403中確定請(qǐng)求分配的存儲(chǔ)區(qū)尺寸不小于預(yù)定的閾值之后,就進(jìn)行步驟S406和隨后的步驟,以分配存儲(chǔ)區(qū)。通過(guò)訪(fǎng)問(wèn)釋放隊(duì)列和線(xiàn)程列表來(lái)進(jìn)行步驟S406中的處理步驟。
在步驟406中,將變量[報(bào)頭]設(shè)置為釋放隊(duì)列標(biāo)題(釋放_(tái)隊(duì)列_報(bào)頭[hid]),并將釋放隊(duì)列標(biāo)題(釋放_(tái)隊(duì)列_報(bào)頭[hid])設(shè)置為0。
在步驟407中,將變量[時(shí)間]設(shè)置為最老的登錄時(shí)間的最小值,也就是設(shè)置在與全部處理器相應(yīng)的線(xiàn)程列表中的最老的登錄時(shí)間中的最老的一個(gè)。
在步驟S408中,存儲(chǔ)區(qū)管理器(堆管理模塊)313比較釋放請(qǐng)求時(shí)間(釋放_(tái)時(shí)間)和最老的登錄時(shí)間的最小值,在此,所述的釋放請(qǐng)求時(shí)間是設(shè)置在根據(jù)每個(gè)標(biāo)題追蹤的每個(gè)成分中的,而最老的登錄時(shí)間是設(shè)置在與全部處理器相應(yīng)的線(xiàn)程列表中的,這些處理器具有在步驟S407中設(shè)置的時(shí)間[時(shí)間],此外,存儲(chǔ)區(qū)管理器(堆管理模塊)313僅選擇小于值[時(shí)間]的請(qǐng)求釋放時(shí)間(釋放_(tái)時(shí)間)。存儲(chǔ)區(qū)管理器(堆管理模塊)313從釋放隊(duì)列中刪除所選擇的請(qǐng)求釋放時(shí)間(釋放_(tái)時(shí)間),釋放與這些隊(duì)列相應(yīng)的存儲(chǔ)區(qū),并將這些釋放的存儲(chǔ)區(qū)分配給存儲(chǔ)請(qǐng)求線(xiàn)程。
保證在全部處理器的最老的登錄時(shí)間的最小值之前請(qǐng)求釋放的存儲(chǔ)區(qū)不是全部線(xiàn)程的存取目標(biāo)。通過(guò)選擇、釋放并分配存儲(chǔ)區(qū)來(lái)安全地執(zhí)行存儲(chǔ)區(qū)分配處理。
在步驟S409中,為釋放隊(duì)列標(biāo)題(釋放_(tái)隊(duì)列_報(bào)頭[hid])設(shè)置剩余隊(duì)列末端的后繼隊(duì)列信息(后繼),在此,所述的剩余隊(duì)列是指除了在步驟S408中從釋放隊(duì)列中刪除的隊(duì)列以外的隊(duì)列。如果在步驟S410中確定了將釋放隊(duì)列標(biāo)題(釋放_(tái)隊(duì)列_報(bào)頭[hid])的值設(shè)置為等于末端隊(duì)列的后繼隊(duì)列信息(后繼),就為釋放隊(duì)列標(biāo)題(釋放_(tái)隊(duì)列_報(bào)頭[hid])設(shè)置剩余隊(duì)列的前端隊(duì)列的指示符,在此,所述的剩余隊(duì)列是指除了在步驟S408中從釋放隊(duì)列中刪除的隊(duì)列以外的隊(duì)列。
如果在步驟S410中確定沒(méi)有將釋放隊(duì)列標(biāo)題(釋放_(tái)隊(duì)列_報(bào)頭[hid])的值設(shè)置為等于末端隊(duì)列的后繼隊(duì)列信息(后繼),處理程序就回到步驟S409,以重復(fù)步驟409到410。在檢驗(yàn)了將釋放隊(duì)列標(biāo)題(釋放_(tái)隊(duì)列_報(bào)頭[hid])的值設(shè)置為等于末端隊(duì)列的后繼隊(duì)列信息(后繼)之后,存儲(chǔ)區(qū)管理器(堆管理模塊)313就給隊(duì)列設(shè)置如像存儲(chǔ)區(qū)信息之類(lèi)的各種信息。從而結(jié)束處理程序。
如果由具有重寫(xiě)的后繼隊(duì)列信息(后繼)的另一個(gè)處理器來(lái)執(zhí)行另一個(gè)隊(duì)列的設(shè)置和刪除進(jìn)程,在步驟S410中就可以確定沒(méi)有將釋放隊(duì)列標(biāo)題(釋放_(tái)隊(duì)列_報(bào)頭[hid])的值設(shè)置為等于末端隊(duì)列的后繼隊(duì)列信息(后繼)。
存儲(chǔ)區(qū)管理器(堆管理模塊)313僅選擇具有請(qǐng)求釋放時(shí)間(釋放_(tái)時(shí)間)的隊(duì)列,該請(qǐng)求釋放時(shí)間是設(shè)置在小于最老的登錄時(shí)間的最小值的釋放隊(duì)列中,而這些最老的登錄時(shí)間是設(shè)置在與全部處理器相應(yīng)的線(xiàn)程列表之中。存儲(chǔ)區(qū)管理器(堆管理模塊)313從釋放隊(duì)列中刪除所選擇的隊(duì)列,釋放與這些隊(duì)列相應(yīng)的存儲(chǔ)區(qū),并把這些存儲(chǔ)區(qū)分配給存儲(chǔ)請(qǐng)求線(xiàn)程。在存儲(chǔ)分配進(jìn)程中,只能可靠選擇沒(méi)有被設(shè)置為全部線(xiàn)程的存取目標(biāo)的存儲(chǔ)區(qū)。以無(wú)存取差錯(cuò)的方式給每個(gè)線(xiàn)程進(jìn)行存儲(chǔ)區(qū)分配處理。
下面將說(shuō)明一個(gè)用于支持弱指示符應(yīng)用的存儲(chǔ)管理進(jìn)程。已參照?qǐng)D8討論過(guò)了由存儲(chǔ)區(qū)管理器(堆管理模塊)313保留的釋放隊(duì)列的結(jié)構(gòu)。將釋放隊(duì)列設(shè)置成為一個(gè)標(biāo)題信息(釋放_(tái)隊(duì)列_報(bào)頭)451和隊(duì)列成分460的并置表。隊(duì)列成分460包含堆標(biāo)識(shí)符(報(bào)頭_標(biāo)識(shí))461、釋放請(qǐng)求時(shí)間(釋放_(tái)時(shí)間)462、后繼隊(duì)列信息(后繼)463和存儲(chǔ)區(qū)信息464。
堆標(biāo)識(shí)符(報(bào)頭_標(biāo)識(shí))461是相對(duì)于每個(gè)處理器而設(shè)置的存儲(chǔ)區(qū)的堆標(biāo)識(shí)信息。釋放請(qǐng)求時(shí)間(釋放_(tái)時(shí)間)462表示發(fā)出堆請(qǐng)求的時(shí)間,也就是說(shuō),在此時(shí)間上線(xiàn)程發(fā)出一個(gè)堆的使用請(qǐng)求。后繼隊(duì)列信息(后繼)463是釋放隊(duì)列中后繼隊(duì)列的指示符。存儲(chǔ)區(qū)信息464是與堆標(biāo)識(shí)符(報(bào)頭_標(biāo)識(shí))461相應(yīng)的處理器可以利用的存儲(chǔ)區(qū)的存取信息。
標(biāo)題信息(釋放_(tái)隊(duì)列_報(bào)頭)451包括堆標(biāo)識(shí)符(報(bào)頭_標(biāo)識(shí)),它是設(shè)置來(lái)作為含有前端隊(duì)列的指示符信息的信息。如所示,通過(guò)根據(jù)標(biāo)題信息(釋放_(tái)隊(duì)列_報(bào)頭)451來(lái)追蹤每個(gè)隊(duì)列成分的后繼隊(duì)列信息(后繼)463,可以獲得全部的隊(duì)列成分。
在資源分配進(jìn)程中給每個(gè)線(xiàn)程分配可以利用的處理器,鑒別與每個(gè)處理器相應(yīng)的堆區(qū),并且線(xiàn)程是在等待執(zhí)行的備用狀態(tài)上。此刻,在與所分配的處理器相應(yīng)的釋放隊(duì)列中設(shè)置隊(duì)列成分。
參照?qǐng)D8所討論的釋放隊(duì)列是作為存儲(chǔ)區(qū)管理信息來(lái)存儲(chǔ)的。為了分配存儲(chǔ)區(qū),將為釋放隊(duì)列中的每個(gè)隊(duì)列成分設(shè)置的釋放請(qǐng)求時(shí)間和線(xiàn)程列表中的最老的登錄時(shí)間相比較。在帶有釋放請(qǐng)求時(shí)間的隊(duì)列成分上執(zhí)行存儲(chǔ)區(qū)的分配進(jìn)程,在此,該釋放請(qǐng)求時(shí)間是在最老的登錄時(shí)間之前設(shè)置的,并對(duì)全部線(xiàn)程中沒(méi)有被設(shè)置為存取目標(biāo)的存儲(chǔ)區(qū)可靠地執(zhí)行此存儲(chǔ)區(qū)分配進(jìn)程。以無(wú)存取差錯(cuò)的方式在每個(gè)線(xiàn)程中執(zhí)行存儲(chǔ)區(qū)分配進(jìn)程。
能夠用訪(fǎng)問(wèn)計(jì)數(shù)器(rf)的值來(lái)確定存儲(chǔ)區(qū)是否是可以存取的。為每個(gè)堆(存儲(chǔ)區(qū))設(shè)置訪(fǎng)問(wèn)計(jì)數(shù)器。如果訪(fǎng)問(wèn)計(jì)數(shù)器的計(jì)數(shù)為1或更大,就能訪(fǎng)問(wèn)這個(gè)堆(存儲(chǔ)區(qū))。換句話(huà)說(shuō),存在訪(fǎng)問(wèn)這個(gè)堆的線(xiàn)程。
為了存取這個(gè)堆(存儲(chǔ)區(qū)),從保留有堆(存儲(chǔ)區(qū))地址信息的指示符對(duì)象(pointer object)中獲取存儲(chǔ)地址。然后在寄存器中設(shè)置獲得的存儲(chǔ)地址。根據(jù)設(shè)置在寄存器中的地址來(lái)進(jìn)行存取。在此進(jìn)程之中,如果有另一個(gè)線(xiàn)程企圖存取這個(gè)存儲(chǔ)區(qū),就根據(jù)原來(lái)計(jì)劃的存儲(chǔ)信息來(lái)改變?cè)诖嫒∧繕?biāo)上的存儲(chǔ)信息。通過(guò)比較設(shè)置在參照?qǐng)D8所討論的釋放隊(duì)列中的請(qǐng)求釋放時(shí)間和線(xiàn)程列表中的最老的登錄時(shí)間,能夠可靠地進(jìn)行存儲(chǔ)存取。
弱指示符是一種指示符對(duì)象。弱指示符是一種特定的指示符,它并不增加上述的設(shè)置來(lái)用以響應(yīng)堆(存儲(chǔ)區(qū))的訪(fǎng)問(wèn)計(jì)數(shù)器(rf)的計(jì)數(shù)。雖然弱指示符像標(biāo)準(zhǔn)指示符那樣訪(fǎng)問(wèn)堆(存儲(chǔ)區(qū)),但是,弱指示符與標(biāo)準(zhǔn)指示符的不同之處在于,相應(yīng)于堆(存儲(chǔ)區(qū))的訪(fǎng)問(wèn)計(jì)數(shù)器(rf)的計(jì)數(shù)并不計(jì)及弱指示符。不能根據(jù)訪(fǎng)問(wèn)計(jì)數(shù)器的值來(lái)確定是否訪(fǎng)問(wèn)了訪(fǎng)問(wèn)計(jì)數(shù)器(rf)。如果釋放了弱指示符的堆訪(fǎng)問(wèn),就將與由弱指示符保留的堆相應(yīng)的地址信息更新為0[零]。更具體地說(shuō),弱指示符將自己的指示符信息更新為0[零],而不影響堆的訪(fǎng)問(wèn)計(jì)數(shù)器。
在存儲(chǔ)訪(fǎng)問(wèn)期間,如果獲得了由弱指示符保留的指示符信息并將其存儲(chǔ)在一個(gè)寄存器中,就立即用0[零]來(lái)更換由弱指示符保留的信息。不能夠再進(jìn)行使用弱指示符的指示符信息的后繼存儲(chǔ)存取,弱指示符的指示符信息就消失了。這樣就不能順利地更改前面圖8中所討論的釋放隊(duì)列。按照如下所述來(lái)解決這個(gè)問(wèn)題。
下面將參照?qǐng)D15來(lái)說(shuō)明可靠的存儲(chǔ)存取和使用弱指示符的釋放隊(duì)列更新。圖15示出了一個(gè)弱指示符和具有由弱指示符訪(fǎng)問(wèn)的訪(fǎng)問(wèn)存儲(chǔ)區(qū)的堆(存儲(chǔ)區(qū))600。在圖8的釋放隊(duì)列中的隊(duì)列成分460的存儲(chǔ)區(qū)信息464具有圖15的堆(存儲(chǔ)區(qū))600的結(jié)構(gòu)。
弱指示符a-n訪(fǎng)問(wèn)相同的訪(fǎng)問(wèn)存儲(chǔ)區(qū)。如所示,弱指示符a-n中的每一個(gè)都包含一個(gè)指示符頭(point head),每個(gè)指示符頭又包括一個(gè)指示符標(biāo)識(shí)(point ID)和一個(gè)如下所述的元變量(member variable)(a)后繼(b)前趨(c)對(duì)象指示符對(duì)象指示符是一個(gè)作為要訪(fǎng)問(wèn)的存儲(chǔ)區(qū)信息的對(duì)象元變量。一系列的弱指示符a-n訪(fǎng)問(wèn)相同的訪(fǎng)問(wèn)存儲(chǔ)區(qū)并具有相同的對(duì)象指示符。
后繼和前趨是指示符變量,它們將具有相同的訪(fǎng)問(wèn)存儲(chǔ)區(qū)的弱指示符鏈接到具有由弱指示符訪(fǎng)問(wèn)的訪(fǎng)問(wèn)存儲(chǔ)區(qū)的堆(存儲(chǔ)區(qū))上。后繼是弱指示符或作為后繼對(duì)象的堆的標(biāo)識(shí)信息。前趨是弱指示符或作為前趨對(duì)象的堆的標(biāo)識(shí)信息。
在具有相同的訪(fǎng)問(wèn)存儲(chǔ)區(qū)的弱指示符和具有由弱指示符訪(fǎng)問(wèn)的訪(fǎng)問(wèn)存儲(chǔ)區(qū)的堆(存儲(chǔ)區(qū))中設(shè)置后繼和前趨。建造一個(gè)雙向鏈接,即一個(gè)用以將一系列的弱指示符和堆相互連接起來(lái)的鏈。這樣的一個(gè)鏈被稱(chēng)之為是弱指示符鏈。
在堆中設(shè)置與退役標(biāo)志和訪(fǎng)問(wèn)計(jì)數(shù)器相關(guān)的信息。如前所述,訪(fǎng)問(wèn)計(jì)數(shù)器具有一個(gè)對(duì)存儲(chǔ)區(qū)的訪(fǎng)問(wèn)環(huán)境敏感的值。訪(fǎng)問(wèn)計(jì)數(shù)器并不計(jì)及與弱指示符相關(guān)的訪(fǎng)問(wèn)信息,但是要計(jì)及除弱指示符以外的指示符的訪(fǎng)問(wèn)信息。退役標(biāo)志用于確定包括弱指示符在內(nèi)的指示符是否沒(méi)有訪(fǎng)問(wèn)訪(fǎng)問(wèn)計(jì)數(shù)器,換句話(huà)說(shuō),確定線(xiàn)程是否退役了。如果線(xiàn)程退役了,就將退役標(biāo)志設(shè)置為[1],如果線(xiàn)程沒(méi)有退役,就將退役標(biāo)志設(shè)置為
。在分配新存儲(chǔ)區(qū)的初始化進(jìn)程中,將退役標(biāo)志設(shè)置為
。
弱指示符鏈?zhǔn)沁@樣建造的。從弱指示符中獲取一個(gè)指示符值。更具體地說(shuō),獲取一個(gè)作為對(duì)象元變量的對(duì)象指示符,在此,該對(duì)象元變量是與訪(fǎng)問(wèn)訪(fǎng)問(wèn)存儲(chǔ)區(qū)所需要的地址相對(duì)應(yīng)的。下面將參照?qǐng)D16的流程圖來(lái)說(shuō)明此獲取進(jìn)程。
在步驟S501中,在從弱指示符中獲取指示符值的進(jìn)程中,確定是否滿(mǎn)足下列的條件(1)和(2)。條件(1)是指弱指示符的對(duì)象指示符(即對(duì)象元變量)是非零(non-zero)。條件(2)是指設(shè)置在由弱指示符鏈連接的堆中的訪(fǎng)問(wèn)計(jì)數(shù)器(rf)的值等于或大于1。
如果確定滿(mǎn)足這兩個(gè)條件,處理程序就著手進(jìn)行步驟S502。然后退回作為對(duì)象元變量的對(duì)象指示符,在此,該對(duì)象元變量是與訪(fǎng)問(wèn)設(shè)置在弱指示符中的訪(fǎng)問(wèn)存儲(chǔ)區(qū)所需要的地址相對(duì)應(yīng)的。如果確定不滿(mǎn)足這兩個(gè)條件,處理程序就著手進(jìn)行步驟S503以退回
。
如果確定弱指示符的對(duì)象指示符(即對(duì)象元變量)為零,或者,確定設(shè)置在由弱指示符鏈連接的堆中的訪(fǎng)問(wèn)計(jì)數(shù)器(rf)的計(jì)數(shù)為0,就在步驟S503中退回0。如果訪(fǎng)問(wèn)計(jì)數(shù)器(rf)的計(jì)數(shù)為0,就不讓除了弱指示符以外的指示符來(lái)進(jìn)行訪(fǎng)問(wèn)。然而,不能確定是否讓弱指示符來(lái)進(jìn)行訪(fǎng)問(wèn)。如果從弱指示符中獲得了指示符值,就將該弱指示符的對(duì)象指示符設(shè)置為零。不再能夠進(jìn)行使用弱指示符的指示符信息的存儲(chǔ)存取。由于弱指示符的指示符信息消失了,因而不能順利地更新釋放隊(duì)列。為了防止這個(gè)問(wèn)題,在此情況下不獲取指示符的值。
下面將參照?qǐng)D17來(lái)說(shuō)明釋放隊(duì)列的刷新進(jìn)程。已參照?qǐng)D8討論了釋放隊(duì)列,并由存儲(chǔ)區(qū)管理器(堆管理模塊)313來(lái)管理釋放隊(duì)列。如前所述,在面向?qū)ο蟮拇鎯?chǔ)管理進(jìn)程中,將資源作為對(duì)象來(lái)處理,并根據(jù)具有限定尺寸的、被稱(chēng)其為堆的存儲(chǔ)區(qū)來(lái)進(jìn)行存儲(chǔ)管理。管理給堆分配對(duì)象的部件是存儲(chǔ)區(qū)管理器(堆管理模塊)313。在將存儲(chǔ)區(qū)(堆)有效地分配給每個(gè)請(qǐng)求堆的線(xiàn)程的時(shí)候,存儲(chǔ)區(qū)管理器(堆管理模塊)313適當(dāng)?shù)蒯尫庞邢薜亩选?br>
存儲(chǔ)區(qū)管理器(堆管理模塊)313保留根據(jù)每個(gè)處理器設(shè)置的堆管理信息。換句話(huà)說(shuō),堆管理信息單元的數(shù)量等于處理器的數(shù)量。堆管理信息包括圖8的釋放隊(duì)列。釋放隊(duì)列是一個(gè)請(qǐng)求釋放但還尚未釋放的存儲(chǔ)區(qū)(堆)的信息。
在刷新釋放隊(duì)列的時(shí)候,也就是在含有弱指示符的配置中執(zhí)行更新進(jìn)程的時(shí)候,執(zhí)行一個(gè)特定的進(jìn)程。下面將參照?qǐng)D17來(lái)說(shuō)明釋放隊(duì)列的刷新進(jìn)程。在含于釋放隊(duì)列中的全部對(duì)象(釋放隊(duì)列成分)上依次進(jìn)行圖17的進(jìn)程。
在步驟S601中,清空釋放隊(duì)列。更具體地說(shuō),清空?qǐng)D8的標(biāo)題信息(釋放_(tái)隊(duì)列_報(bào)頭)451的前端隊(duì)列,并斷開(kāi)此隊(duì)列。
在步驟S602中,將設(shè)置在要處理的釋放隊(duì)列中的對(duì)象(釋放隊(duì)列成分)的釋放時(shí)間,也就是請(qǐng)求釋放時(shí)間(釋放_(tái)時(shí)間),與設(shè)置在與處理器相對(duì)應(yīng)的線(xiàn)程列表中的最老的登錄時(shí)間相比較。如果確定請(qǐng)求釋放時(shí)間(釋放_(tái)時(shí)間)小于最老的登錄時(shí)間,處理程序就著手進(jìn)行步驟S603。
在步驟603中確定是否滿(mǎn)足下列的條件(a)和(b)之一。
條件(a)是指將設(shè)置在堆(存儲(chǔ)區(qū))中的退役標(biāo)志設(shè)置為退役狀態(tài),在此,這個(gè)堆(存儲(chǔ)區(qū))是根據(jù)要處理的對(duì)象(釋放隊(duì)列成分)的堆標(biāo)識(shí)(heap ID)鑒別的。
條件(b)是指在相應(yīng)于堆(存儲(chǔ)區(qū))而設(shè)置的弱指示符鏈中沒(méi)有弱指示符存在,換句話(huà)說(shuō),弱指示符鏈?zhǔn)强盏摹?br>
如果滿(mǎn)足上述的條件(a)和(b)之一,處理程序就著手進(jìn)行步驟S604。除去該對(duì)象。換句話(huà)說(shuō),釋放與設(shè)置在釋放隊(duì)列中的對(duì)象相應(yīng)的存儲(chǔ)區(qū),并從釋放隊(duì)列中刪除此對(duì)象釋放隊(duì)列成分)。
在步驟603中,如果確定不滿(mǎn)足條件(a)和(b)中的任何一個(gè),處理程序就著手進(jìn)行步驟S621。將作為弱指示符的對(duì)象元變量的對(duì)象指示符的值設(shè)置為
,在此,該弱指示符是含于相應(yīng)于堆而設(shè)置的弱指示符鏈中。在步驟622中,將退役標(biāo)志設(shè)置為[1]。在步驟S623中,為設(shè)置在釋放隊(duì)列中的對(duì)象(釋放隊(duì)列成分)的釋放時(shí)間,即請(qǐng)求釋放時(shí)間(釋放_(tái)時(shí)間)輸入現(xiàn)行時(shí)間(present time)。在步驟624中,再次給釋放隊(duì)列設(shè)置對(duì)象(釋放隊(duì)列成分)。
在步驟602中,如果確定設(shè)置在要處理的釋放隊(duì)列中的對(duì)象(釋放隊(duì)列成分)的釋放時(shí)間,即請(qǐng)求釋放時(shí)間(釋放_(tái)時(shí)間),不小于設(shè)置在與處理器相應(yīng)的線(xiàn)程列表中的最老的登錄時(shí)間,處理程序就著手進(jìn)行步驟S611。在步驟611中確定設(shè)置在由對(duì)象的堆標(biāo)識(shí)鑒別的堆(存儲(chǔ)區(qū))上的訪(fǎng)問(wèn)計(jì)數(shù)器(rf)是否為零。如果確定訪(fǎng)問(wèn)計(jì)數(shù)器是零,處理程序就著手進(jìn)行步驟S624。并再次給釋放隊(duì)列設(shè)置對(duì)象(釋放隊(duì)列成分)。
由在圖3的操作系統(tǒng)310中的存儲(chǔ)區(qū)管理器(堆管理模塊)313來(lái)執(zhí)行圖17的進(jìn)程。在含有作為訪(fǎng)問(wèn)存儲(chǔ)區(qū)的指示符的弱指示符的配置中,存儲(chǔ)區(qū)管理器(堆管理模塊)313檢查訪(fǎng)問(wèn)存儲(chǔ)區(qū)的弱指示符和弱指示符鏈,在此,該存儲(chǔ)區(qū)與含于釋放隊(duì)列中的隊(duì)列成分相對(duì)應(yīng),而弱指示符鏈?zhǔn)怯砂踔甘痉脑L(fǎng)問(wèn)區(qū)的存儲(chǔ)區(qū)組成的。如果存儲(chǔ)區(qū)管理器(堆管理模塊)313確定在弱指示符鏈中不含弱指示符,或者確定將含于弱指示符鏈中的存儲(chǔ)區(qū)的退役標(biāo)志設(shè)置為退役狀態(tài)了,就從釋放隊(duì)列中除去該隊(duì)列成分,并釋放與此隊(duì)列成分相應(yīng)的存儲(chǔ)區(qū)。
也對(duì)設(shè)置在釋放隊(duì)列中的對(duì)象(釋放隊(duì)列成分)執(zhí)行圖17的進(jìn)程。利用在含有弱指示符的配置中執(zhí)行的刷新進(jìn)程來(lái)可靠地更新釋放隊(duì)列,可靠地比較設(shè)置在釋放隊(duì)列中的請(qǐng)求釋放時(shí)間和線(xiàn)程列表中的最老的登錄時(shí)間,并以無(wú)差錯(cuò)的方式進(jìn)行存儲(chǔ)存取。
已參照具體的實(shí)施例討論了本發(fā)明。顯然,對(duì)于一般熟悉工藝技術(shù)的人而言,只要不脫離本發(fā)明的范圍,就能變動(dòng)和更改本發(fā)明的實(shí)施例。在此僅就一些典型的用途討論了本發(fā)明的實(shí)施例,不應(yīng)將本發(fā)明的實(shí)施例看作是對(duì)本發(fā)明的范圍的限制。為了了解本發(fā)明的范圍,應(yīng)當(dāng)查看本發(fā)明的權(quán)利要求。
能夠利用軟件、硬件以及它們的組合來(lái)執(zhí)行上述的一系列的步驟。如果要用軟件來(lái)執(zhí)行上述的一系列的步驟,就要將構(gòu)成軟件的程序從記錄介質(zhì)上或通過(guò)網(wǎng)絡(luò)安裝到組合于硬件結(jié)構(gòu)中的一個(gè)計(jì)算機(jī)上或者安裝到通用計(jì)算機(jī)上。
可以預(yù)先將程序記錄到作為記錄介質(zhì)的硬盤(pán)和ROM(只讀存儲(chǔ)器)之一上。也可以暫時(shí)地或永久地將程序記錄在可拆除的記錄介質(zhì)上。這些記錄介質(zhì)包括軟盤(pán)、磁光(Magneto-optic)盤(pán)、DVD(數(shù)字通用光盤(pán))、磁盤(pán)、半導(dǎo)體存儲(chǔ)器等。能夠在所謂的組裝軟件(package software)中提供這樣的可拆除的介質(zhì)。
如上所述,能夠從可拆除的記錄介質(zhì)上將程序安裝到計(jì)算機(jī)中。此外,可以將程序按無(wú)線(xiàn)方式從下載位置上發(fā)送到計(jì)算機(jī)內(nèi)。也可通過(guò)如像LAN(局域網(wǎng))或互聯(lián)網(wǎng)之類(lèi)的網(wǎng)絡(luò)、以有線(xiàn)方式來(lái)發(fā)送程序,然后由計(jì)算機(jī)接收該程序并安裝到如像計(jì)算機(jī)硬盤(pán)之類(lèi)的記錄介質(zhì)上。
按照所述的時(shí)間順序依次進(jìn)行在此說(shuō)明中所討論的處理步驟。另外的辦法是,可以并行地或分別地進(jìn)行這些步驟。在此說(shuō)明中,系統(tǒng)是指由多個(gè)設(shè)備組成的邏輯系統(tǒng),并且,在同樣的機(jī)箱中并非必須含有每個(gè)設(shè)備的部件。
產(chǎn)業(yè)上的可利用性如上所述,根據(jù)本發(fā)明的配置,包含登錄時(shí)間信息在內(nèi)的線(xiàn)程信息的線(xiàn)程列表是作為線(xiàn)程管理信息存儲(chǔ)的,在此,由于線(xiàn)程是作為一個(gè)數(shù)據(jù)處理單元,因此,根據(jù)每個(gè)線(xiàn)程來(lái)記錄登錄時(shí)間信息;含有釋放請(qǐng)求時(shí)間的釋放隊(duì)列是作為存儲(chǔ)區(qū)管理信息存儲(chǔ)的,在此,釋放請(qǐng)求時(shí)間是根據(jù)一個(gè)區(qū)單元記錄的,這個(gè)區(qū)單元與請(qǐng)求釋放但尚未釋放的存儲(chǔ)區(qū)相關(guān)。在存儲(chǔ)區(qū)分配進(jìn)程中,將設(shè)置在含于釋放隊(duì)列內(nèi)的每個(gè)隊(duì)列成分中的釋放請(qǐng)求時(shí)間和在線(xiàn)程列表中的每個(gè)隊(duì)列成分的最老的登錄時(shí)間相比較。利用在最老的錄登錄時(shí)間之前設(shè)置的釋放請(qǐng)求時(shí)間,僅在與隊(duì)列成分相對(duì)應(yīng)的存儲(chǔ)區(qū)上,執(zhí)行存儲(chǔ)分配進(jìn)程。在全部線(xiàn)程中只有不是存取目標(biāo)的那一個(gè)存儲(chǔ)區(qū)才能被可靠地選擇并對(duì)其進(jìn)行分配處理。在每個(gè)線(xiàn)程中,以不產(chǎn)生存取差錯(cuò)的方式安全地進(jìn)行存儲(chǔ)區(qū)的分配處理。
權(quán)利要求
1.一種信息處理裝置包括線(xiàn)程管理器,用于根據(jù)每個(gè)數(shù)據(jù)處理單元來(lái)管理線(xiàn)程信息,以及用于管理存儲(chǔ)區(qū)的存儲(chǔ)區(qū)管理器;其中,線(xiàn)程管理器存儲(chǔ)含有登錄時(shí)間信息的線(xiàn)程列表作為線(xiàn)程管理信息,該登錄時(shí)間信息是作為操作系統(tǒng)的功能調(diào)用時(shí)間并根據(jù)每個(gè)線(xiàn)程由數(shù)據(jù)處理程序記錄下來(lái)的,以及其中,存儲(chǔ)區(qū)管理器存儲(chǔ)含有釋放請(qǐng)求時(shí)間的釋放隊(duì)列作為存儲(chǔ)區(qū)管理信息,該釋放請(qǐng)求時(shí)間是根據(jù)一個(gè)區(qū)單元記錄的,并與請(qǐng)求釋放但尚未釋放的存儲(chǔ)區(qū)相關(guān);在存儲(chǔ)區(qū)分配進(jìn)程中,存儲(chǔ)區(qū)管理器比較設(shè)置在含于釋放隊(duì)列內(nèi)的每個(gè)隊(duì)列成分中的釋放請(qǐng)求時(shí)間和線(xiàn)程列表中的每個(gè)隊(duì)列成分的最老的登錄時(shí)間,并分配與具有釋放請(qǐng)求時(shí)間的隊(duì)列成分相應(yīng)的存儲(chǔ)區(qū),在此,該釋放請(qǐng)求時(shí)間是設(shè)置在最老的登錄時(shí)間之前的。
2.根據(jù)權(quán)利要求1的信息處理設(shè)備,在此,線(xiàn)程管理器產(chǎn)生相應(yīng)于多個(gè)處理器中的每一個(gè)的線(xiàn)程列表,將含于登錄時(shí)間信息中的最老的登錄時(shí)間記錄到每個(gè)線(xiàn)程列表的標(biāo)題中,所述的登錄時(shí)間信息是設(shè)置在含于線(xiàn)程列表內(nèi)的線(xiàn)程信息中,并管理所記錄的、被設(shè)置成可由另一個(gè)處理器參照的信息。
3.根據(jù)權(quán)利要求2的信息處理設(shè)備,在此,存儲(chǔ)區(qū)管理器訪(fǎng)問(wèn)所有的最老的登錄時(shí)間信息,這些信息是相應(yīng)于由線(xiàn)程管理器管理的處理器而設(shè)置在線(xiàn)程列表的標(biāo)題中的,并從最老的登錄時(shí)間信息中選擇最老的登錄時(shí)間中的最老的一個(gè),在此,所述的最老的登錄時(shí)間信息是設(shè)置在與全部處理器相應(yīng)的線(xiàn)程列表的標(biāo)題中,并將所選擇的最老的登錄時(shí)間與設(shè)置在含于釋放隊(duì)列內(nèi)的每個(gè)隊(duì)列成分中的釋放請(qǐng)求時(shí)間相比較,分配與具有釋放請(qǐng)求時(shí)間的隊(duì)列成分相應(yīng)的存儲(chǔ)區(qū),在此,該釋放請(qǐng)求時(shí)間是設(shè)置在所選擇的最老的登錄時(shí)間之前的。
4.根據(jù)權(quán)利要求1的信息處理設(shè)備,在此,線(xiàn)程管理器在線(xiàn)程列表和一個(gè)表成分上記錄另一個(gè)表成分的標(biāo)識(shí)信息,并將該線(xiàn)程列表編制成一個(gè)允許從標(biāo)題中依次獲取每個(gè)成分的表,在線(xiàn)程登錄或線(xiàn)程退役時(shí),更新設(shè)置在標(biāo)題和表成分之一中的標(biāo)識(shí)信息。
5.根據(jù)權(quán)利要求1的信息處理設(shè)備,在此,存儲(chǔ)區(qū)管理器在釋放隊(duì)列的標(biāo)題和一個(gè)隊(duì)列成分上記錄另一個(gè)隊(duì)列成分的標(biāo)識(shí)信息,并將釋放隊(duì)列編制成一個(gè)允許從標(biāo)題中依次獲取每個(gè)隊(duì)列成分的表,并在設(shè)置新隊(duì)列和刪除一個(gè)隊(duì)列時(shí),更新設(shè)置在標(biāo)題和隊(duì)列成分之一中的標(biāo)識(shí)信息。
6.根據(jù)權(quán)利要求1的信息處理設(shè)備,在此,存儲(chǔ)區(qū)管理器根據(jù)每個(gè)堆單元來(lái)執(zhí)行存儲(chǔ)區(qū)管理進(jìn)程,在此,作為具有限定尺寸的存儲(chǔ)區(qū)的堆單元是相應(yīng)于每個(gè)處理器而設(shè)置的;存儲(chǔ)含有釋放請(qǐng)求時(shí)間的釋放隊(duì)列作為存儲(chǔ)區(qū)管理信息,該釋放請(qǐng)求時(shí)間是根據(jù)堆單元記錄的,并與已請(qǐng)求釋放但尚未釋放的一個(gè)堆相關(guān);在存儲(chǔ)區(qū)分配進(jìn)程中分配存儲(chǔ)區(qū),該存儲(chǔ)區(qū)是根據(jù)每個(gè)堆單元記錄在含于釋放隊(duì)列內(nèi)的隊(duì)列成分中的。
7.根據(jù)權(quán)利要求1的信息處理設(shè)備,在此,存儲(chǔ)區(qū)管理器檢查弱指示符鏈,該弱指示符鏈?zhǔn)怯梢粋€(gè)弱指示符構(gòu)成的,這個(gè)弱指示符訪(fǎng)問(wèn)與含于釋放隊(duì)列內(nèi)的隊(duì)列成分相應(yīng)的存儲(chǔ)區(qū),如果在弱指示符鏈中不存在弱指示符,就從釋放隊(duì)列中除去該隊(duì)列成分,并釋放與此隊(duì)列成分相應(yīng)的存儲(chǔ)區(qū)。
8.根據(jù)權(quán)利要求1的信息處理設(shè)備,在此,存儲(chǔ)區(qū)管理器檢查含于弱指示符鏈中的存儲(chǔ)區(qū)的退役標(biāo)志,該弱指示符鏈?zhǔn)怯梢粋€(gè)弱指示符構(gòu)成的,這個(gè)弱指示符訪(fǎng)問(wèn)與含于釋放隊(duì)列中的隊(duì)列成分相應(yīng)的存儲(chǔ)區(qū)和含有弱指示符的訪(fǎng)問(wèn)區(qū)的存儲(chǔ)區(qū),如果該退役標(biāo)志表示一個(gè)退役狀態(tài),就從釋放隊(duì)列中除去該隊(duì)列成分,并釋放與此隊(duì)列成分相應(yīng)的存儲(chǔ)區(qū)。
9.一種存儲(chǔ)區(qū)管理方法包括線(xiàn)程管理步驟,該步驟產(chǎn)生和更新由含有登錄時(shí)間信息的線(xiàn)程信息組成的線(xiàn)程列表,在此,該登錄時(shí)間信息是根據(jù)每個(gè)線(xiàn)程并作為操作系統(tǒng)的功能調(diào)用時(shí)間由數(shù)據(jù)記錄程序記錄的;存儲(chǔ)區(qū)管理步驟,該步驟產(chǎn)生和更新含有釋放請(qǐng)求時(shí)間的釋放隊(duì)列作為存儲(chǔ)區(qū)管理信息,該釋放請(qǐng)求時(shí)間是根據(jù)每個(gè)區(qū)記錄的,并與請(qǐng)求釋放但尚未釋放的存儲(chǔ)區(qū)相關(guān);存儲(chǔ)區(qū)分配步驟,在存儲(chǔ)區(qū)的分配進(jìn)程中,該步驟通過(guò)比較設(shè)置在含于釋放隊(duì)列內(nèi)的每個(gè)隊(duì)列成分中的釋放請(qǐng)求時(shí)間和線(xiàn)程列表中的每個(gè)隊(duì)列成分的最老的登錄時(shí)間來(lái)分配與具有登錄請(qǐng)求時(shí)間的隊(duì)列成分相應(yīng)的存儲(chǔ)區(qū),在此,該登錄請(qǐng)求時(shí)間是設(shè)置在最老的登錄時(shí)間之前的。
10.根據(jù)權(quán)利要求9的存儲(chǔ)區(qū)管理方法,在此,線(xiàn)程管理步驟包括產(chǎn)生相應(yīng)于多個(gè)處理器中的每一個(gè)的一個(gè)線(xiàn)程列表;將含于登錄時(shí)間信息中的最老的登錄時(shí)間記錄到每個(gè)線(xiàn)程列表的標(biāo)題中,在此,該登錄時(shí)間信息是設(shè)置在含于線(xiàn)程列表內(nèi)的線(xiàn)程信息中的;管理所記錄的、設(shè)置來(lái)要由另一個(gè)處理器訪(fǎng)問(wèn)的信息
11.根據(jù)權(quán)利要求10的存儲(chǔ)區(qū)管理方法,在此,存儲(chǔ)區(qū)分配步驟包括訪(fǎng)問(wèn)所有的最老的登錄時(shí)間信息,這些最老的登錄時(shí)間信息設(shè)置在與一個(gè)處理器相應(yīng)的線(xiàn)程列表的標(biāo)題中;從最老的登錄時(shí)間信息中選擇最老的登錄時(shí)間中的最老的一個(gè),這些最老的登錄時(shí)間信息設(shè)置在與全部處理器相應(yīng)的線(xiàn)程列表的標(biāo)題中;將所選擇的最老的登錄時(shí)間與設(shè)置在含于釋放隊(duì)列內(nèi)的每個(gè)隊(duì)列成分中的釋放請(qǐng)求時(shí)間相比較;分配與具有釋放請(qǐng)求時(shí)間的隊(duì)列成分相應(yīng)的存儲(chǔ)區(qū),在此,該釋放請(qǐng)求時(shí)間是設(shè)置在所選擇的最老的登錄時(shí)間之前的。
12.根據(jù)權(quán)利要求9的存儲(chǔ)區(qū)管理方法,在此,線(xiàn)程管理步驟包括在線(xiàn)程列表的標(biāo)題和一個(gè)表成分上記錄另一個(gè)表成分的標(biāo)識(shí)信息,將線(xiàn)程列表編制成為一個(gè)允許從標(biāo)題中依次獲得每個(gè)成分的表,并在線(xiàn)程登錄或線(xiàn)程退役時(shí),更新設(shè)置在標(biāo)題和表成分之一中的標(biāo)識(shí)信息。
13.根據(jù)權(quán)利要求9的存儲(chǔ)區(qū)管理方法,在此,存儲(chǔ)區(qū)管理步驟包括在釋放隊(duì)列的標(biāo)題和一個(gè)隊(duì)列成分上記錄另一個(gè)隊(duì)列成分的標(biāo)識(shí)信息,將該釋放隊(duì)列編制成為一個(gè)允許從標(biāo)題中依次獲得每個(gè)隊(duì)列成分的表,在設(shè)置新的隊(duì)列或刪除一個(gè)隊(duì)列時(shí),更新設(shè)置在標(biāo)題和隊(duì)列成分之一中的標(biāo)識(shí)信息。
14.根據(jù)權(quán)利要求9的存儲(chǔ)區(qū)管理方法,在此,存儲(chǔ)區(qū)管理步驟包括根據(jù)每個(gè)堆單元來(lái)執(zhí)行存儲(chǔ)區(qū)管理進(jìn)程,在此,作為具有限定尺寸的存儲(chǔ)區(qū)的堆單元是相應(yīng)于每個(gè)處理器而設(shè)置的;存儲(chǔ)含有釋放請(qǐng)求時(shí)間的釋放隊(duì)列作為存儲(chǔ)區(qū)管理信息,該釋放請(qǐng)求時(shí)間是根據(jù)堆單元記錄的,并與請(qǐng)求釋放但尚未釋放的堆相關(guān);在此,存儲(chǔ)區(qū)分配步驟包括在含于釋放隊(duì)列內(nèi)的隊(duì)列成分中分配根據(jù)每個(gè)堆單元記錄的存儲(chǔ)區(qū)。
15.根據(jù)權(quán)利要求9的存儲(chǔ)區(qū)管理方法,在此,存儲(chǔ)區(qū)管理步驟包括檢查弱指示符鏈,該弱指示符鏈?zhǔn)怯梢粋€(gè)弱指示符構(gòu)成的,這個(gè)弱指示符訪(fǎng)問(wèn)與含于釋放隊(duì)列內(nèi)的隊(duì)列成分相應(yīng)的存儲(chǔ)區(qū),如果在弱指示符鏈中沒(méi)有弱指示符存在,就從釋放隊(duì)列中除去該隊(duì)列成分,并釋放與該隊(duì)列成分相應(yīng)的存儲(chǔ)區(qū)。
16.根據(jù)權(quán)利要求9的存儲(chǔ)區(qū)管理方法,在此,存儲(chǔ)區(qū)管理步驟包括檢查含于弱指示符鏈中的存儲(chǔ)區(qū)的退役標(biāo)志,在此,該弱指示符鏈?zhǔn)怯梢粋€(gè)弱指示符構(gòu)成的,該弱指示符訪(fǎng)問(wèn)與含于釋放隊(duì)列內(nèi)的隊(duì)列成分相應(yīng)的存儲(chǔ)區(qū)以及含有弱指示符訪(fǎng)問(wèn)區(qū)的存儲(chǔ)區(qū),如果退役標(biāo)志表示一個(gè)退役狀態(tài),就從釋放隊(duì)列中除去該隊(duì)列成分,并釋放與該隊(duì)列成分相應(yīng)的存儲(chǔ)區(qū)。
17.一種用于執(zhí)行存儲(chǔ)區(qū)管理進(jìn)程的計(jì)算機(jī)程序,該計(jì)算機(jī)程序包括線(xiàn)程管理步驟,該步驟產(chǎn)生并更新由含有登錄時(shí)間信息的線(xiàn)程信息組成的線(xiàn)程列表,在此,該登錄時(shí)間信息是根據(jù)每個(gè)線(xiàn)程并作為操作系統(tǒng)的功能調(diào)用時(shí)間由數(shù)據(jù)處理程序記錄的;存儲(chǔ)區(qū)管理步驟,該步驟產(chǎn)生并更新含有釋放請(qǐng)求時(shí)間的釋放隊(duì)列作為存儲(chǔ)區(qū)管理信息,該釋放請(qǐng)求時(shí)間是根據(jù)每個(gè)存儲(chǔ)區(qū)記錄的,并與請(qǐng)求釋放但尚未釋放的存儲(chǔ)區(qū)相關(guān);存儲(chǔ)區(qū)分配步驟,在存儲(chǔ)區(qū)的分配進(jìn)程中,該步驟通過(guò)比較設(shè)置在含于釋放隊(duì)列內(nèi)的每個(gè)隊(duì)列成分中的釋放請(qǐng)求時(shí)間和在線(xiàn)程列表中的每個(gè)隊(duì)列成分的最老的登錄時(shí)間來(lái)分配與具有登錄請(qǐng)求時(shí)間的隊(duì)列成分相應(yīng)的存儲(chǔ)區(qū),在此,該登錄請(qǐng)求時(shí)間是設(shè)置在最老的登錄時(shí)間之前的。
全文摘要
在有多個(gè)線(xiàn)程并行存取存儲(chǔ)區(qū)的時(shí)候,以無(wú)差錯(cuò)的方式進(jìn)行有效的存儲(chǔ)區(qū)分配。含有登錄時(shí)間信息的線(xiàn)程信息的線(xiàn)程列表是作為線(xiàn)程管理信息來(lái)存儲(chǔ)的,由于線(xiàn)程是作為一個(gè)數(shù)據(jù)處理單元,因此,根據(jù)每個(gè)線(xiàn)程來(lái)記錄登錄時(shí)間信息;含有釋放請(qǐng)求時(shí)間的釋放隊(duì)列是作為存儲(chǔ)區(qū)管理信息存儲(chǔ)的,在此,該釋放請(qǐng)求時(shí)間是根據(jù)每個(gè)區(qū)單元記錄的,并與請(qǐng)求釋放但尚未釋放的存儲(chǔ)區(qū)相關(guān)。在存儲(chǔ)區(qū)的分配進(jìn)程中,比較設(shè)置在含于釋放隊(duì)列內(nèi)的每個(gè)隊(duì)列成分中的釋放請(qǐng)求時(shí)間和在線(xiàn)程列表中的每個(gè)隊(duì)列成分的最老的登錄時(shí)間。僅在與具有釋放請(qǐng)求時(shí)間的隊(duì)列成分相應(yīng)的存儲(chǔ)區(qū)上執(zhí)行存儲(chǔ)區(qū)分配進(jìn)程,在此,該釋放請(qǐng)求時(shí)間是設(shè)置在最老的登錄時(shí)間之前的。在此配置中,能為分配可靠地選擇未存取的存儲(chǔ)區(qū)。
文檔編號(hào)G06F9/50GK1906598SQ20058000147
公開(kāi)日2007年1月31日 申請(qǐng)日期2005年9月26日 優(yōu)先權(quán)日2004年9月29日
發(fā)明者戶(hù)川敦之 申請(qǐng)人:索尼株式會(huì)社