專利名稱:循環(huán)控制流轉(zhuǎn)移的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及循環(huán)控制流,尤其涉及循環(huán)控制流轉(zhuǎn)移。
背景技術(shù):
在軟件內(nèi)部,控制流機(jī)制幫助指定執(zhí)行或評(píng)估各個(gè)語句、指令、調(diào)用、以及其他項(xiàng)的次序。在源代碼級(jí)別,并且有時(shí)在更低的級(jí)別,不同的編程語言和不同的運(yùn)行時(shí)環(huán)境可提供不同的控制流機(jī)制。
在機(jī)器或匯編語言級(jí)別,控制流指令通常通過更改程序計(jì)數(shù)器來工作。在源代碼內(nèi)部,給定的語言可提供控制流語句,這些控制流語句繼續(xù)在不同于后面的語句的位置執(zhí)行(例如,無條件分支(branch)、跳轉(zhuǎn)(jump)、轉(zhuǎn)到(goto));只有在滿足某些條件時(shí)執(zhí)行指定的語句(例如,條件分支(branch));取決于某些指定的條件執(zhí)行指定的語句零次或更多次(例如,循環(huán)(loop));執(zhí)行一組遠(yuǎn)處的語句并接著返回到其離開的地方(例如,例程、 函數(shù)、方法、協(xié)同例程);和/或無條件地中止執(zhí)行。
在許多情況下,給定控制流機(jī)制對(duì)程序的數(shù)據(jù)的效果能使用若干等效的控制流機(jī)制中的任一個(gè)來獲得。例程主體可以是內(nèi)聯(lián)的,例如,不改變程序的關(guān)于針對(duì)給定輸入的數(shù)據(jù)輸出的行為(雖然執(zhí)行速度和/或存儲(chǔ)器要求可改變)。同樣,在循環(huán)主體中間或末尾有退出條件的循環(huán)可具有其退出條件在循環(huán)主體的頂部被測(cè)試的功能上等效的指令序列。具有一個(gè)進(jìn)入和一個(gè)退出的控制流結(jié)構(gòu)通常比那些不具有一個(gè)進(jìn)入和一個(gè)退出的控制流結(jié)構(gòu)更容易理解,因?yàn)?至少在概念上)這樣的結(jié)構(gòu)能在程序的任何地方作為單個(gè)語句使用而不會(huì)使控制流變得復(fù)雜。這樣的控制流結(jié)構(gòu)被稱為“組成的”。例如,許多循環(huán)是組成的結(jié)構(gòu)。
發(fā)明內(nèi)容
在某些計(jì)算情形中,同步地暫停某些或全部程序線程是有幫助的或者甚至是必須的。例如,同步線程可以是無用信息收集(回收未使用的存儲(chǔ)器)的部分、實(shí)時(shí)系統(tǒng)中高優(yōu)先級(jí)代碼的及時(shí)執(zhí)行的部分、和/或允許進(jìn)程達(dá)成協(xié)議或提交特定的一系列動(dòng)作的進(jìn)程同步的部分。然而,某些線程包括長時(shí)間運(yùn)行循環(huán),諸如沒有例程調(diào)用的循環(huán),并且某些同步這樣的線程的方法插入使得程序代碼復(fù)雜化并降低執(zhí)行性能的程序狀態(tài)注釋或全局狀態(tài)檢驗(yàn)。
在此討論的某些實(shí)施例提供用于線程同步或其他目的的循環(huán)控制流轉(zhuǎn)移的替換方式。例如,假定由虛擬執(zhí)行系統(tǒng)或其他內(nèi)核管理的可執(zhí)行模塊包括具有循環(huán)主體和循環(huán)頂部的循環(huán)。一間接單元包括循環(huán)頂部地址,即,指向循環(huán)頂部的地址。循環(huán)跳轉(zhuǎn)指令序列引用該間接單元。在該上下文中,第一線程執(zhí)行循環(huán)主體的迭代。執(zhí)行加載包括在間接單元內(nèi)的地址,并通過在間接單元中指定的地址繼續(xù)第一線程的執(zhí)行流到循環(huán)頂部。執(zhí)行的第二線程更改間接單元的內(nèi)容使得該間接單元包括除了循環(huán)頂部地址之外的地址,例如, 內(nèi)核同步例程地址;該更改可以被原子地執(zhí)行。無論如何,第一線程的執(zhí)行流通過被更改的間接單元被轉(zhuǎn)移到遠(yuǎn)離循環(huán)頂部的點(diǎn)。諸如無用信息收集等同步操作被執(zhí)行而循環(huán)(以及由此的使用該循環(huán)的線程)被因此轉(zhuǎn)移。內(nèi)核或另一線程接著將循環(huán)頂部地址還原到間接單元內(nèi),并且第一線程的執(zhí)行流通過被還原的間接單元再一次繼續(xù)到循環(huán)頂部。
循環(huán)轉(zhuǎn)移能在不限制哪些寄存器在從循環(huán)主體底部到循環(huán)頂部的連續(xù)轉(zhuǎn)換中保持有效的情況下執(zhí)行。在某些變型中,多個(gè)循環(huán)和/或多個(gè)線程被轉(zhuǎn)移。對(duì)強(qiáng)行地從另一線程修改一線程的執(zhí)行上下文的操作系統(tǒng)支持不必是可用的也不必被使用。
在某些實(shí)施例中,代碼生成器提供具有循環(huán)主體和循環(huán)頂部的循環(huán)。代碼生成器將間接單元與循環(huán)頂部關(guān)聯(lián),使得循環(huán)跳轉(zhuǎn)指令序列包括到包括在間接單元內(nèi)的地址的跳轉(zhuǎn)。代碼生成器也指定原始值存儲(chǔ)位置,該存儲(chǔ)位置被調(diào)整大小以保存循環(huán)頂部地址的表示,即,該地址本身或該地址的已編碼版本,諸如壓縮的版本。代碼生成器發(fā)出重定向目標(biāo)代碼,該重定向目標(biāo)代碼在被執(zhí)行時(shí)將準(zhǔn)備對(duì)應(yīng)于相應(yīng)的間接單元的標(biāo)識(shí)符并將控制傳送到重定向處理例程。簡而言之,如所討論的,代碼生成器生成用于影響循環(huán)控制流轉(zhuǎn)移的代碼。代碼生成器,和/或如此生成的代碼,可駐留在計(jì)算機(jī)系統(tǒng)的存儲(chǔ)器內(nèi),與系統(tǒng)的邏輯處理器可操作地通信。
給出的示例僅是說明性的。本概述并不旨在標(biāo)識(shí)出所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在用于限定所要求保護(hù)的主題的范圍。相反,提供本概述是為了以簡化的形式介紹將在以下詳細(xì)描述中進(jìn)一步描述的某些概念。本發(fā)明用權(quán)利要求書來定義,且在本發(fā)明內(nèi)容與權(quán)利要求書沖突的情況下,應(yīng)以權(quán)利要求書為準(zhǔn)。
將參考附圖來給出更具體的描述。這些附圖僅示出了所選方面,且因此未完全確定覆蓋或范圍。
圖1是示出在可存在于多個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)上的操作環(huán)境中的一計(jì)算機(jī)系統(tǒng)的框圖,該計(jì)算機(jī)系統(tǒng)具有至少一個(gè)處理器,至少一個(gè)存儲(chǔ)器,包括至少一個(gè)循環(huán)、內(nèi)核、以及其它項(xiàng)的可執(zhí)行件,并且還示出了配置的存儲(chǔ)介質(zhì)實(shí)施例; 圖2是示出在示例架構(gòu)內(nèi)的間接單元、原始值存儲(chǔ)位置、以及其他循環(huán)轉(zhuǎn)移項(xiàng)的框圖; 圖3是示出一些過程的步驟和配置的存儲(chǔ)介質(zhì)實(shí)施方式的流程圖; 圖4是示出普通循環(huán)執(zhí)行,即,在其中可轉(zhuǎn)移循環(huán)不被轉(zhuǎn)移的執(zhí)行的控制流圖;以及 圖5是示出“被劫持的Qiijacked) ”循環(huán)執(zhí)行,即,在其中可轉(zhuǎn)移循環(huán)被轉(zhuǎn)移的執(zhí)行的控制流圖。
具體實(shí)施例方式概覽 為了執(zhí)行諸如無用信息收集等某些系統(tǒng)任務(wù),虛擬執(zhí)行系統(tǒng)可能需要同步地暫停所有程序線程。為了及時(shí)地暫停長時(shí)間運(yùn)行線程(例如,沒有調(diào)用的循環(huán)),編譯器可將程序狀態(tài)注釋(諸如變量活躍度信息)或全局狀態(tài)檢驗(yàn)插入到程序代碼中。然而,這種額外的信息和邏輯往往使程序代碼變得復(fù)雜并降低其執(zhí)行性能。
一種暫停長時(shí)間運(yùn)行線程的方法是所謂的完全可中斷代碼,例如,由微軟 . NET 運(yùn)行時(shí)環(huán)境實(shí)現(xiàn)的(微軟和“.NET”是微軟公司的標(biāo)記)。包括沒有調(diào)用的循環(huán)的程序方法用描述無用信息收集指針在該方法內(nèi)的每單個(gè)機(jī)器指令處的活躍度的信息來注釋。這種注釋允許虛擬執(zhí)行系統(tǒng)在該方法內(nèi)的任意點(diǎn)強(qiáng)行地掛起運(yùn)行該代碼的線程并將其執(zhí)行重定向到一安全點(diǎn)。然而,這只有在操作系統(tǒng)支持特定線程狀態(tài)管理功能(諸如一線程強(qiáng)行地改變另一線程的上下文的能力)的情況下是可能的。
暫停長時(shí)間運(yùn)行線程的另一方法包括插入到長時(shí)間運(yùn)行循環(huán)內(nèi)的狀態(tài)檢驗(yàn),例如,如用于Mac OS 軟件的微軟Silverlight 方案實(shí)現(xiàn)的(Silverlight是微軟公司的標(biāo)記,Mac OS是蘋果公司的標(biāo)記)。這種方法在諸如Mac OS等某些缺乏完全可中斷代碼所需的支持的操作系統(tǒng)上使用。然而,這種方法涉及將額外的代碼添加到循環(huán)中以顯式地檢驗(yàn)與無用信息收集器同步的需要。
在此描述的某些實(shí)施例提供了一種不同的方法。在某些實(shí)施例中,例如,虛擬執(zhí)行系統(tǒng)(VES)使用了稱為返回地址劫持(重定向返回地址)的標(biāo)準(zhǔn)技術(shù)以在調(diào)用返回站點(diǎn)獲取程序線程的控制,并使用在此描述的循環(huán)控制流轉(zhuǎn)移技術(shù)來獲取執(zhí)行缺乏調(diào)用的長時(shí)間運(yùn)行循環(huán)的程序線程的控制。使用循環(huán)轉(zhuǎn)移,長時(shí)間運(yùn)行循環(huán)代碼生成被改變以使得當(dāng)控制跳轉(zhuǎn)回循環(huán)主體的開頭時(shí)控制流通過間接單元。在運(yùn)行時(shí),當(dāng)無用信息收集器(例如) 需要線程停止時(shí),VES修改該間接單元的內(nèi)容以指向循環(huán)專用匯編形實(shí)轉(zhuǎn)換程序(thimk), 這最終將導(dǎo)致線程在該循環(huán)的下一次迭代與無用信息收集器會(huì)合。
更一般地,在此提供的循環(huán)轉(zhuǎn)移的各方面包括將間接單元用作用于通過循環(huán)轉(zhuǎn)移來劫持由VES管理的線程的機(jī)制,從而提供了其中對(duì)每個(gè)候選循環(huán)程序內(nèi)只有一個(gè)額外的點(diǎn)需要無用信息收集器活躍度信息的實(shí)現(xiàn)方式。間接單元由另一 VES線程寫為該機(jī)制的部分以獲取循環(huán)內(nèi)線程的控制。在存在間接跳轉(zhuǎn)指令的x86類處理器架構(gòu)上,對(duì)循環(huán)代碼的主體,所有寄存器保持對(duì)代碼生成器可用。所描述的循環(huán)轉(zhuǎn)移方式可被移植到發(fā)明人已知的所有主要操作系統(tǒng)上,因?yàn)閷?duì)強(qiáng)行施加線程上下文改變的專用操作系統(tǒng)支持對(duì)于循環(huán)轉(zhuǎn)移是不需要的。以下描述循環(huán)轉(zhuǎn)移的其他各方面。
現(xiàn)在將參考諸如附圖中示出的示例性實(shí)施例,且此處將使用具體語言來描述這些實(shí)施例。但是相關(guān)領(lǐng)域且擁有本發(fā)明的技術(shù)人員將想到的、此處所示的特征的更改和進(jìn)一步修改以及此處所示的原理的其他應(yīng)用應(yīng)被認(rèn)為是在權(quán)利要求書的范圍內(nèi)。
各術(shù)語的意義在本發(fā)明中闡明,因此權(quán)利要求書應(yīng)仔細(xì)注意這些闡明來閱讀。給出了具體示例,但是相關(guān)領(lǐng)域的技術(shù)人員將理解,其他示例也落入所使用的術(shù)語的意義內(nèi), 且在一個(gè)或多個(gè)權(quán)利要求的范圍內(nèi)。各術(shù)語不一定需要具有與它們?cè)谝话闶褂弥?、在特定行業(yè)使用中、或在特定字典或一組字典的使用中所具有的意義相同的意義。與各種措辭一起使用附圖標(biāo)記來幫助顯示術(shù)語的寬度。給定一段文本中省略附圖標(biāo)記并不一定意味著該附圖的內(nèi)容沒有被該文本討論。發(fā)明人聲稱并行使其對(duì)于其自己的詞典編纂的權(quán)利。各術(shù)語此處可在詳細(xì)描述和/或申請(qǐng)文件的別處顯式或隱式地定義。
如本文所使用的,“計(jì)算機(jī)系統(tǒng)”可包括例如一個(gè)或多個(gè)服務(wù)器、主板、處理節(jié)點(diǎn)、 個(gè)人計(jì)算機(jī)(便攜式或非便攜式)、個(gè)人數(shù)字助理、蜂窩或移動(dòng)電話、和/或提供至少部分地由指令控制的一個(gè)或多個(gè)處理器的其他設(shè)備。指令可以是以存儲(chǔ)器和/或?qū)S秒娐分械能浖男问健>唧w而言,盡管可以想到許多實(shí)施例在工作站或膝上型計(jì)算機(jī)上運(yùn)行,但其他實(shí)施例可以在其他計(jì)算設(shè)備上運(yùn)行,且任何一個(gè)或多個(gè)此類設(shè)備可以是給定實(shí)施例的一部分。
“多線程化”計(jì)算機(jī)系統(tǒng)是支持多個(gè)執(zhí)行線程的計(jì)算機(jī)系統(tǒng)。術(shù)語“線程”應(yīng)被理解為包括能夠或經(jīng)歷同步的任何代碼,并且可用另一名稱來稱呼,如“任務(wù)”、“進(jìn)程”或“協(xié)同例程”。線程可以并行地、順序地、或以并行執(zhí)行(例如,多處理)和順序執(zhí)行(例如,時(shí)間分片)的組合來運(yùn)行。以各種配置設(shè)計(jì)了多線程化環(huán)境。執(zhí)行線程可以并行地運(yùn)行,或者線程可以被組織供并行執(zhí)行但實(shí)際依次輪流執(zhí)行。多線程化可以例如通過在多處理環(huán)境中在不同核上運(yùn)行不同線程、通過對(duì)單個(gè)處理器核上的不同線程進(jìn)行時(shí)間分片、或通過時(shí)間分片和多處理器線程化的某種組合來實(shí)現(xiàn)。線程上下文切換可以例如由內(nèi)核的線程調(diào)度器、由用戶空間信號(hào)、或由用戶空間和內(nèi)核操作的組合來發(fā)起。線程可輪流在共享數(shù)據(jù)上操作,或者每一線程可以例如在其自己的數(shù)據(jù)上操作。
“邏輯處理器”或“處理器”是單個(gè)獨(dú)立的硬件線程處理單元。例如,每一個(gè)核運(yùn)行兩個(gè)線程的超線程化四核芯片具有8個(gè)邏輯處理器。處理器可以是通用的,或者它們可以針對(duì)諸如圖形處理、信號(hào)處理、浮點(diǎn)算術(shù)處理、加密、I/O處理等特定用途來定制。
“多處理器”計(jì)算機(jī)系統(tǒng)是具有多個(gè)邏輯處理器的計(jì)算機(jī)系統(tǒng)。多處理器環(huán)境以各種配置出現(xiàn)。在一給定配置中,所有處理器可以在功能上是等價(jià)的,而在另一配置中,某些處理器可以借助具有不同硬件能力、不同軟件分配或兩者而不同于其他處理器。取決于配置,處理器可在單個(gè)總線上彼此緊耦合,或者它們可以是松耦合的。在某些配置中,處理器共享中央存儲(chǔ)器,在某些配置中它們各自具有其自己的本地存儲(chǔ)器,且在某些配置中存在共享和本地存儲(chǔ)器兩者。
在此描述的“內(nèi)核”包括虛擬執(zhí)行系統(tǒng)、操作系統(tǒng)、系統(tǒng)管理程序、虛擬機(jī)、以及類似的硬件接口軟件。
“代碼”表示處理器指令、數(shù)據(jù)(包括常量、變量和數(shù)據(jù)結(jié)構(gòu))或指令和數(shù)據(jù)兩者。
“自動(dòng)”意味著通過使用自動(dòng)化(例如,由軟件針對(duì)此處討論的具體操作配置的通用計(jì)算硬件),與不使用自動(dòng)化相對(duì)。具體而言,“自動(dòng)”執(zhí)行的步驟并不是在紙張上用手執(zhí)行或在人的腦海中執(zhí)行的;它們是用機(jī)器來執(zhí)行的。
貫穿本文,對(duì)任選的復(fù)數(shù)的使用意味著存在一個(gè)或多個(gè)所指示的特征。例如, “(諸)循環(huán)”意味著“一個(gè)或多個(gè)循環(huán)”或等效于“至少一個(gè)循環(huán)”。
只要參考了數(shù)據(jù)或指令,就理解這些項(xiàng)目配置了計(jì)算機(jī)可讀存儲(chǔ)器,從而將其變換為特定物品,而非簡單地存在于紙張上、人的腦海中、或作為例如線路上的瞬時(shí)信號(hào)。
操作環(huán)境 參考圖1,用于一個(gè)實(shí)施例的操作環(huán)境100可包括計(jì)算機(jī)系統(tǒng)102。計(jì)算機(jī)系統(tǒng) 102可以是多處理器計(jì)算機(jī)系統(tǒng),也可以不是。操作環(huán)境可包括給定計(jì)算機(jī)系統(tǒng)中的一個(gè)或多個(gè)機(jī)器,它們可以群集的、客戶機(jī)-服務(wù)器聯(lián)網(wǎng)的、和/或?qū)Φ嚷?lián)網(wǎng)的。
人類用戶104可以通過使用顯示器、鍵盤和其他外圍設(shè)備106來與計(jì)算機(jī)系統(tǒng)102 交互。系統(tǒng)管理員、開發(fā)人員、工程技術(shù)人員、以及最終用戶各自都是特定類型的用戶104。 代表一個(gè)或多個(gè)人來行動(dòng)的自動(dòng)化代理也可以是用戶104。存儲(chǔ)設(shè)備和/或聯(lián)網(wǎng)設(shè)備在某些實(shí)施例中可被認(rèn)為是外圍設(shè)備。圖1中未示出的其他計(jì)算機(jī)系統(tǒng)可以使用經(jīng)由例如網(wǎng)絡(luò)接口設(shè)備到網(wǎng)絡(luò)108的一個(gè)或多個(gè)連接來與計(jì)算機(jī)系統(tǒng)102或與另一系統(tǒng)實(shí)施例交互。
計(jì)算機(jī)系統(tǒng)102包括至少一個(gè)邏輯處理器110。如其他合適的系統(tǒng)等計(jì)算機(jī)系統(tǒng) 102還包括一個(gè)或多個(gè)計(jì)算機(jī)可讀非瞬態(tài)存儲(chǔ)介質(zhì)112。介質(zhì)112可以是不同的物理類型。 介質(zhì)112可以是易失性存儲(chǔ)器、非易失性存儲(chǔ)器、固定在原處的介質(zhì)、可移動(dòng)介質(zhì)、磁介質(zhì)、 光介質(zhì)、和/或其他類型的非瞬態(tài)介質(zhì)(與諸如僅傳播信號(hào)的線路等瞬態(tài)介質(zhì)形成對(duì)比)。 具體地,諸如CD、DVD、記憶棒或其他可移動(dòng)非易失性存儲(chǔ)介質(zhì)等配置的介質(zhì)114在被插入或以其他方式安裝時(shí)可以變?yōu)橛?jì)算機(jī)系統(tǒng)的功能部分,從而使得其內(nèi)容可被存取來供處理器110使用??梢苿?dòng)的配置的介質(zhì)114是計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)112的一個(gè)示例。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)112的某些其他示例包括內(nèi)置RAM、ROM、、硬盤、和不可由用戶104容易地移動(dòng)的其他存儲(chǔ)設(shè)備。
介質(zhì)114用可由處理器110執(zhí)行的指令116來配置;“可執(zhí)行”在此以寬泛的意義用來包括機(jī)器代碼、可解釋代碼、以及在例如虛擬機(jī)上運(yùn)行的代碼。介質(zhì)114還用通過指令116的執(zhí)行創(chuàng)建、修改、引用和/或以其他方式使用的數(shù)據(jù)118來配置。指令116和數(shù)據(jù) 118配置它們所在的介質(zhì)114 ;當(dāng)該存儲(chǔ)器是給定計(jì)算機(jī)系統(tǒng)的功能部分時(shí),指令116和數(shù)據(jù)118還配置該計(jì)算機(jī)系統(tǒng)。在某些實(shí)施例中,數(shù)據(jù)118的一部分代表了諸如產(chǎn)品特性、庫存、物理測(cè)量、設(shè)置、圖像、讀數(shù)、目標(biāo)、量等的真實(shí)項(xiàng)目。如本文討論的,這樣的數(shù)據(jù)也被轉(zhuǎn)換,例如通過改變、間接、轉(zhuǎn)移、還原、綁定、部署、執(zhí)行、修改、顯示、創(chuàng)建、加載和/或其他操作。
可執(zhí)行件120包括軟件應(yīng)用組件,諸如(諸)模塊122、(諸)線程124、和(諸) 循環(huán)126。開發(fā)/運(yùn)行時(shí)環(huán)境1 也包括軟件開發(fā)組件,諸如(諸)鏈接器、(諸)綁定器、 (諸)解釋器、(諸)編譯器以及其他(諸)代碼生成器130,并包括(諸)軟件運(yùn)行時(shí)組件, 諸如(諸)無用信息收集器132和包括各種(諸)低級(jí)例程136的(諸)內(nèi)核134。提供用于執(zhí)行托管代碼和支持Microsoft⑧公共中間語言指令集的環(huán)境的虛擬執(zhí)行系統(tǒng)138是內(nèi)核的一個(gè)示例。關(guān)于某一組件是否主要或完全是應(yīng)用組件、開發(fā)組件、和/或運(yùn)行時(shí)組件的分類僅僅是便于討論;給定組件可由不同的用戶和/或在不同的環(huán)境內(nèi)被不同地分類。
給定操作環(huán)境100可包括向開發(fā)人員提供一組協(xié)同的軟件開發(fā)工具的集成開發(fā)環(huán)境(IDE) 140。具體而言,對(duì)于一些實(shí)施方式,合適的操作環(huán)境中的一些包括或幫助創(chuàng)建被配置成支持程序開發(fā)的Microsoft Visual Studio⑧開發(fā)環(huán)境(微軟公司的標(biāo)記)。一些合適的操作環(huán)境包括Java 環(huán)境(Sun Microsystems有限公司的標(biāo)記),并且一些操作環(huán)境包括利用諸如C++或C#(“C-a!arp”)等語言的環(huán)境,但本文的教導(dǎo)適用于各種各樣的程序設(shè)計(jì)語言、程序設(shè)計(jì)模型、以及程序,以及軟件開發(fā)領(lǐng)域本身之外的使用線程、長時(shí)間運(yùn)行循環(huán)(在它們的主體內(nèi)缺乏調(diào)用的循環(huán))的努力,或這兩者。
圖中所示的軟件組件和其他項(xiàng)可以部分地或全部地駐留在一個(gè)或多個(gè)介質(zhì)112 中,從而配置這些介質(zhì)。除了存儲(chǔ)器和(諸)處理器之外,操作環(huán)境還包括其他硬件,如總線、電源和加速計(jì),等等。
一些項(xiàng)在圖1中以輪廓形式示出以強(qiáng)調(diào)它們不是所示操作環(huán)境的必需部分,但可以與在此討論的操作環(huán)境中的項(xiàng)進(jìn)行互操作。在任何附圖或任何實(shí)施例中,不能得出不采用輪廓形式的項(xiàng)目就一定是不需要的。
系統(tǒng) 圖2示出適用于一些實(shí)施方式的體系結(jié)構(gòu)。常見的循環(huán)1 被變?yōu)樵诖擞懻摰目赊D(zhuǎn)移循環(huán)200。每個(gè)可轉(zhuǎn)移循環(huán)200具有主體202、頂部204、頂部地址206、以及跳轉(zhuǎn)序列 208。循環(huán)主體202包括一個(gè)或多個(gè)語句或指令;語句可由一個(gè)或多個(gè)指令實(shí)現(xiàn)。循環(huán)頂部204可以是循環(huán)主體的第一個(gè)語句/指令,或者循環(huán)頂部可以是恰好在控制傳送到循環(huán)頂部之前被執(zhí)行的測(cè)試。循環(huán)頂部地址206可以是循環(huán)頂部204的存儲(chǔ)器地址,即,在執(zhí)行過程中將處理器110指向循環(huán)頂部的值。跳轉(zhuǎn)序列208指示處理器向循環(huán)頂部跳轉(zhuǎn)。在標(biāo)準(zhǔn)循環(huán)內(nèi),跳轉(zhuǎn)序列直接指向循環(huán)頂部。但是在可轉(zhuǎn)移循環(huán)內(nèi),跳轉(zhuǎn)序列208指向間接單元 210,如下討論的,間接單元210進(jìn)而指向循環(huán)頂部204(普通執(zhí)行)或指向另一點(diǎn)(被轉(zhuǎn)移的執(zhí)行)。
更一般地,如在此使用的,“循環(huán)”包括使用以下句法指令序列格式布局的循環(huán);方括號(hào)內(nèi)示出可選的項(xiàng)
<頂部 >[測(cè)試]指令/語句 [測(cè)試]< 跳轉(zhuǎn)序列> 如在此使用的,“循環(huán)”也包括在此作為偽代碼或圖示示例給出的循環(huán),以及功能上等效于具有以上句法指令序列格式的循環(huán)和/或功能上等效于在此給出的偽代碼或圖示示例中的任一個(gè)的循環(huán)。雖然本文中有時(shí)使用諸如“頂部”以及“后退”之類的術(shù)語,但一般所進(jìn)行的到/通過間接單元210的跳轉(zhuǎn)的方向并不限于向后跳轉(zhuǎn)或跳轉(zhuǎn)到指令序列的頂部處的位置。能使用往其他方向的跳轉(zhuǎn)來實(shí)現(xiàn)可轉(zhuǎn)移循環(huán)。
作為循環(huán)的某些偽代碼示例,且不排除能使用在此提供的間接單元210以及其他機(jī)制來轉(zhuǎn)移的非順序代碼序列的其他示例,以下各個(gè)偽代碼表示能如在此所討論的那樣來轉(zhuǎn)移的循環(huán)
權(quán)利要求
1.一種用于循環(huán)控制流轉(zhuǎn)移的過程,所述過程使用具有可操作地與至少一個(gè)存儲(chǔ)器通信的至少一個(gè)邏輯處理器的設(shè)備,所述邏輯處理器具有至少一個(gè)寄存器,所述過程包括以下步驟獲得(31 存儲(chǔ)器內(nèi)的可執(zhí)行模塊,所述可執(zhí)行模塊包括具有循環(huán)主體和循環(huán)頂部的循環(huán),所述模塊還包括包含循環(huán)頂部地址的間接單元,所述循環(huán)頂部地址即指向循環(huán)頂部的地址,所述循環(huán)還包括引用所述間接單元的循環(huán)跳轉(zhuǎn)指令序列;執(zhí)行的第一線程執(zhí)行(314)所述循環(huán)主體的迭代;通過在所述間接單元內(nèi)指定的地址將所述第一線程的執(zhí)行流繼續(xù)(316)到所述循環(huán)頂部;執(zhí)行的第二線程更改(318)所述間接單元的內(nèi)容,使得所述間接單元包括不是所述循環(huán)頂部地址的地址;通過被更改的間接單元將所述第一線程的執(zhí)行流轉(zhuǎn)移(320)到遠(yuǎn)離所述循環(huán)頂部的點(diǎn)將所述循環(huán)頂部地址還原(32 到所述間接單元內(nèi);以及通過被還原的間接單元再一次將所述第一線程的執(zhí)行流繼續(xù)到所述循環(huán)頂部。
2.如權(quán)利要求1所述的過程,其特征在于,以下至少之一被滿足多個(gè)線程(124)執(zhí)行所述循環(huán)主體,并且所述過程通過被更改的間接單元將執(zhí)行所述循環(huán)主體的所有線程的執(zhí)行流轉(zhuǎn)移到遠(yuǎn)離所述循環(huán)頂部的點(diǎn);所述循環(huán)是第一循環(huán)(126),所述第一線程也執(zhí)行第二循環(huán),所述第二循環(huán)具有相應(yīng)的第二循環(huán)主體和相應(yīng)的第二循環(huán)頂部,所述模塊還包括包含指向所述第二循環(huán)頂部的第二循環(huán)頂部地址的第二間接單元,所述第二循環(huán)還包括引用所述第二間接單元的第二循環(huán)跳轉(zhuǎn)指令序列,并且所述進(jìn)程包括通過各循環(huán)中的一個(gè)循環(huán)的被更改的第二間接單元將所述第一線程的執(zhí)行流轉(zhuǎn)移到遠(yuǎn)離該循環(huán)的頂部的點(diǎn)。
3.如權(quán)利要求1所述的過程,其特征在于,更改(318)間接單元(使得間接單元包括不是循環(huán)頂部地址的地址)的步驟相對(duì)于所述設(shè)備內(nèi)的執(zhí)行的所有線程是原子的。
4.如權(quán)利要求1所述的過程,其特征在于,所述轉(zhuǎn)移步驟通過被更改的間接單元將執(zhí)行流轉(zhuǎn)移到同步點(diǎn),并且所述過程進(jìn)一步包括將線程與內(nèi)核在同步點(diǎn)處同步(328)。
5.如權(quán)利要求1所述的過程,其特征在于,所述轉(zhuǎn)移步驟通過被更改的間接單元將執(zhí)行流轉(zhuǎn)移到同步點(diǎn),并且所述過程進(jìn)一步包括接著執(zhí)行(330)無用信息收集同步操作。
6.如權(quán)利要求1所述的過程,其特征在于,所述存儲(chǔ)器包括在用于相應(yīng)的多個(gè)循環(huán)的代碼生成期間分配的多個(gè)間接單元,并且所述過程進(jìn)一步包括標(biāo)記(332)哪個(gè)/哪些間接單元被更改。
7.如權(quán)利要求1所述的過程,其特征在于,所述循環(huán)主體具有底部,并且通過被更改的間接單元將執(zhí)行流轉(zhuǎn)移到遠(yuǎn)離循環(huán)頂部的點(diǎn)和將循環(huán)頂部地址還原到間接單元內(nèi)的步驟是在不限制(336)哪些寄存器在從循環(huán)主體底部到循環(huán)頂部的連續(xù)轉(zhuǎn)換中保持有效的情況下執(zhí)行的。
8.一種用數(shù)據(jù)和指令配置的計(jì)算機(jī)可讀非瞬態(tài)存儲(chǔ)介質(zhì),所述指令在被至少一個(gè)處理器執(zhí)行時(shí)使所述至少一個(gè)處理器執(zhí)行一種用于方便循環(huán)控制流轉(zhuǎn)移的過程,所述過程包括代碼生成器的以下步驟提供(30 具有循環(huán)主體和循環(huán)頂部的循環(huán);將間接單元與所述循環(huán)頂部相關(guān)聯(lián)(304),使得循環(huán)跳轉(zhuǎn)指令序列包括到被包括在所述間接單元內(nèi)的地址的跳轉(zhuǎn);指定(306)其大小被調(diào)整以保存所述循環(huán)頂部地址的表示的原始值存儲(chǔ)位置;以及發(fā)出(308)重定向目標(biāo)代碼,所述重定向目標(biāo)代碼在執(zhí)行時(shí)將確定對(duì)應(yīng)于相應(yīng)的間接單元的標(biāo)識(shí)符并將控制傳遞到重定向處理例程。
9.如權(quán)利要求8所述的配置的介質(zhì),其特征在于,所述過程包括代碼生成器將多個(gè)間接單元(210)與多個(gè)相應(yīng)的循環(huán)頂部相關(guān)聯(lián)(304),指定(306)多個(gè)相應(yīng)的原始值存儲(chǔ)位置 012),以及發(fā)出(308)多個(gè)相應(yīng)的重定向目標(biāo)代碼014)。
10.如權(quán)利要求8所述的配置的介質(zhì),其特征在于,指定其大小被調(diào)整以保存所述循環(huán)頂部地址的表示的原始值存儲(chǔ)位置的步驟包括代碼生成器為循環(huán)頂部地址O06)的至少某些地址指定(306)小于間接單元的原始值存儲(chǔ)位置。
11.一種計(jì)算機(jī)系統(tǒng),包括邏輯處理器(110);可操作地與所述邏輯處理器通信的存儲(chǔ)器(112);駐留在所述存儲(chǔ)器內(nèi)的可執(zhí)行模塊(120),所述可執(zhí)行模塊包括各自具有相應(yīng)的循環(huán)主體和相應(yīng)的循環(huán)頂部的多個(gè)循環(huán)(1 ),所述模塊還包括各自包含相應(yīng)的循環(huán)頂部地址的多個(gè)間接單元,所述循環(huán)頂部地址即指向相應(yīng)的循環(huán)頂部的地址,每一循環(huán)還包括包含到被包括在相應(yīng)的間接單元內(nèi)的地址的跳轉(zhuǎn)的相應(yīng)的循環(huán)跳轉(zhuǎn)指令序列;駐留在所述存儲(chǔ)器內(nèi)的多個(gè)相應(yīng)的原始值存儲(chǔ)位置012),每一原始值存儲(chǔ)位置被調(diào)整大小以保存相應(yīng)的循環(huán)頂部地址的表示;以及駐留在所述存儲(chǔ)器內(nèi)的多個(gè)相應(yīng)的重定向目標(biāo)代碼014),每一重定向目標(biāo)代碼在執(zhí)行時(shí)將控制傳遞到單個(gè)共享的重定向處理例程。
12.如權(quán)利要求11所述的系統(tǒng),其特征在于,進(jìn)一步包括虛擬執(zhí)行系統(tǒng)(138),所述虛擬執(zhí)行系統(tǒng)包括可使用線程來修改間接單元并因此將其他線程的循環(huán)轉(zhuǎn)移到由虛擬執(zhí)行系統(tǒng)指定的重定向處理例程的代碼。
13.如權(quán)利要求11所述的系統(tǒng),其特征在于,所述重定向處理例程(220)包括在執(zhí)行時(shí)將執(zhí)行無用信息收集同步操作的代碼。
14.如權(quán)利要求11所述的系統(tǒng),其特征在于,進(jìn)一步包括在執(zhí)行時(shí)將為虛擬執(zhí)行系統(tǒng)跟蹤(33 哪些間接單元已經(jīng)被修改的代碼。
15.如權(quán)利要求11所述的系統(tǒng),其特征在于,所述重定向目標(biāo)代碼被一起分組為束 (222)。
全文摘要
描述了循環(huán)控制流轉(zhuǎn)移。循環(huán)控制流轉(zhuǎn)移支持線程同步、無用信息收集以及其他涉及長時(shí)間運(yùn)行循環(huán)的掛起的情形??赊D(zhuǎn)移循環(huán)具有循環(huán)主體、循環(huán)頂部、包括循環(huán)頂部地址的間接單元、以及引用間接單元的循環(huán)跳轉(zhuǎn)指令序列。在普通執(zhí)行中,控制通過間接單元流到循環(huán)頂部。然而,在間接單元被更改后,執(zhí)行流被轉(zhuǎn)移到遠(yuǎn)離循環(huán)頂部的點(diǎn)。諸如無用信息收集等操作被執(zhí)行而循環(huán)(以及由此使用該循環(huán)的(諸)線程)被因此轉(zhuǎn)移。內(nèi)核或另一線程接著將循環(huán)頂部地址還原到間接單元內(nèi),并且執(zhí)行流通過被還原的間接單元再一次繼續(xù)到循環(huán)頂部。
文檔編號(hào)G06F9/32GK102193777SQ20111006587
公開日2011年9月21日 申請(qǐng)日期2011年3月9日 優(yōu)先權(quán)日2010年3月10日
發(fā)明者S·莫熱, M·M·馬格魯?shù)? F·V·佩斯徹-蓋里 申請(qǐng)人:微軟公司