專利名稱:執(zhí)行減少運行存貯空間要求執(zhí)行線程的計算機系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及在一種具有減少的運行時間存貯空間要求的多線程環(huán)境中執(zhí)行程序的計算機系統(tǒng)和方法。特別是,本發(fā)明涉及一種用于執(zhí)行多個執(zhí)行線程的計算機系統(tǒng)和方法,其中,當(dāng)所述線程非可執(zhí)行時,該線程的執(zhí)行數(shù)據(jù)被壓縮,以便減少對存貯空間的要求。
現(xiàn)在的計算機系統(tǒng)被設(shè)計或配置成利用其代碼為體系結(jié)構(gòu)中性(AN)二進制格式(此后稱之為AN碼)的程序的特性。因此,這些程序的AN碼獨立于所述計算機系統(tǒng)的特定結(jié)構(gòu)或平臺。
本文中規(guī)定的術(shù)語“結(jié)構(gòu)”表示一系列型號的計算機的工作特性。特殊結(jié)構(gòu)的例子包括Macintosh計算機,使用DOS或Windows操作系統(tǒng)的IBM個人兼容計算機、運行Solaris操作系統(tǒng)的Sun微系統(tǒng)計算機以及使用Unix操作系統(tǒng)的計算機。
本文中規(guī)定的術(shù)語“結(jié)構(gòu)特殊(AS)”涉及到要求只在具有特殊計算機結(jié)構(gòu)的計算機系統(tǒng)上執(zhí)行的某些程序代碼為二進制格式,這種碼此后稱之為AS碼。因此,利用傳統(tǒng)編程語言(例如80486匯編語言)編制并為特殊結(jié)構(gòu)編譯(例如IBM兼容個人機)的程序僅能夠運行于這種結(jié)構(gòu)或這種結(jié)構(gòu)的仿真器。
本文中規(guī)定的術(shù)語“結(jié)構(gòu)中性(AN)”涉及到下述程序,這種程序的編譯碼能夠在具有不同結(jié)構(gòu)的多種計算機系統(tǒng)上運行。例如,這種具有特殊結(jié)構(gòu)的計算機系統(tǒng)可以利用Java(Sun微系統(tǒng)的商標(biāo))虛擬機模塊構(gòu)成。Java虛擬機模塊能夠利用使用Java程編語言編制并編譯成字節(jié)碼的代碼(此后稱之為Java字節(jié)碼)執(zhí)行程序,以用于Java虛擬機的指令集。Java字節(jié)碼獨立于計算機系統(tǒng)的特殊結(jié)構(gòu)。
利用AN碼的程序的一個重要特性是它們的可移植性。例如,由于利用AN碼編制的程序可以在不考慮計算機系統(tǒng)特殊結(jié)構(gòu)的用于執(zhí)行AN碼的任一計算機系統(tǒng)上執(zhí)行,所以,這些程序可以很容易地在網(wǎng)絡(luò)上從一個計算機系統(tǒng)傳送給另一個計算機系統(tǒng)。例如,被編譯成Java字節(jié)碼的程序可以在任一具有Java虛擬機模塊的計算機系統(tǒng)上執(zhí)行并且可以很容易地使用HotJava(Sun微系統(tǒng)的商標(biāo))網(wǎng)絡(luò)通信管理器在一個網(wǎng)絡(luò)上從一個計算機系統(tǒng)傳送給另一個計算機系統(tǒng)。
此外,涉及到被編譯成Java字節(jié)碼可移植性的程序的另外一個重要特性是這種程序的可檢驗性。特別是,Java虛擬機模塊能夠很容易驗證這些程序滿足預(yù)定的完整性標(biāo)準(zhǔn)。這種完整性標(biāo)準(zhǔn)包括保證Java字節(jié)碼不會從Java虛擬機模塊堆棧上溢或下溢并保證利用Java字節(jié)碼編制的所有指令僅利用其數(shù)據(jù)類型與用于這些指令的數(shù)據(jù)類型限制相匹配的數(shù)據(jù)的堆棧和數(shù)據(jù)類型用途限制。其結(jié)果是利用Java字節(jié)碼編制的程序不能移動目標(biāo)指針并不能對除用戶已經(jīng)明確授權(quán)它可以使用以外的系統(tǒng)資源進行訪問。
由于這個原因,計算機系統(tǒng)被設(shè)計成執(zhí)行在網(wǎng)絡(luò)上接收并被編譯成AN碼的程序。事實上,在某些情況下,由于這些程序被直接裝載到計算機系統(tǒng)的運行時間(即執(zhí)行時間)存貯器(例如隨機存取存貯器(RAM)中,所以,這些計算機系統(tǒng)甚至可以不需要輔助存貯器(例如硬盤)。因此,用戶將不受軟件購置、安裝、結(jié)構(gòu)以及當(dāng)前有代表性的軟件產(chǎn)品升級的限制。
另外,很多軟件程序(即應(yīng)用程序)可以利用多線程執(zhí)行方式執(zhí)行。所述線程能夠使程序被更快的響應(yīng)和運行等等。
根據(jù)前面的觀點來看,將用AN碼編制的多線程程序應(yīng)用于構(gòu)成網(wǎng)絡(luò)并按需要裝載AN碼的廉價計算機系統(tǒng)是特別有吸引力的。例如,這種計算機系統(tǒng)可以是視頻游戲機、個人數(shù)字助理(PDA)、蜂窩電話或其它類似的計算機系統(tǒng)或計算機操作裝置。
對于這種計算機系統(tǒng)來講,低價格是極為重要的。特別是,在構(gòu)成這種計算機系統(tǒng)過程中的最高成本之一是運行軟件指令和程序所需要的運行時間(即執(zhí)行時間)存貯器的數(shù)量。這將與存貯軟件指令碼和程序所需的靜態(tài)存貯器加以區(qū)分。由于減少前述這種計算機系統(tǒng)所需運行時間存貯器的數(shù)量能夠產(chǎn)生很強的競爭優(yōu)勢,所以這種減少是非常重要的。
特別是,在多線程環(huán)境中,一個線程通常是部分地使用運行時間(即執(zhí)行時間)存貯器的一個或多個專用區(qū)域(即范圍)加以實現(xiàn),所述運行時間存貯器用于存貯執(zhí)行所述線程所需的執(zhí)行數(shù)據(jù)。這些專用區(qū)域通常為堆棧、堆或是各個局部線程變量的形式,并表示所述線程的運行時間存貯成本。因此,一個程序的運行時間存貯成本是當(dāng)程序的堆棧存貯成本是用于存貯它的代碼的存貯器量時的所有它的線程運行時間存貯成本的和。因此,希望減少每個線程的平均運行時間存貯成本,以便減少支持一個程序所需的計算機系統(tǒng)的存貯要求。
總之,本發(fā)明的目的是提供一種用于在具有減少運行時間存貯空間要求的情況下執(zhí)行多個執(zhí)行線程的計算機系統(tǒng)和相關(guān)方法。該計算機系統(tǒng)包括一個運行時間存貯器,一個執(zhí)行控制器和一個數(shù)據(jù)壓縮器。
執(zhí)行控制器控制線程的執(zhí)行,以便使所述線程在不同的時間處可被執(zhí)行或不可被執(zhí)行。當(dāng)產(chǎn)生執(zhí)行數(shù)據(jù)時,執(zhí)行控制器還將線程的執(zhí)行數(shù)據(jù)未被壓縮地存貯在運行時間存貯器可用的空間中。
數(shù)據(jù)壓縮器壓縮未被壓縮的執(zhí)行數(shù)據(jù)或不能執(zhí)行的線程中可被壓縮的部分。結(jié)果是在運行時間存貯器中可以獲得一個空間。數(shù)據(jù)壓縮器還解壓縮運行時間存貯器中可用空間內(nèi)其執(zhí)行數(shù)據(jù)被壓縮的線程中的可被解壓縮的線程的經(jīng)過壓縮的執(zhí)行數(shù)據(jù)或其部分,以便當(dāng)可解壓線程變成可執(zhí)行時可以執(zhí)行這些線程。
在一個實施例中,當(dāng)可解壓線程的壓縮執(zhí)行數(shù)據(jù)一變成可執(zhí)行的,數(shù)據(jù)壓縮器就對該壓縮執(zhí)行數(shù)據(jù)解壓縮。
在另一個實施例中,數(shù)據(jù)壓縮器在預(yù)定的時間間隔之后對可解壓線程的壓縮執(zhí)行數(shù)據(jù)解壓縮。
在另一個實施例中,當(dāng)可解壓線程的未壓縮執(zhí)行數(shù)據(jù)一變成非可執(zhí)行的時,數(shù)據(jù)壓縮器就對這些未壓縮執(zhí)行數(shù)據(jù)進行壓縮。
在另一個實施例中,數(shù)據(jù)壓縮器當(dāng)需要運行時間存貯器的空間但又得不到時壓縮可壓縮線程的未壓縮執(zhí)行數(shù)據(jù)。在這個實施例中,計算機系統(tǒng)還可以包括一個最近最少執(zhí)行的表,該表列出了當(dāng)前尚未根據(jù)從最近最少執(zhí)行的線程到最近最多執(zhí)行的線程的順序執(zhí)行的那些線程??蓧嚎s的線程是當(dāng)需要運行時間存貯空間但又不可獲得時在具有未壓縮執(zhí)行數(shù)據(jù)的最近最少執(zhí)行的表中的最近最少執(zhí)行的線程。
在另一個實施例中,計算機系統(tǒng)還包括輔助存貯器。在這個實施例中,當(dāng)需要運行時間存貯空間但又得不到時數(shù)據(jù)壓縮器在輔助存儲器中存儲非可執(zhí)行線程中可存貯線程的執(zhí)行數(shù)據(jù)或這些執(zhí)行數(shù)據(jù)的一些部分。然后,數(shù)據(jù)壓縮器從輔助存貯器中提取其被壓縮執(zhí)行數(shù)據(jù)將在運行時間存貯器中解壓縮的所述線程中可提取部分的被壓縮執(zhí)行數(shù)據(jù)或這些數(shù)據(jù)一部分。
通過結(jié)合附圖的下述詳細(xì)說明和所附權(quán)利要求,本發(fā)明的目的和特征將變得更加容易理解。
圖1的方框圖示出了應(yīng)用本發(fā)明的計算機網(wǎng)絡(luò)。
圖2的功能性方框圖示出了在所述計算機網(wǎng)絡(luò)中一個客戶計算機系統(tǒng)的操作。
圖3示出了所述客戶計算機系統(tǒng)的操作流程。
圖4示出了應(yīng)用了本發(fā)明的計算機網(wǎng)絡(luò)的另一個實施例的方框圖。
圖5的功能方框圖示出了在該計算機網(wǎng)絡(luò)另一個實施例中一個客戶計算機系統(tǒng)的操作。
參看圖1,該圖示出了根據(jù)本發(fā)明的一個計算機網(wǎng)絡(luò)100。它包括一個或多個客戶計算機系統(tǒng)102、一個或多個服務(wù)器計算機系統(tǒng)104,和一個網(wǎng)絡(luò)通信連接器106。
客戶計算機系統(tǒng)102經(jīng)過網(wǎng)絡(luò)通信連接器106連接到服務(wù)器計算機系統(tǒng)104。網(wǎng)絡(luò)通信連接器可以是一個局域網(wǎng)或廣域網(wǎng)、互聯(lián)網(wǎng)絡(luò)或其它類型的網(wǎng)絡(luò)通信連接器。
每個服務(wù)器計算機系統(tǒng)104包括一個中央處理單元(CPU)110、一個用戶接口112、一個網(wǎng)絡(luò)通信接口116和一個存貯器118。網(wǎng)絡(luò)通信接口使每個服務(wù)器計算機系統(tǒng)能夠通過網(wǎng)絡(luò)通信連接器106與客戶計算機系統(tǒng)102通信。
每個服務(wù)器計算機系統(tǒng)104的存貯器118存貯一個操作系統(tǒng)120、一個網(wǎng)絡(luò)通信管理程序(或服務(wù)程序)122和多線程程序(即方法)147和/或148。所述操作系統(tǒng)和通信管理程序全部運行于CPU 120。操作系統(tǒng)控制和協(xié)調(diào)網(wǎng)絡(luò)通信管理程序的運行,以響應(yīng)用戶利用用戶接口112發(fā)出的命令或由網(wǎng)絡(luò)通信接口116經(jīng)過網(wǎng)絡(luò)通信連接器106從客戶計算機系統(tǒng)102接收的命令。
每個服務(wù)器計算機系統(tǒng)104的程序147包含有與客戶計算機系統(tǒng)102的特殊結(jié)構(gòu)(即平臺)無關(guān)的結(jié)構(gòu)中性(AN)碼。這些程序被特殊編程語言編譯成AN碼。在該最佳實施例中,這些程序利用Java編程語言編寫并被編譯成Java字節(jié)碼。另外,這些程序被包括在形成以面向?qū)ο蠓绞骄幊痰能浖?yīng)用的對象分類中。
與程序147不同,每個服務(wù)器計算機系統(tǒng)的程序148被編譯成結(jié)構(gòu)特殊(AS)碼,以用于客戶計算機系統(tǒng)102的特殊結(jié)構(gòu)。如在下面將要詳細(xì)描述的,網(wǎng)絡(luò)100最好是一個封閉和可信賴網(wǎng)絡(luò),在該網(wǎng)絡(luò)中,這些程序可以保密地發(fā)送給具有高置信度的客戶計算機102,或者這些程序最好隱藏了能夠被驗證的數(shù)字簽名。
如在后面將要詳細(xì)描述的,程序147和/或148根據(jù)用戶的要求使用網(wǎng)絡(luò)通信管理器122傳送給客戶計算機系統(tǒng)102。由此,這些程序的代碼被認(rèn)為是網(wǎng)絡(luò)移動碼。
每個客戶計算機系統(tǒng)102可以是視頻游戲機,個人數(shù)字助理(PDA),蜂窩電話,臺式計算機或其它的計算機系統(tǒng)或需要少量運行時間存貯器的計算機操作裝置。另外,每個客戶計算機系統(tǒng)包括一個中央處理單元(CPU)126、一個用戶接口128、一個網(wǎng)絡(luò)通信接口132、一個只讀存貯器(ROM)134和一個運行時間隨機存取存貯器(RAM)136。所述網(wǎng)絡(luò)通信接口使客戶計算機系統(tǒng)能夠通過網(wǎng)絡(luò)通信連接器106與服務(wù)器計算機系統(tǒng)104通信。
每個客戶計算機系統(tǒng)102的RAM 136存貯均從ROM 134裝載的操作系統(tǒng)138、網(wǎng)絡(luò)通信管理程序142、虛擬機模塊142、以及數(shù)據(jù)壓縮器146。所述RAM還存貯從服務(wù)器計算機104下加載的以AN碼編程的程序147以及以結(jié)構(gòu)特殊(AS)碼編程的程序148。操作系統(tǒng)、網(wǎng)絡(luò)通信管理程序、虛擬機模塊、數(shù)據(jù)壓縮器和程序都由CPU 126執(zhí)行。操作系統(tǒng)響應(yīng)用戶利用用戶接口128發(fā)出的命令控制和協(xié)調(diào)網(wǎng)絡(luò)通信管理程序、虛擬機模塊,數(shù)據(jù)壓縮器以及程序的執(zhí)行。
如上所述,程序147和/或148是根據(jù)用戶請求從服務(wù)器計算機系統(tǒng)104接收的,使用網(wǎng)絡(luò)通信管理程序140獲得這些程序,在最佳實施例中,所述網(wǎng)絡(luò)通信管理程序140是Hot Java網(wǎng)絡(luò)通信管理程序。然后,網(wǎng)絡(luò)通信管理程序?qū)⑦@些程序裝載到RAM 136中。
在使用AN碼編程的裝載的程序147的情況下,虛擬機模塊142的代碼驗證器151驗證被裝載程序的AN碼是否滿足規(guī)定的完整性標(biāo)準(zhǔn)。如前所述,這可以包括堆棧和數(shù)據(jù)類型使用限制,以保證被裝載的程序不會從虛擬機模塊的堆棧中上溢或下溢,并保證所有程序指令僅使用其數(shù)據(jù)類型與用于這些程序指令的數(shù)據(jù)類型限制相匹配的數(shù)據(jù)。
但是,在使用AS碼編程的被裝載程序148的情況下,代碼驗證器151不能被用于直接驗證它們的完整性。因此,為了間接驗證它們的完整性,網(wǎng)絡(luò)100可以是一個封閉和可信賴的網(wǎng)絡(luò),在該網(wǎng)絡(luò)中,這些程序可以被保密地發(fā)送給具有高置信度的客戶計算機102。另外,如果網(wǎng)絡(luò)100不是保密的,這些程序可能隱藏了數(shù)字簽名,這些數(shù)字簽名使網(wǎng)絡(luò)通信管理程序140能夠驗證它們是來自可信賴的源。
虛擬機模塊142的執(zhí)行控制器153控制被裝載時程序147和/或148的執(zhí)行。特別是,執(zhí)行控制器對在客戶計算機系統(tǒng)102特殊結(jié)構(gòu)上執(zhí)行的程序147的AN碼進行譯碼,并使得這些程序能夠調(diào)用具有將被在所述特殊結(jié)構(gòu)上執(zhí)行的AS碼的程序148。另外,如果網(wǎng)絡(luò)通信管理程序140,和/或數(shù)據(jù)壓縮器146本身被編譯成AN碼,那么,執(zhí)行控制器也將控制它們的執(zhí)行。
由于剛剛被裝載的程序147或148是多線程的,所以,執(zhí)行控制器153建立用于這些程序的執(zhí)行線程,這些線程與任何另外裝載的程序147和/或148的線程一起都是由執(zhí)行控制器控制執(zhí)行的。
虛擬機模塊142被編譯成AS碼,用于客戶計算機102的特殊結(jié)構(gòu)。所述虛擬機模塊可以是由C語言寫成并編譯成AS碼的Java虛擬機模塊。
另外,為了使對客戶計算機系統(tǒng)102的RAM空間需求較低,數(shù)據(jù)壓縮器146在RAM 136中在執(zhí)行線程期間的各個時間處壓縮和解壓縮所述線程的執(zhí)行數(shù)據(jù)。當(dāng)每個線程的執(zhí)行數(shù)據(jù)未被壓縮時,它被存貯在所述RAM中未被壓縮數(shù)據(jù)庫158中,而當(dāng)它已經(jīng)被壓縮時,則被存貯在已壓縮據(jù)的數(shù)據(jù)庫157中。線程的執(zhí)行和存貯狀態(tài)被保持在線程執(zhí)行和存貯狀態(tài)數(shù)據(jù)結(jié)構(gòu)155中。對于那些由于滿足存貯在RAM 136中預(yù)定壓縮和解壓縮標(biāo)準(zhǔn)152和154而可分別壓縮和解壓縮的線程,線程的執(zhí)行數(shù)據(jù)被進行壓縮和解壓縮。在本發(fā)明的某些實施例中,下面將要詳述的壓縮和解壓縮標(biāo)準(zhǔn)可由用戶根據(jù)一組預(yù)定的存貯器管理策略來選擇和/或調(diào)諧(使用用戶接口128)。
在最佳實施例中,預(yù)定的壓縮標(biāo)準(zhǔn)152規(guī)定可壓縮線程的執(zhí)行數(shù)據(jù)在下述時間時被壓縮(1)需要但得不到RAM 136中的空間時;(2)可壓縮線程是尚不具有它自己被壓縮的執(zhí)行數(shù)據(jù)的最近最少執(zhí)行的線程時。另外,在最佳實施例中,用于解壓縮一個可被解壓縮線程的執(zhí)行數(shù)據(jù)的預(yù)定解壓縮標(biāo)準(zhǔn)154簡單地規(guī)定在可解壓線程變得可執(zhí)行時,所述可解壓線程的執(zhí)行數(shù)據(jù)被壓縮并將被解壓縮。
參看圖2,線程200中的每一個是由執(zhí)行控制器153利用AS碼(ASC)堆棧和AN碼(ANC)堆棧實現(xiàn)的。特別是,執(zhí)行控制器在ASC堆棧中存貯用于執(zhí)行它的AS碼的執(zhí)行數(shù)據(jù),所以它能夠控制所述線程的執(zhí)行。類似的,執(zhí)行控制器在ANC堆棧中存貯用于執(zhí)行線程的ANC碼和由AN碼調(diào)用的任一AS碼的執(zhí)行數(shù)據(jù)。在虛擬機模塊142用C語言寫成并被編譯成AS碼的情況下,與通常執(zhí)行用C語言寫成的程序一樣,每個ASC堆??梢允枪潭ǔ叽缦噙B堆棧(例如128K)。另外,在程序147被編碼成Java字節(jié)碼的情況下,ANC堆棧是一個可變尺寸的不相連Java堆棧,該堆棧可以根據(jù)RAM空間需求擴展和縮小(例如至少4K和以4K為增量的增加和減少)。
為了建立每個線程200的ASC和ANC堆棧,未壓縮數(shù)據(jù)庫158包括ASC存貯區(qū)204的存貯池202和ANC存貯區(qū)域208的存貯池206。另外,線程存貯狀態(tài)數(shù)據(jù)結(jié)構(gòu)155包括線程存貯狀態(tài)表210、ASC存貯區(qū)域204的空閑列表212和ANC存貯區(qū)域208的空閑列表214。這些空閑列表分別列出了在ASC和ANC存貯區(qū)域中那些可以利用(即空閑)區(qū)域和與這些可以利用存貯區(qū)域相對應(yīng)的指針。
圖3示出了本發(fā)明根據(jù)前述最佳壓縮和解壓縮標(biāo)準(zhǔn)152和154的壓縮和解壓縮方法的流程圖。參看圖2和3,當(dāng)利用執(zhí)行控制器153建立線程200中的一個(圖3的步驟302)時,確定在未壓縮數(shù)據(jù)庫158中是否有可用存貯空間去執(zhí)行該線程(圖3中步驟304)。這是通過根據(jù)空閑列表212和214確定是否具有可用的ASC存貯區(qū)域204和可用的ANC存貯區(qū)域208執(zhí)行的。
如果可以得到存貯空間,執(zhí)行控制器153分配存貯空間并將未壓縮執(zhí)行數(shù)據(jù)存貯到這些存貯空間中,以便在產(chǎn)生未壓縮執(zhí)行數(shù)據(jù)時執(zhí)行線程200(圖3步驟306)。換言之,如果ASC存貯區(qū)域204和ANC存貯區(qū)域208都可以得到,那么,執(zhí)行控制器將可用ASC和ANC存貯區(qū)域分配作為線程的ASC和ANC堆棧,并將該線程的未壓縮執(zhí)行數(shù)據(jù)存貯在所述堆棧中。在上述操作過程中,執(zhí)行控制器更新線程存貯狀態(tài)表210以識別所述線程,并更新形成ASC堆棧的所分配的ASC存貯區(qū)域以及形成ANC堆棧的所分配的ANC存貯區(qū)域。另外,執(zhí)行控制器更新線程存貯狀態(tài)表以便識別指向ASC和ANC存貯區(qū)域的指針,所述指針分別被用作指向ASC和ANC堆棧底部的指針。類似地,執(zhí)行控制器更新線程存貯狀態(tài)表以便識別在ASC和ANC存貯器中執(zhí)行數(shù)據(jù)末尾的指針,所述指針分別用作指向ASC和ANC堆棧頂點的指針。因此,所分配的ASC和ANC存貯區(qū)域一起提供所述線程的存貯空間。執(zhí)行控制器還更新所述線程存貯狀態(tài)表,以便指出在線程存貯空間中的執(zhí)行數(shù)據(jù)是未被壓縮數(shù)據(jù)(U)并從相應(yīng)的空閑列表中去除所分配的ASC和ANC存貯區(qū)域。
在各時間點,線程200中的每一個是可執(zhí)行的(即可使用或可運行的)或非可執(zhí)行的。由于一個線程已經(jīng)被置入休眠狀態(tài),正等待數(shù)據(jù),未被調(diào)度等,所以當(dāng)前這個線程可能是非可執(zhí)行的。線程狀態(tài)數(shù)據(jù)結(jié)構(gòu)155包括列出了當(dāng)前非可執(zhí)行的每個線程的LRE表216。LRE表以從最近最少執(zhí)行到最近最多執(zhí)行的順序列出了所述線程。
但是,如果不能在未壓縮數(shù)據(jù)庫120中獲得用于執(zhí)行線程200的存貯空間,那么,執(zhí)行控制器153調(diào)用數(shù)據(jù)壓縮器146。數(shù)據(jù)壓縮器壓縮LRE表中所列最近最少所執(zhí)行線程的執(zhí)行數(shù)據(jù)并將其置于壓縮數(shù)據(jù)庫157中(圖3步驟308)。特別是在線程存貯狀態(tài)表210中所識別的分配給所述線程的ASC和ANC存貯區(qū)域中的壓縮執(zhí)行數(shù)據(jù)被放置在壓縮數(shù)據(jù)庫157的相應(yīng)被壓縮數(shù)據(jù)(CD)存貯區(qū)域218中。數(shù)據(jù)壓縮器還更新線程存貯狀態(tài)表,以更新形成所述線程ASC和ANC堆棧的相應(yīng)CD存貯區(qū)域,指向CD存貯區(qū)域的相應(yīng)指針以及指向CD存貯區(qū)域中壓縮執(zhí)行數(shù)據(jù)末尾的相應(yīng)指針。它還更新線程存貯狀態(tài)表以便指出已經(jīng)被壓縮的線程的存貯空間(C)。數(shù)據(jù)壓縮器146可以使用本專業(yè)技術(shù)人員公知的任何快速數(shù)據(jù)壓縮技術(shù)。
當(dāng)所生成的線程200可以被執(zhí)行時,執(zhí)行控制器153在適當(dāng)?shù)臅r間將在執(zhí)行期間產(chǎn)生的未壓縮執(zhí)行數(shù)據(jù)放到ASC和ANC堆棧上和從這些堆棧中移出。在這個過程中,執(zhí)行控制器更新到相應(yīng)ASC和ANC堆棧頂部的指針。
另外,當(dāng)這個處理發(fā)生時(圖3步驟310),控制器153以與前述用于向所生成線程分配存貯空間相類似的方式增加執(zhí)行期間所述線程需要更多的存貯空間時(圖3步驟312)線程存貯空間的尺寸(步驟304-308)。特別是,每當(dāng)線程需要附加存貯空間以存貯用于運行以結(jié)構(gòu)中性語言編程的線程的執(zhí)行數(shù)據(jù)時,必需通過向它分配未壓縮數(shù)據(jù)庫120的其它部分來增加ANC堆棧的尺寸。在該處理過程中,執(zhí)行控制器通過更新線程存貯狀態(tài)表210為線程分配空閑列表212中所列的另一ANC存儲區(qū)208,以識別作為ANC堆棧一部分的所分配的ANC存貯區(qū)域、識別指向被分配ANC存貯區(qū)域的指針、和識別指向用作到ANC堆棧頂部的指針的被分配ANC存貯區(qū)域中執(zhí)行數(shù)據(jù)末尾的指針。另外,執(zhí)行控制器從空閑列表中刪除所分配的ANC存貯區(qū)域(或如果只有一部分可獲得的ANC存貯區(qū)域被分配給所述線程、則減小它的尺寸)。
類似地,當(dāng)線程200是可執(zhí)行的時(圖3步驟310),每當(dāng)它不再需要其存貯空間的一部分時(圖3步驟314),通過重新分配它不需要的部分來減少該線程的存貯空間(圖3步驟316)。特別是,在執(zhí)行過程中無論什么時候當(dāng)所述線程需要較少存貯空間時,ANC堆棧的尺寸都被減小。例如,如果存貯器以4K字節(jié)塊進行分配,當(dāng)該線程所使用的ANC堆棧的一部分被減少到足以允許重新分配4K字節(jié)塊(即到ANC堆棧頂部的指針指向所述ANC堆棧的前4K字節(jié)塊)時,所述ANC堆棧的尺寸被減少一個4K字節(jié)塊,這是通過重新分配不再需要的ANC堆棧ANC存貯區(qū)域208而進行的。在重新分配ANC存貯區(qū)域的過程中,執(zhí)行控制器更新線程存貯狀態(tài)表210,以從中刪除ANC存貯區(qū)域并不再將其識別為是ANC堆棧的一部分。
當(dāng)線程200變得非可執(zhí)行時(圖3步驟310),執(zhí)行控制器153將其加到LRE表216的末端(圖3步驟318)。當(dāng)這個線程仍然是非可執(zhí)行的時候(圖3步驟320),執(zhí)行控制器確定其它的線程是否需要其存貯空間的任一部分(圖3步驟322)。如前所述,這發(fā)生在其它線程被建立(圖3步驟302)或需要附加存貯空間(圖3步驟312),在未壓縮數(shù)據(jù)庫120中沒有足夠的其它線程可用的存貯空間,以及需要存貯空間的線程是一個在還不具有其被壓縮執(zhí)行數(shù)據(jù)的LRE表216中的最近最少執(zhí)行的線程的時候。
如果另外的線程需要存貯空間,那么,利用數(shù)據(jù)壓縮器以上面所討論的方式(圖3步驟308)對需要其存貯空間的線程200的執(zhí)行數(shù)據(jù)進行壓縮(圖3步驟324)。重復(fù)這個處理(圖3步驟320-324),直到該線程再次變成可執(zhí)行的為止(圖3步驟320)。
當(dāng)所述線程200再次變?yōu)榭蓤?zhí)行的時,執(zhí)行控制器153確定該線程的執(zhí)行數(shù)據(jù)是否已被壓縮(圖3步驟326)。如果它還沒有被壓縮,則執(zhí)行控制器從LRE表216中刪除該線程(圖3步驟328),結(jié)果是在該線程再次變成非可執(zhí)行之前其執(zhí)行數(shù)據(jù)將不被壓縮(圖3步驟310),該線程被加到LRE表上(圖3步驟318),和該線程的存貯空間被另一線程所需要(圖3步驟322)。
但是,當(dāng)該線程200再次變成可執(zhí)行但卻不具有它的被壓縮執(zhí)行數(shù)據(jù)時,則執(zhí)行控制器153確定在未壓縮數(shù)據(jù)庫120中是否可以得到用于對該線程執(zhí)行數(shù)據(jù)進行解壓縮的存貯空間(圖3步驟330)。這是通過與上述用于生成的線程(圖3步驟304)的類似的方式執(zhí)行的。
如果沒有可用于對線程200的執(zhí)行數(shù)據(jù)進行解壓縮的足夠存貯空間,那么,在LRE表216中的一個或多個最近最少執(zhí)行的線程的執(zhí)行數(shù)據(jù)被壓縮,以使得能夠獲得存貯空間。這是通過以與上述方式(圖3步驟308和324)類似的方式執(zhí)行的。
當(dāng)已經(jīng)獲得了足夠的存貯空間或當(dāng)通過對一個或多個其它線程的執(zhí)行數(shù)據(jù)進行壓縮獲得了足夠的存貯空間時,執(zhí)行控制器153分配對線程200的執(zhí)行數(shù)據(jù)解壓縮所需的存貯空間(圖3步驟334)。這是通過與前述用于生成的線程(圖3步驟306)的類似方式執(zhí)行的,從而對ASC和ANC存貯區(qū)域204和208進行分配以形成線程的ASC和ANC堆棧。
然后,利用數(shù)據(jù)壓縮器146對線程20的執(zhí)行數(shù)據(jù)解壓縮,并放置在可以獲得的存貯器空間中(圖3步驟336)。特別是,在線程存貯狀態(tài)表210中被識別為分配給所述線程的CD存貯區(qū)域218中的執(zhí)行數(shù)據(jù)被解壓縮并放置在由執(zhí)行控制器153分配的相應(yīng)ASC和ANC存貯區(qū)域204和208中。在這個過程中,數(shù)據(jù)壓縮器更新程序存貯狀態(tài)表210以識別指向形成所述線程的ASC和ANC堆棧的相應(yīng)ASC和ANC存儲區(qū)域的指針和指向ASC和ANC堆棧頂部的指針。如上所述,在線程再次變得非可執(zhí)行(圖3步驟310)之前,該線程的執(zhí)行數(shù)據(jù)將不被壓縮,該線程被加到LRE表216上(圖3步驟318)且該線程的存貯空間被另一線程所需要(圖3步驟322)。
鑒于前文所述,很清楚,本發(fā)明提供了一種減少用于執(zhí)行線程的運行時間存貯空間的手段。但是,如本技術(shù)領(lǐng)域內(nèi)的技術(shù)人員所了解的,可以使用其它的實施例提供類似的優(yōu)點。
特別是,前述的壓縮標(biāo)準(zhǔn)152規(guī)定當(dāng)需要RAM 136中的空間但得不到時應(yīng)當(dāng)壓縮具有未壓縮執(zhí)行數(shù)據(jù)的最近最少執(zhí)行的線程200。但是,所述壓縮標(biāo)準(zhǔn)可以由用戶從一個很寬的選擇范圍并根據(jù)規(guī)定給用戶的客戶計算機系統(tǒng)102的條件的數(shù)量進行選擇。例如,所述壓縮標(biāo)準(zhǔn)可以簡單地規(guī)定為線程一旦變得非可執(zhí)行時就要對每個線程的執(zhí)行數(shù)據(jù)執(zhí)行壓縮?;蛘呖梢砸?guī)定無論在什么時候只要時間允許這么做就可以緩慢地對某些線程的執(zhí)行數(shù)據(jù)進行壓縮。最后,作為前述任一種變化,所述壓縮標(biāo)準(zhǔn)可以規(guī)定為,只有特定尺寸或類型線程的執(zhí)行數(shù)據(jù)可以被壓縮。
另外,如前所述,壓縮標(biāo)準(zhǔn)154規(guī)定線程一旦再次變成可執(zhí)行的,具有被壓縮執(zhí)行數(shù)據(jù)的線程200就應(yīng)當(dāng)用數(shù)據(jù)壓縮器146解壓縮它的執(zhí)行數(shù)據(jù)。但是,解壓縮標(biāo)準(zhǔn)可規(guī)定在經(jīng)過一個預(yù)定時間間隔之后解壓縮被壓縮的執(zhí)行數(shù)據(jù)。在這種情況下,數(shù)據(jù)壓縮器應(yīng)當(dāng)包括一個用于對時間間隔計時的定時器。在另外一個例子中,這種技術(shù)可應(yīng)用于這樣一個線程,該線程被置于休眠狀態(tài)一段已知時間間隔以便使該線程的執(zhí)行數(shù)據(jù)在這段時間間隔內(nèi)被壓縮,然后,正好在該線程被喚醒之前進行解壓縮?;蛘?,在另外一個例子中,這種技術(shù)被用于一個線程,該線程等待一個數(shù)據(jù),其中,可以選擇對線程執(zhí)行數(shù)據(jù)進行壓縮的時間間隔,以便預(yù)測什么時候可以獲得用于該線程的被等待數(shù)據(jù)。
另外,如本領(lǐng)域技術(shù)人員所了解的,壓縮標(biāo)準(zhǔn)152可以規(guī)定將要被壓縮的執(zhí)行數(shù)據(jù)可以是不可壓縮線程200的整個執(zhí)行數(shù)據(jù),或簡單地為一個片斷或其中的一部分。在這種情況下,被壓縮執(zhí)行數(shù)據(jù)的數(shù)量可以根據(jù)另一線程所需的存貯空間。例如,如果另一線程需要ANC存貯區(qū)域208,并且不能夠得到更多的ANC存貯區(qū)域,那么,只有在所需要的非可執(zhí)行線程的ANC存貯區(qū)域中的執(zhí)行數(shù)據(jù)可以被壓縮,以使得可以獲得這個ANC存貯區(qū)域。
在另外一個實施例中,即使ANC存貯區(qū)域208中的每一個可能當(dāng)前并沒有存貯線程的任何執(zhí)行數(shù)據(jù),它也總是被分配作為相應(yīng)線程200的ANC堆棧的一部分。這樣,當(dāng)分配給一個線程的一個ANC存貯區(qū)域不再被那個線程需要去存貯數(shù)據(jù)時,執(zhí)行控制器153仍然保留分配給所述線程的ANC存貯區(qū)域。這是由于在其執(zhí)行過程的后一時刻所述線程可能將再次需要另一ANC存貯區(qū)域。為保持ANC存貯區(qū)域分配給這個線程,執(zhí)行控制器更新線程存貯狀態(tài)表210以識別指向ANC堆棧頂部的指針(將位于ANC堆棧的另一個ANC存貯區(qū)域中)。在這種方式下,建立可用ANC存貯區(qū)域的虛擬空閑列表,其中,所有的可用ANC存貯區(qū)域被分配給多個線程但不包含執(zhí)行數(shù)據(jù)。這樣,當(dāng)一個線程需要另外一個ANC存貯區(qū)域時,執(zhí)行控制器將以如上所述相同的方式向這個其它的線程重新分配一個不存儲執(zhí)行數(shù)據(jù)的可用的ANC存貯區(qū)域。
另外,參考圖4和圖5,輔助存貯器400可用于存貯由于滿足輔助存貯標(biāo)準(zhǔn)而可被存貯的線程200的被壓縮的執(zhí)行數(shù)據(jù)。在這種情況下,輔助存貯標(biāo)準(zhǔn)應(yīng)當(dāng)包括在上面討論的壓縮標(biāo)準(zhǔn)152中并且可規(guī)定被壓縮的執(zhí)行數(shù)據(jù)或它的一部分在它被壓縮時將被存貯在輔助存貯器之內(nèi),或可規(guī)定只有在需要存貯空間時,它才被存貯在輔助存貯器中。在這二種情況中的任一種情況下,數(shù)據(jù)壓縮器146將存貯在CD存貯區(qū)域218中的壓縮數(shù)據(jù)移動并存貯到輔助存貯器400中的相應(yīng)CD存貯區(qū)域500中。另外,數(shù)據(jù)壓縮器更新程序存貯狀態(tài)表210中的指針指向輔助存貯器中執(zhí)行數(shù)據(jù)。另外,對于那些存貯在輔助存貯器中并需要被解壓縮的由于它們的執(zhí)行數(shù)據(jù)或這些數(shù)據(jù)的一部分被壓縮而可恢復(fù)的線程來講,將從輔助存貯器中恢復(fù)所述執(zhí)行數(shù)據(jù),然后以上述方式在RAM 136中解壓縮。
再有,在客戶計算機系統(tǒng)102包括輔助存貯器400(即網(wǎng)絡(luò)臺式計算機)的實施例中,程序147和/或148可從服務(wù)器計算機系統(tǒng)104下裝載到輔助存貯器上。這樣,可利用虛擬機模塊142直接從輔助存貯器而不是從服務(wù)器計算機系統(tǒng)104將這些程序裝載到RAM 136中。另外,在這樣一個實施例中,操作系統(tǒng)138、網(wǎng)絡(luò)通信管理程序140、虛擬機模塊142和數(shù)據(jù)壓縮器146可存貯在輔助存貯器中并從這里裝載到所述RAM中。
在另外的一個實施例中,操作系統(tǒng)138、網(wǎng)絡(luò)通信管理程序140、虛擬機模塊142和數(shù)據(jù)壓縮器146可從一個服務(wù)器計算機系統(tǒng)104下裝載到客戶計算機系統(tǒng)系統(tǒng)102的RAM 136中。其執(zhí)行方式類似于前述用于服務(wù)器計算機系統(tǒng)的程序147和/或148的方式。
在另外的一個實施例中,虛擬機模塊142實際是由硅芯片構(gòu)成的并被用作客戶計算機系統(tǒng)102的CPU 126。在這種情況下,用AN碼編制的程序147不被譯碼用于特殊結(jié)構(gòu)而是被直接執(zhí)行。在這個實施例中,不利用由AS碼編制的程序148。
最后,雖然已參照少數(shù)幾個特定實施例對本發(fā)明進行了描述,這種描述僅是示意性的并不構(gòu)成對本發(fā)明的限制。在不脫離由所附權(quán)利要求規(guī)定的本發(fā)明的實質(zhì)精神和范圍的前提下,本專業(yè)技術(shù)領(lǐng)域內(nèi)的普通技術(shù)人員可以作出多種改變。
權(quán)利要求
1.一種計算機系統(tǒng),用于執(zhí)行具有減少的運行時間存貯空間要求的多個執(zhí)行線程,所述計算機系統(tǒng)包括運行時間存貯器;執(zhí)行控制器,該執(zhí)行控制器(A)執(zhí)行線程,借此使所述線程在不同的時間為可執(zhí)行的和非可執(zhí)行的,和(B)當(dāng)產(chǎn)生執(zhí)行數(shù)據(jù)時,將所述線程未被壓縮的執(zhí)行數(shù)據(jù)存貯到運行時間存貯器中的可用空間內(nèi);和數(shù)據(jù)壓縮器,該數(shù)據(jù)壓縮器(A)壓縮運行時間存貯器中非可執(zhí)行線程中可壓縮線程的未壓縮執(zhí)行數(shù)據(jù)或這些數(shù)據(jù)的一些部分,和(B)將所述線程中可解壓縮線程的壓縮的執(zhí)行數(shù)據(jù)解壓縮到運行時間存貯器中的可用空間內(nèi),從而在所述線程變得可執(zhí)行之后可執(zhí)行該線程中可解壓縮的那些。
2.如權(quán)利要求1的計算機系統(tǒng),其特征在于所述線程中可解壓縮的那些一旦變成可執(zhí)行的,數(shù)據(jù)壓縮器就對可解壓縮線程的壓縮執(zhí)行數(shù)據(jù)解壓縮。
3.如權(quán)利要求1的計算機系統(tǒng),其特征是在預(yù)定的時間間隔之后,數(shù)據(jù)壓縮器對可解壓縮線程的壓縮執(zhí)行數(shù)據(jù)解壓縮。
4.如權(quán)利要求1、2或3的計算機系統(tǒng),其特征是所述線程中的可壓縮的那些一旦變成非可執(zhí)行的,數(shù)據(jù)壓縮器就對可壓縮線程的未壓縮執(zhí)行數(shù)據(jù)或該數(shù)據(jù)的一些部分進行壓縮。
5.如權(quán)利要求1、2或3的計算機系統(tǒng),其特征是當(dāng)需要運行時間存貯器中的空間而又得不到時,數(shù)據(jù)壓縮器壓縮所述線程中可壓縮線程的未壓縮執(zhí)行數(shù)據(jù)或該數(shù)據(jù)的一部分。
6.如權(quán)利要求5的計算機系統(tǒng),還包括最近最少執(zhí)行表,該表按照從最近最少執(zhí)行的線程到最近最多執(zhí)行的線程的順序列出了當(dāng)前非可執(zhí)行的那些線程;當(dāng)需要運行時間存貯器的空間而又得不到時,線程中可壓縮的那些是在具有未壓縮執(zhí)行數(shù)據(jù)的最近最少執(zhí)行表中的最近最少執(zhí)行的線程。
7.如權(quán)利要求1到6中的任何一個的計算機系統(tǒng),還包括輔助存貯器;數(shù)據(jù)壓縮器,用于(A)當(dāng)需要運行時間存貯器中的空間而得不到時,將所述線程中可存貯的那些的壓縮執(zhí)行數(shù)據(jù)或該數(shù)據(jù)的一些部分存貯到輔助存貯器中;和(B)恢復(fù)其被壓縮的執(zhí)行數(shù)據(jù)將在運行時間存貯器中被解壓縮的線程中可恢復(fù)的那些線程的壓縮執(zhí)行數(shù)據(jù)或該數(shù)據(jù)的一些部分。
8.一種用于執(zhí)行具有減少的運行時間存貯空間要求的多個執(zhí)行線程的方法,包括如下步驟提供一個運行時間存貯器;執(zhí)行所述線程,以使所述線程在不同的時間是可執(zhí)行的或非可執(zhí)行的;當(dāng)產(chǎn)生執(zhí)行數(shù)據(jù)時,將未壓縮的所述線程的執(zhí)行數(shù)據(jù)存貯到運行時間存貯器的可用空間中;壓縮非可執(zhí)行線程中可壓縮的那些的未壓縮執(zhí)行數(shù)據(jù)或該數(shù)據(jù)的一些部分,借此獲得運行時間存貯器中的空間;和將所述線程中可解壓的那些的壓縮執(zhí)行數(shù)據(jù)解壓縮到運行時間存貯器的可用空間中,從而使在所述線程中可解壓的那些變成可執(zhí)行之后可以執(zhí)行這些線程。
9.如權(quán)利要求8的方法,其特征是所述解壓步驟包括所述可解壓線程一旦變成可執(zhí)行的,就對可解壓線程的壓縮執(zhí)行數(shù)據(jù)解壓縮。
10.如權(quán)利要求8的方法,其特征是所述解壓縮步驟包括在一個預(yù)定時間間隔之后對所述可解壓線程的壓縮執(zhí)行數(shù)據(jù)解壓縮。
11.如權(quán)利要求8、9或10的方法,其特征是所述壓縮步驟包括在所述線程中可壓縮的那些變成非可執(zhí)行時對所述可壓縮線程的未壓縮執(zhí)行數(shù)據(jù)進行壓縮。
12.如權(quán)利要求8、9或10的方法,其特征是所述壓縮步驟包括當(dāng)需要運行時間存貯器的空間而又得不到時,壓縮所述可壓縮線程的未壓縮執(zhí)行數(shù)據(jù)。
13.如權(quán)利要求12的方法,還包括如下步驟提供一個最近最少執(zhí)行表,該表按照從最近最少執(zhí)行的線程到最近最多執(zhí)行的線程的順序列出了當(dāng)前非可執(zhí)行的那些線程;所述線程中可壓縮的那些是當(dāng)需要運行時間存貯器中的空間而又得不到時在具有未壓縮執(zhí)行數(shù)據(jù)的最近最少執(zhí)行表中的最近最少執(zhí)行的線程。
14.如權(quán)利要求8到13中任一個的方法,還包括如下步驟提供輔助存貯器;當(dāng)需要運行時間存貯器中的空間而又得不到時,將所述線程中可存貯的那些線程的壓縮執(zhí)行數(shù)據(jù)或該數(shù)據(jù)的一些部分存貯到輔助存貯器中,和從輔助存貯器恢復(fù)其壓縮的執(zhí)行數(shù)據(jù)需要在運行時間存貯器中被解壓縮的線程中可恢復(fù)的那些線程的壓縮執(zhí)行數(shù)據(jù)或該數(shù)據(jù)的一些部分。
全文摘要
執(zhí)行多個減少存貯空間要求的執(zhí)行線程的計算機系統(tǒng)和方法。包括存貯器、執(zhí)行控制器和數(shù)據(jù)壓縮器。執(zhí)行控制器控制線程的執(zhí)行使其在不同時間是可執(zhí)行和非可執(zhí)行的。當(dāng)產(chǎn)生執(zhí)行數(shù)據(jù)時執(zhí)行控制器還將未壓縮線程的執(zhí)行數(shù)據(jù)存貯到運行時間存貯器可用空間中。數(shù)據(jù)壓縮器壓縮非可執(zhí)行可壓縮線程的未壓縮執(zhí)行數(shù)據(jù)。由此可獲得運行時間存貯器的空間。數(shù)據(jù)壓縮器還解壓縮運行時間存貯器可用空間中可解壓線程的壓縮執(zhí)行數(shù)據(jù)使在線程變成可執(zhí)行后可以執(zhí)行其可解壓縮部分。
文檔編號G06F9/44GK1180193SQ9711595
公開日1998年4月29日 申請日期1997年6月5日 優(yōu)先權(quán)日1996年6月5日
發(fā)明者蒂莫西·G·林霍爾姆, 威廉·N·喬伊 申請人:太陽微系統(tǒng)有限公司