804嘗試訪問請求的結(jié)果,工作者控制器可以定位出806與請求實(shí)例相關(guān)聯(lián)的對 應(yīng)工作令牌(例如,從存儲(chǔ)器訪問,或許是從存儲(chǔ)的多個(gè)工作令牌中選擇)。工作者控制器隨 后可使用定位出的工作令牌在前端監(jiān)聽器存儲(chǔ)的請求與工作令牌之間建立808連接。例如, 可至少部分通過將工作令牌與請求之間的關(guān)聯(lián)存儲(chǔ)在存儲(chǔ)器中來建立連接。
[0072] 一旦已經(jīng)建立808連接,過程800可包括使用810令牌來定位出請求,并且將數(shù)據(jù)提 供812到請求實(shí)例。例如,前端監(jiān)聽器可以監(jiān)聽(即,監(jiān)控)來自工作者控制器的工作連接請 求,并且當(dāng)接收到此類工作連接請求時(shí),可以基于從工作者控制器提供的令牌和/或從中得 到的信息來定位出接收的請求。前端監(jiān)聽器可以復(fù)制用來接收所述接收的請求的套接字句 柄,并且將復(fù)制的套接字句柄給到監(jiān)聽工作連接請求的監(jiān)聽器。監(jiān)聽工作連接請求的監(jiān)聽 器可以根據(jù)請求實(shí)例使用復(fù)制的套接字來讀取和寫入數(shù)據(jù)。一旦數(shù)據(jù)已經(jīng)被提供812到請 求實(shí)例,可從請求實(shí)例接收814響應(yīng),如下文更詳細(xì)地描述。響應(yīng)隨后可被提供816到請求器 (即,其請求觸發(fā)了過程800的執(zhí)行的計(jì)算機(jī)系統(tǒng))。
[0073] 如本文中其他地方所述,本文中明確描述的實(shí)施方案的多種變形被視作屬于本公 開的范圍。例如,上文說明了實(shí)施方案,其中工作者控制器確定并獲取適合實(shí)例化虛擬計(jì)算 機(jī)系統(tǒng)以用于處理請求的應(yīng)用圖像。各種計(jì)算環(huán)境中的其他實(shí)體可執(zhí)行此類功能。例如,前 端監(jiān)聽器或另一系統(tǒng)可確定哪個(gè)應(yīng)用圖像訪問和提供識別圖像或可找到圖像(例如,通過 URI)的位置的信息。類似地,前端控制器本身可獲取應(yīng)用圖像并且將應(yīng)用圖像傳輸?shù)焦ぷ?者控制器。此外,上述實(shí)施方案包括令牌被排隊(duì)到由工作者控制器處理的請求隊(duì)列中的那 些。一般來說,前端監(jiān)聽器可采用多種方式通知工作者控制器,例如,通過將通知推送給工 作者控制器,所述通知指示工作者控制器處理使得請求實(shí)例能夠獲取請求的邏輯。其他變 化也被視作屬于本公開的范圍。
[0074] 如上文論述,生成應(yīng)用圖像,以便能夠?qū)嵗摂M計(jì)算機(jī)系統(tǒng)(請求實(shí)例),為的是 服務(wù)接收的請求。本公開的各種技術(shù)涉及生成此類應(yīng)用圖像,以便能夠有效實(shí)例化,從而提 供對應(yīng)于請求的更少時(shí)延,同時(shí)利用更少量的計(jì)算資源。因此,圖9示出可以實(shí)踐本公開的 各實(shí)施方案的環(huán)境900的說明性示例。在圖9的示例性環(huán)境900中,應(yīng)用源902、構(gòu)建系統(tǒng)904、 構(gòu)建管理程序906以及工作者管理程序908。應(yīng)用源可由提供應(yīng)用代碼的任何系統(tǒng)或其部件 提供,所述應(yīng)用代碼將用于構(gòu)建應(yīng)用圖像。應(yīng)用代碼可能已經(jīng)被開發(fā)人員接收,例如,計(jì)算 資源服務(wù)提供商的客戶的開發(fā)人員,或者一般來說,能夠貢獻(xiàn)應(yīng)用代碼以用于構(gòu)建應(yīng)用實(shí) 例的任何開發(fā)人員。應(yīng)用源可以由開發(fā)人員通過(例如)網(wǎng)絡(luò)服務(wù)應(yīng)用編程界面(API)或版 本控制系統(tǒng)提交。應(yīng)用源可以包括源文件、配置文件、資源文件(例如,網(wǎng)頁、圖像或其他媒 體文件)、二進(jìn)制文件和/或諸如此類。
[0075] 構(gòu)建系統(tǒng)904可以是系統(tǒng)或其部件,如下文更詳細(xì)地描述,所述系統(tǒng)被配置來在應(yīng) 用代碼被處理成應(yīng)用圖像并且放入到應(yīng)用圖像存儲(chǔ)庫910中之前,作為應(yīng)用代碼的預(yù)處理 器操作。工作者管理程序可以是如上文描述的工作者管理程序,例如,配置有一個(gè)或多個(gè)進(jìn) 程,所述進(jìn)程訪問應(yīng)用圖像存儲(chǔ)庫910中的應(yīng)用圖像,并且使用訪問的應(yīng)用圖像來實(shí)例化請 求實(shí)例912,以用于處理請求的目的。圖9的各個(gè)部件可以在單獨(dú)的物理計(jì)算機(jī)系統(tǒng)上實(shí)施, 但本公開的各實(shí)施方案包括同一物理計(jì)算機(jī)系統(tǒng)實(shí)施構(gòu)建管理程序906和工作者管理程序 908,正如額外的虛擬層一樣的實(shí)施方案。
[0076] 在一個(gè)實(shí)施方案中,構(gòu)建系統(tǒng)904被配置來使用能察覺到變化的解析器 (variation aware parser)914來處理應(yīng)用源,以產(chǎn)生有注釋的源。能察覺到變化的解析器 可以是被配置來檢查應(yīng)用源(例如,源代碼和/或編譯源代碼)的可執(zhí)行部分的系統(tǒng)或其部 件(例如,在系統(tǒng)上執(zhí)行的進(jìn)程),以便確定執(zhí)行可能最先開始在程序中變化的一個(gè)或多個(gè) 位置(變化點(diǎn))。變化的示例可包括依賴于以下項(xiàng)的執(zhí)行:接收到網(wǎng)絡(luò)消息、讀取用戶輸入、 讀取系統(tǒng)時(shí)鐘、隨機(jī)數(shù)生成器和/或執(zhí)行可導(dǎo)致訪問無法從源代碼中確定得到的信息的其 他類似動(dòng)作。換言之,變化點(diǎn)可對應(yīng)于一個(gè)或多個(gè)計(jì)算機(jī)可執(zhí)行的指令,所述指令的執(zhí)行結(jié) 果在多次執(zhí)行之中可能會(huì)改變。啟用便可導(dǎo)致應(yīng)用執(zhí)行發(fā)生變化的功能的目錄可被維護(hù), 以使得能察覺到變化的解析器能夠識別到執(zhí)行可能開始改變所處的執(zhí)行中的位置。
[0077] 能察覺到變化的解析器914也可被配置來將注釋放在應(yīng)用源中,或者可將注釋存 儲(chǔ)在與應(yīng)用源相關(guān)聯(lián)的元數(shù)據(jù)中,以便記錄一個(gè)或多個(gè)確定的位置。在一些實(shí)施方案中,能 察覺到變化的解析器被配置來應(yīng)用程序結(jié)構(gòu)的靜態(tài)分析,以便首先識別用于執(zhí)行應(yīng)用源的 一個(gè)或多個(gè)入口點(diǎn)。例如,能察覺到變化的解析器914可以從一個(gè)或多個(gè)入口點(diǎn)開始解析、 解譯或以其他方式分析應(yīng)用源,直到檢測到潛在變化為止。能察覺到變化的解析器914可以 存儲(chǔ)確定的變化位置,例如,通過記錄一列源代碼行或?qū)?yīng)于確定位置的可執(zhí)行機(jī)器指令。 在一些實(shí)施方案中,能察覺到變化的解析器被配置來與應(yīng)用源的開發(fā)人員放置的注釋交 互。例如,能察覺到變化的解析器可以讀取和處理注釋,所述注釋重寫了程序位置應(yīng)該還是 不應(yīng)被視作變化。此類開發(fā)人員注釋可以根據(jù)能察覺到變化的解析器914被配置來處理的 句法。
[0078] 在一些實(shí)施方案中,構(gòu)建系統(tǒng)被配置來將有注釋的應(yīng)用源傳輸?shù)綐?gòu)建管理程序 906實(shí)施的構(gòu)建控制器916,其中構(gòu)建控制器916可以是在構(gòu)建管理程序906上執(zhí)行的進(jìn)程。 在一個(gè)實(shí)施方案中,構(gòu)建系統(tǒng)904從準(zhǔn)備好接收構(gòu)建請求的多個(gè)管理程序中選擇構(gòu)建管理 程序。構(gòu)建系統(tǒng)904可以采用存檔的格式包裝有注釋的源,并且將存檔存儲(chǔ)在構(gòu)建控制器可 用的位置。構(gòu)建系統(tǒng)904可與構(gòu)建控制器916通信,以啟動(dòng)應(yīng)用構(gòu)建,例如,通過向構(gòu)建控制 器發(fā)出網(wǎng)絡(luò)服務(wù)請求(包括存檔位置),以啟動(dòng)構(gòu)建請求。
[0079] 在一個(gè)實(shí)施方案中,構(gòu)建控制器916被配置來訪問構(gòu)建引導(dǎo)程序。構(gòu)件引導(dǎo)程序可 存儲(chǔ)在引導(dǎo)程序的存儲(chǔ)庫920中,所述存儲(chǔ)庫可以位于與構(gòu)建管理程序906相同的物理計(jì)算 機(jī)系統(tǒng)上,或者可以在分布式系統(tǒng)中的另一位置,因此,可通過網(wǎng)絡(luò)訪問。構(gòu)建控制器可以 分析有注釋的源,以便為應(yīng)用確定適當(dāng)?shù)囊龑?dǎo)程序。例如,構(gòu)建控制器可以針對平臺需求或 可影響引導(dǎo)程序的選擇的其他因素來分析有注釋的源。不同的應(yīng)用類型可能有不同的引導(dǎo) 程序。用于JavaScript應(yīng)用可能有一個(gè)引導(dǎo)程序,用于Ruby應(yīng)用可能有另一個(gè)引導(dǎo)程序等 等。此外,每個(gè)應(yīng)用(JavaScript、Ruby等)可具有供選擇的多個(gè)引導(dǎo)程序,每個(gè)都可適合于 一個(gè)或多個(gè)特定的子類型應(yīng)用。在一些實(shí)施方案中,引導(dǎo)程序可各自被配置來針對有注釋 的源來引導(dǎo)內(nèi)核。當(dāng)被執(zhí)行時(shí),引導(dǎo)程序可以根據(jù)將內(nèi)核和有注釋的源讀到存儲(chǔ)器中的例 程進(jìn)行操作。引導(dǎo)程序也可以包括用于在有注釋的源中的確定變化位置處設(shè)置斷點(diǎn)的例 程。引導(dǎo)程序可還包括從內(nèi)核入口點(diǎn)開始執(zhí)行內(nèi)核的例程。
[0080] 在一個(gè)實(shí)施方案中,基于有注釋的源和構(gòu)建引導(dǎo)程序,構(gòu)建控制器916創(chuàng)建構(gòu)建實(shí) 例918。例如,構(gòu)建控制器可以將從中可以訪問有注釋的源和引導(dǎo)程序的虛擬機(jī)實(shí)例化。構(gòu) 建控制器可將構(gòu)建實(shí)例附加到變化監(jiān)控器922,所述變化監(jiān)控器可操作以檢測和響應(yīng)虛擬 機(jī)的變化事件。變化監(jiān)控器922可以是在管理程序906上執(zhí)行的進(jìn)程,所述管理程序被配置 來分析應(yīng)用的執(zhí)行并且檢測變化事件。構(gòu)建控制器也可被配置來指示實(shí)例化的虛擬機(jī)來執(zhí) 行引導(dǎo)程序。在引導(dǎo)程序執(zhí)行之后,變化監(jiān)控器922可被配置來響應(yīng)于構(gòu)建實(shí)例到達(dá)應(yīng)用中 的變化點(diǎn)而停止構(gòu)建實(shí)例。例如,變化監(jiān)控器922可以使用虛擬機(jī)斷點(diǎn)來實(shí)施。為此,變化監(jiān) 控器922可被配置來接收到達(dá)斷點(diǎn)的通知,并且響應(yīng)于接收到通知而停止虛擬機(jī)。當(dāng)CPU在 執(zhí)行特定代碼時(shí)或者當(dāng)檢測到表明到達(dá)變化點(diǎn)的另一事件時(shí),變化監(jiān)控器922可利用管理 程序功能來指示管理程序暫停程序。作為一個(gè)示例,變化監(jiān)控器可讀取放在應(yīng)用源或含有 應(yīng)用源的存儲(chǔ)頁面中的指令,以確定變化點(diǎn)的位置。當(dāng)遇到變化導(dǎo)致的指令時(shí),變化監(jiān)控器 922可發(fā)出中斷,中斷值對應(yīng)于將執(zhí)行應(yīng)用代碼的虛擬機(jī)停止。管理程序可俘獲中斷,并且 構(gòu)建實(shí)例的CHJ的中斷處理程序可導(dǎo)致應(yīng)用的執(zhí)行停止。
[0081] 第二種方法是使用斷點(diǎn)指令,所述斷點(diǎn)指令是使用英特爾架構(gòu)(Intel Architecture)的系統(tǒng)所用的中斷指令。作為引導(dǎo)程序的一部分,中斷處理程序的一部分可 被安裝,以檢測中斷(例如,值為3的中斷,或一般來說,對應(yīng)于需要停止執(zhí)行的中斷數(shù)值)。 在檢測到中斷之后,響應(yīng)于虛擬機(jī)內(nèi)提出中斷,可以執(zhí)行中斷處理程序代碼。作為中斷處理 程序的一部分,可將指明俘獲指令的通信提供到變化控制器,從而表明需要停止虛擬機(jī)的 執(zhí)行。換言之,通過這種方法,控制首先傳輸?shù)皆跇?gòu)建實(shí)例內(nèi)運(yùn)行的另一段代碼,但隨后在 與變化監(jiān)控器通信之后,機(jī)器停止運(yùn)轉(zhuǎn),從而可得到快照。
[0082]作為構(gòu)建進(jìn)程的一部分,構(gòu)建控制器可被配置來得到已經(jīng)停止的構(gòu)建實(shí)例的快照 圖像。例如,構(gòu)建控制器可以復(fù)制虛擬機(jī)的存儲(chǔ)空間,包括處理器寄存器、標(biāo)記、程序計(jì)數(shù)器 的狀態(tài),以及虛擬環(huán)境的其他方面??煺請D像可包括能夠繼續(xù)執(zhí)行快照圖像的入口點(diǎn)地址。 在一些實(shí)施方案中,構(gòu)建控制器可被配置來將構(gòu)建實(shí)例的執(zhí)行移動(dòng)到附近的執(zhí)行安全點(diǎn)。 例如,構(gòu)建控制器可以將機(jī)器指令指標(biāo)前進(jìn)或退回,以避免在執(zhí)行某些內(nèi)核例程、關(guān)鍵區(qū)域 或者其他不安全執(zhí)行部分時(shí)給圖像拍快照。構(gòu)建控制器可以將構(gòu)建實(shí)例移動(dòng)到附近的狀 態(tài),在所述狀態(tài)下,處理器寄存器中的一些或全部無需恢復(fù)便可繼續(xù)執(zhí)行。一旦構(gòu)建實(shí)例被 移動(dòng)到執(zhí)行安全點(diǎn),快照便可由構(gòu)建控制器916得到。
[0083] 如上所述,通過這種方式構(gòu)建的應(yīng)用圖像可以用來實(shí)例化請求實(shí)例(或者一般來 說,至少部分基于應(yīng)用圖像的任何實(shí)例)。在一些實(shí)施方案中,構(gòu)建控制器916被配置來將快 照圖像放置在一個(gè)或多個(gè)管理程序可訪問的應(yīng)用圖像存儲(chǔ)庫中。工作者管理程序可以基于 快照圖像通過從應(yīng)用圖像庫中檢索應(yīng)用圖像來構(gòu)件請求實(shí)例,并且在入口點(diǎn)地址處繼續(xù)應(yīng) 用的執(zhí)行。
[0084] 圖10示出用于構(gòu)建應(yīng)用圖像的過程1000的說明性示例,所述應(yīng)用圖像可用于各種 目的,例如,實(shí)例化請求實(shí)例或其他實(shí)例。過程1〇〇〇可以由任何合適的系統(tǒng)執(zhí)行,例如,由構(gòu) 建系統(tǒng)和/或構(gòu)建管理程序執(zhí)行,如上文結(jié)合圖9所述并且下文更詳細(xì)地描述。在一個(gè)實(shí)施 方案中,過程1000包括接收1002應(yīng)用源代碼,如上文所述。例如,應(yīng)用源代碼可以從開發(fā)源 代碼的開發(fā)人員接收到。能察覺到變化的解析器可用來處理1004接收的應(yīng)用源代碼,并且 可以確定和記錄1006程序執(zhí)行中的潛在變化。例如,如上所述,構(gòu)建系統(tǒng)可促使能察覺到變 化的解析器檢查應(yīng)用源的可執(zhí)行部分以確定執(zhí)行可能最先開始在程序中變化的一個(gè)或多 個(gè)位置,并且將注釋放在應(yīng)用源中?;蛘呋虼送?,注釋可存儲(chǔ)在與應(yīng)用源相關(guān)聯(lián)的元數(shù)據(jù) 中,以記錄一個(gè)或多個(gè)確定的位置。確定潛在變化可包括識別用于執(zhí)行應(yīng)用源的一個(gè)或多 個(gè)入口點(diǎn),以及從所述一個(gè)或多個(gè)入口點(diǎn)開始解析、解譯或以其他方式分析應(yīng)用源,直到檢 測到潛在變化為止。此外,如上所述,能察覺到變化的解析器可與開發(fā)人員放在應(yīng)用源中的 注釋交互,例如,以便確定是否有任何注釋重寫了程序位置應(yīng)該還是不該被視作變化。確定 的潛在變化位置可采用任何合適的方式存儲(chǔ),例如,通過記錄一列源代碼行或?qū)?yīng)于確定 位置的可執(zhí)行機(jī)器指令。
[0085] 如圖10所示,過程1000可包括選擇1008構(gòu)建管理程序。例如,構(gòu)建管理程序可至少 部分基于用于生成應(yīng)用引導(dǎo)圖像的可用性進(jìn)行選擇。構(gòu)建管理程序也可至少部分基于一個(gè) 或多個(gè)其他因素進(jìn)行選擇,例如,具有適于構(gòu)建特定類型(例如,JavaScript或Ruby)的應(yīng)用 的配置。一旦被選擇,有注釋的應(yīng)用源便可傳輸1010到選擇的構(gòu)建管理程序,以用于處理。 例如,如果應(yīng)用源在與操作構(gòu)建管理程序的系統(tǒng)不同的系統(tǒng)上加注釋,那么有注釋的應(yīng)用 源可通過網(wǎng)絡(luò)傳輸?shù)綐?gòu)建管理程序。也可選擇1012引導(dǎo)程序。如上文論述,不同類型的應(yīng)用 可對應(yīng)于不同的引導(dǎo)程序。例如,特定的引導(dǎo)程序可被配置來用于特定的應(yīng)用類型。然而在 替代實(shí)施方案中,引導(dǎo)程序可被配置來更復(fù)雜,例如,通過具有用于多個(gè)應(yīng)用類型的能力。 在各實(shí)施方案中,引導(dǎo)程序被配置來針對有注釋的源來引導(dǎo)內(nèi)核。例如,引導(dǎo)程序可以包括 將內(nèi)核和有注釋的源讀到存儲(chǔ)器中的例程。引導(dǎo)程序可以包括在有注釋的源中的確定變化 位置處設(shè)置斷點(diǎn)的例程。引導(dǎo)程序還可以包括從內(nèi)核入口點(diǎn)開始執(zhí)行內(nèi)核的例程。
[0086] 在一個(gè)實(shí)施方案中,過程1000包括將能夠訪問引導(dǎo)程序和有注釋的源代碼的虛擬 機(jī)實(shí)例化1014。例如,虛擬機(jī)可以在上述構(gòu)建控制器的指導(dǎo)下進(jìn)行實(shí)例化。構(gòu)建控制器可將 變化監(jiān)控器附加到實(shí)例化的虛擬機(jī),所述變化監(jiān)控器可操作以檢測和響應(yīng)虛擬機(jī)的變化事 件。構(gòu)建控制器可指示實(shí)例化的虛擬機(jī)來執(zhí)行引導(dǎo)程序。應(yīng)用隨后可由變化監(jiān)控器執(zhí)行和 監(jiān)控1016,所述變化監(jiān)控器可響應(yīng)于構(gòu)建實(shí)例到達(dá)應(yīng)用中的變化點(diǎn)而停止1018構(gòu)建實(shí)例。 例如,變化監(jiān)控器可以使用虛擬機(jī)斷點(diǎn)來實(shí)施。變化監(jiān)控器可被配置來接收到達(dá)斷點(diǎn)的通 知,并且響應(yīng)于接收到通知而停止虛擬機(jī)。可以得到1020構(gòu)建實(shí)例的快照。在一個(gè)實(shí)施方案 中,得到快照1020包括構(gòu)建控制器復(fù)制虛擬機(jī)的存儲(chǔ)空間,包括處理器寄存器、標(biāo)記、程序 計(jì)數(shù)器的狀態(tài),以及虛擬環(huán)境的其他方面??煺請D像可包括應(yīng)繼續(xù)執(zhí)行快照圖像的入口點(diǎn) 地址。如下文論述,得到快照也可包括將構(gòu)建實(shí)例移動(dòng)到附近的執(zhí)行安全點(diǎn)。例如,構(gòu)建控 制器可以將機(jī)器指令指標(biāo)前進(jìn)或退回,以避免在執(zhí)行某些內(nèi)核例程、關(guān)鍵區(qū)域或者其他不 安全執(zhí)行部分時(shí)給圖像拍快照。構(gòu)建控制器也可以將構(gòu)建實(shí)例移動(dòng)到附近的狀態(tài),在所述 狀態(tài)下,處理器寄存器中的一些或全部無需恢復(fù)便可繼續(xù)執(zhí)行。
[0087] 在一個(gè)實(shí)施方案中,過程1000包括將快照存儲(chǔ)在一個(gè)位置,其中所述快照可在之 后的時(shí)間用于實(shí)例化請求實(shí)例或另一實(shí)例。因此,如圖10所示,過程1000包括將快照放置 1022在應(yīng)用圖像存儲(chǔ)庫中,從而快照可在之后的時(shí)間使用,例如,以便實(shí)例化請求實(shí)例,如 下文描述。
[0088] 正如本文中明確揭示的所有技術(shù)一樣,變形被視作屬于本公開的范圍。例如,確定 何時(shí)給構(gòu)建實(shí)例拍快照和/或使用哪個(gè)快照的變形可被使用,從而用于實(shí)例化實(shí)例的快照 在沒有進(jìn)行處理的情況下比較可靠并且可實(shí)例化,所述處理對于適當(dāng)設(shè)置而言可能是不必 要的。
[0089] 在一些實(shí)施方案中,應(yīng)用執(zhí)行中的安全點(diǎn)由能察覺到變化的解析器識別,如上文 所述。因此,圖11示出可用來確定得到快照的安全點(diǎn)的過程1100的說明性示例。過程1100可 由任何合適的系統(tǒng)執(zhí)行,例如,能察覺到變化的解析器或具有此功能的另一系統(tǒng)。在一個(gè)實(shí) 施方案中,過程1100包括訪問1102第一指令,以及確定1104指令是否對應(yīng)于變化點(diǎn)。例如, 可以執(zhí)行確定1104指令是否對應(yīng)于變化點(diǎn),如上文所述。如果確定1104當(dāng)前指令并不對應(yīng) 于變化點(diǎn),那么過程1100可重復(fù)以下操作:訪問1104下一指令以及確定訪問的指令是否對 應(yīng)于變化點(diǎn)。這個(gè)過程可以重復(fù),直到確定1104當(dāng)前訪問的指令對應(yīng)于變化點(diǎn)。
[0090] 當(dāng)確定1104當(dāng)前訪問的指令對應(yīng)于變化點(diǎn)時(shí),過程1100可包括確定1106當(dāng)前訪問 的指令是否對應(yīng)于安全點(diǎn)。確定1106當(dāng)前訪問的指令是否對應(yīng)于安全點(diǎn)可采用任何合適的 方式執(zhí)行。例如,在一些實(shí)施方案中,分析當(dāng)前訪問的指令以確定與指令相關(guān)的任何功能, 以及檢查任何確定的功能是否出現(xiàn)在被識別為不安全的功能目錄中(例如,因?yàn)榇祟惞δ?的啟用可導(dǎo)致機(jī)器中斷被設(shè)置在特定狀態(tài),或者因?yàn)楣δ艿膯⒂脤?yīng)于無法在暫停和恢復(fù) 過程中重建的活動(dòng))。
[0091] 如果確定1106當(dāng)前訪問的指令并不對應(yīng)于安全點(diǎn),那么過程1100可包括訪問1108 先前的指令(例如,就在指令序列中的前一指令)??稍俅未_定1106當(dāng)前訪問的指令是否對 應(yīng)于安全點(diǎn)。通過接連訪問先前的指令以及確定它們是否對應(yīng)于安全點(diǎn),直到確定1106當(dāng) 前訪問的指令對應(yīng)于安全點(diǎn)為止,這一過程可重復(fù)。當(dāng)確定1106當(dāng)前訪問的指令對應(yīng)于安 全點(diǎn)時(shí),過程1100可包括將當(dāng)前指令識別1110為變化點(diǎn)和安全點(diǎn),從而當(dāng)被變化監(jiān)控器(或 其他合適的系統(tǒng))處理時(shí),應(yīng)用的執(zhí)行在識別點(diǎn)處停止。通過這種方式,安全點(diǎn)被識別為用 于之后處理的變化點(diǎn)而不是實(shí)際變化點(diǎn),所述實(shí)際變化點(diǎn)可能不是安全點(diǎn)。
[0092]圖12示出確定可用于構(gòu)建應(yīng)用圖像的安全點(diǎn)的替代過程。過程1200可被執(zhí)行,以 動(dòng)態(tài)計(jì)算安全點(diǎn),作為構(gòu)建實(shí)例的一部分。過程1200可由任何合適的系統(tǒng)執(zhí)行,例如,如上 文所述的變化監(jiān)控器或者其他此類系統(tǒng)。在過程1200中,拍快照可被啟動(dòng)1202,從而通過構(gòu) 建實(shí)例在應(yīng)用的執(zhí)行過程中多次得到快照。例如,可執(zhí)行拍快照,從而定期得到快照,例如, 每毫秒(或其他時(shí)間量)和/或在執(zhí)行每個(gè)指令時(shí)。
[0093] 在一個(gè)實(shí)施方案中,過程1200包括處理1204第一/下一指令,其中處理可包括執(zhí)行 指令和/或在指令被處理時(shí)分析指令??纱_定1206指令是否對應(yīng)于變化點(diǎn),如上文所述。如 果確定1206指令并不對應(yīng)于變化點(diǎn),那么通過處理下一指令直到確定1206當(dāng)前處理的指令 對應(yīng)于變化點(diǎn)為止,過程1200可以重復(fù)。當(dāng)確定1206當(dāng)前指令對應(yīng)于變化點(diǎn)時(shí),過程1200可 包括訪問1208時(shí)間上繼續(xù)向后的快照序列中的第一快照。例如,第一快照可以是在遇到對 應(yīng)于變化點(diǎn)的指令之前得到的最近快照。
[0094] 可確定1210快照是否對應(yīng)于安全點(diǎn)??芍辽俨糠只诳煺盏姆治鰜磉M(jìn)行確定 1210??蓹z查一組安全點(diǎn)標(biāo)準(zhǔn),并且符合標(biāo)準(zhǔn)可表明快照對應(yīng)于安全點(diǎn)。標(biāo)準(zhǔn)可至少部分基 于CPU的狀態(tài)。例如,至少部分基于CPU寄存器狀態(tài)的標(biāo)準(zhǔn)可包括中斷標(biāo)志是清除還是設(shè)置、 CPU是否處理異常、CPU是否在頁面出錯(cuò)的中間,以及一般來說,CPU寄存器是否可再現(xiàn)。標(biāo)準(zhǔn) 也可至少部分基于以下項(xiàng):CPU是否處于應(yīng)用代碼造成的不安全點(diǎn)(例如,這是因?yàn)閼?yīng)用代 碼已經(jīng)獲得關(guān)鍵區(qū)域鎖);如CPU指令指標(biāo)表明,CPU是否在處理標(biāo)記為不安全的指令。如果 確定1210快照并不對應(yīng)于安全點(diǎn),那么過程1200可包括重復(fù)訪問1208下一(時(shí)間上向后移) 快照以及確定1210訪問的快照是否對應(yīng)于安全點(diǎn),直到確定1210當(dāng)前訪問的快照對應(yīng)于安 全點(diǎn)為止。在確定它們并不對應(yīng)于安全點(diǎn)之后,在完成過程1200之后或者其他方式,未被識 別為安全的任何快照可被舍棄。當(dāng)確定1210快照對應(yīng)于安全點(diǎn)時(shí),快照可被用于1212應(yīng)用 圖像。
[0095] -般來說,上述技術(shù)提供用于計(jì)算入口點(diǎn)的技術(shù),其至少部分基于CPU的指令指標(biāo) 在得到快照時(shí)的位置。由于可用精確的狀態(tài),因此,作為引導(dǎo)應(yīng)用圖像的一部分,這為恢復(fù) 提供了位置。此外,可能有額外的引導(dǎo)程序代碼,所述代碼在跳到快照點(diǎn)之前運(yùn)行并且可用 于進(jìn)行一些事情,例如,恢復(fù)CPU寄存器的值或者用于機(jī)器的其他配置信息。例如,當(dāng)機(jī)器啟 動(dòng)時(shí),引導(dǎo)程序可重建對應(yīng)于快照圖像的精確狀態(tài)。由于管理程序中的設(shè)備可能沒有進(jìn)行 完美的復(fù)制,而是可具有關(guān)于存儲(chǔ)器中的狀態(tài)的信息,因此如果引導(dǎo)程序具有額外的狀態(tài) 信息,則引導(dǎo)程序可修復(fù)任何不當(dāng)狀態(tài)。額外的狀態(tài)信息可由引導(dǎo)程序訪問,作為元數(shù)據(jù)或 補(bǔ)充的應(yīng)用圖像。在跳到應(yīng)用的入口點(diǎn)之前,引導(dǎo)程序可使用額外的狀態(tài)