用于獲取操作系統(tǒng)的崩潰信息的方法和裝置制造方法
【專利摘要】本發(fā)明公開了支持遠(yuǎn)程轉(zhuǎn)儲(chǔ)方式的一種用于獲取操作系統(tǒng)的崩潰信息的方法和裝置?;诒景l(fā)明,崩潰回調(diào)函數(shù)能夠以設(shè)定的遠(yuǎn)程轉(zhuǎn)儲(chǔ)地址為目的而發(fā)起對(duì)崩潰信息的遠(yuǎn)程轉(zhuǎn)儲(chǔ);并且,在操作系統(tǒng)發(fā)生崩潰后,由于操作系統(tǒng)崩潰而被凍結(jié)的處理器核心能夠被解凍,從而使得處理器能夠恢復(fù)至操作系統(tǒng)發(fā)生崩潰之前的狀態(tài),以可靠地執(zhí)行遠(yuǎn)程轉(zhuǎn)儲(chǔ)所需的網(wǎng)絡(luò)傳輸操作。
【專利說明】用于獲取操作系統(tǒng)的崩潰信息的方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及故障診斷技術(shù),特別涉及支持遠(yuǎn)程轉(zhuǎn)儲(chǔ)方式的一種用于獲取操作系統(tǒng)的崩潰信息的方法和裝置。
【背景技術(shù)】
[0002]對(duì)于操作系統(tǒng),往往會(huì)由于中央處理器所執(zhí)行的指令發(fā)生異常而導(dǎo)致系統(tǒng)崩潰,而特別對(duì)于Windows NT系列操作系統(tǒng)來說,系統(tǒng)崩潰就是俗稱的“藍(lán)屏”。為了能夠在事后準(zhǔn)確分析出導(dǎo)致操作系統(tǒng)發(fā)生崩潰的具體原因,可以設(shè)置開啟操作系統(tǒng)的崩潰轉(zhuǎn)儲(chǔ)組件將操作系統(tǒng)崩潰時(shí)的內(nèi)存信息(例如運(yùn)行狀態(tài)和數(shù)據(jù)信息等)轉(zhuǎn)儲(chǔ)至本地硬盤,以便于在操作系統(tǒng)重新啟動(dòng)后被讀取。其中,本文所述的崩潰信息即是指這些被轉(zhuǎn)儲(chǔ)的內(nèi)存信息。
[0003]然而,操作系統(tǒng)的崩潰轉(zhuǎn)儲(chǔ)組件往往只能將崩潰信息轉(zhuǎn)儲(chǔ)到正常安裝于本地的硬盤,而對(duì)于未配置本地硬盤的無盤工作站或者本地硬盤啟用了硬盤還原保護(hù)的情況,崩潰信息往往無法轉(zhuǎn)儲(chǔ),或者轉(zhuǎn)儲(chǔ)后無法被正確尋回。
【發(fā)明內(nèi)容】
[0004]有鑒于此,本發(fā)明提供了支持遠(yuǎn)程轉(zhuǎn)儲(chǔ)方式的一種用于獲取操作系統(tǒng)的崩潰信息的方法和裝置。
[0005]本發(fā)明提供的一種用于獲取操作系統(tǒng)的崩潰信息的方法,該方法包括在操作系統(tǒng)發(fā)生崩潰之前執(zhí)行的如下步驟:
[0006]步驟al、向操作系統(tǒng)注冊(cè)崩潰回調(diào)函數(shù);
[0007]步驟a2、為已注冊(cè)的崩潰回調(diào)函數(shù)設(shè)定遠(yuǎn)程轉(zhuǎn)儲(chǔ)地址;
[0008]步驟a3、獲取所有處理器核心對(duì)應(yīng)的內(nèi)核處理器控制塊信息;
[0009]以及,該方法還包括在操作系統(tǒng)發(fā)生崩潰后通過觸發(fā)已注冊(cè)的回調(diào)函數(shù)執(zhí)行的如下步驟:
[0010]步驟bl、收集操作系統(tǒng)的崩潰信息;
[0011]步驟b2、利用已獲取的內(nèi)核處理器控制塊信息解凍所有被凍結(jié)的處理器核心;
[0012]步驟b3、將崩潰信息通過網(wǎng)絡(luò)向設(shè)定的遠(yuǎn)程轉(zhuǎn)儲(chǔ)地址傳輸。
[0013]優(yōu)選地,步驟a3包括:
[0014]步驟a31、列舉所有處理器核心;
[0015]步驟a32、循環(huán)切換至列舉的每個(gè)處理器核心查詢其對(duì)應(yīng)的內(nèi)核處理器控制塊信息;
[0016]步驟a33、保存查詢到的每個(gè)處理器核心對(duì)應(yīng)的內(nèi)核處理器控制塊信息。
[0017]優(yōu)選地,內(nèi)核處理器控制塊信息中至少包含對(duì)應(yīng)的處理器核心的凍結(jié)控制標(biāo)識(shí);并且,步驟b2通過循環(huán)設(shè)置所有被凍結(jié)的處理器核心對(duì)應(yīng)的內(nèi)核處理器控制塊信息中的凍結(jié)控制標(biāo)識(shí)為解凍狀態(tài),實(shí)現(xiàn)對(duì)所有被凍結(jié)的處理器核心的解凍。
[0018]優(yōu)選地,步驟al進(jìn)一步為注冊(cè)的崩潰回調(diào)函數(shù)在本地內(nèi)存中預(yù)留出用于遠(yuǎn)程轉(zhuǎn)儲(chǔ)的緩存空間;步驟bl以分段收集的方式收集完整的崩潰信息、并進(jìn)一步寫入至預(yù)留的緩存空間;以及,步驟b3進(jìn)一步從緩存空間中讀取所要傳輸?shù)谋罎⑿畔ⅰ?br>
[0019]優(yōu)選地,步驟a2設(shè)定的遠(yuǎn)程轉(zhuǎn)儲(chǔ)地址至少包含遠(yuǎn)程網(wǎng)絡(luò)的IP地址和端口號(hào)。
[0020]本發(fā)明提供的一種用于獲取操作系統(tǒng)的崩潰信息的裝置,該裝置包括在操作系統(tǒng)發(fā)生崩潰之前運(yùn)行的如下模塊:
[0021]回調(diào)函數(shù)注冊(cè)模塊,向操作系統(tǒng)注冊(cè)崩潰回調(diào)函數(shù);
[0022]遠(yuǎn)程地址設(shè)定模塊,為已注冊(cè)的崩潰回調(diào)函數(shù)設(shè)定遠(yuǎn)程轉(zhuǎn)儲(chǔ)地址;
[0023]控制塊信息獲取模塊,獲取所有處理器核心對(duì)應(yīng)的內(nèi)核處理器控制塊信息;
[0024]以及,該裝置還包括在操作系統(tǒng)發(fā)生崩潰后通過觸發(fā)已注冊(cè)的回調(diào)函數(shù)運(yùn)行的如下模塊:
[0025]崩潰信息收集模塊,收集操作系統(tǒng)的崩潰信息;
[0026]處理器核心解凍模塊,利用已獲取的內(nèi)核處理器控制塊信息解凍所有被凍結(jié)的處理器核心;
[0027]崩潰信息傳輸模塊,將崩潰信息通過網(wǎng)絡(luò)向設(shè)定的遠(yuǎn)程轉(zhuǎn)儲(chǔ)地址傳輸。
[0028]優(yōu)選地,控制塊信息獲取模塊包括:
[0029]列舉子模塊,列舉所有處理器核心;
[0030]查詢子模塊,循環(huán)切換至列舉的每個(gè)處理器核心查詢其對(duì)應(yīng)的內(nèi)核處理器控制塊信息;
[0031]存儲(chǔ)子模塊,保存查詢到的每個(gè)處理器核心對(duì)應(yīng)的內(nèi)核處理器控制塊信息。
[0032]優(yōu)選地,內(nèi)核處理器控制塊信息中至少包含對(duì)應(yīng)的處理器核心的凍結(jié)控制標(biāo)識(shí);處理器核心解凍模塊通過循環(huán)設(shè)置所有被凍結(jié)的處理器核心對(duì)應(yīng)的內(nèi)核處理器控制塊信息中的凍結(jié)控制標(biāo)識(shí)為解凍狀態(tài),實(shí)現(xiàn)對(duì)所有被凍結(jié)的處理器核心的解凍。
[0033]優(yōu)選地,回調(diào)函數(shù)注冊(cè)模塊進(jìn)一步為所述崩潰回調(diào)函數(shù)在本地內(nèi)存中預(yù)留出用于遠(yuǎn)程轉(zhuǎn)儲(chǔ)的緩存空間;崩潰信息收集模塊以分段收集的方式收集完整的崩潰信息、并進(jìn)一步寫入至預(yù)留的緩存空間;以及,崩潰信息傳輸模塊進(jìn)一步從緩存空間中讀取所要傳輸?shù)谋罎⑾ⅰ?br>
[0034]優(yōu)選地,遠(yuǎn)程地址設(shè)定模塊設(shè)定的遠(yuǎn)程轉(zhuǎn)儲(chǔ)地址至少包含遠(yuǎn)程網(wǎng)絡(luò)的IP地址和端口號(hào)。
[0035]如上可見,基于本發(fā)明,崩潰回調(diào)函數(shù)能夠以設(shè)定的遠(yuǎn)程轉(zhuǎn)儲(chǔ)地址為目的而發(fā)起對(duì)崩潰信息的遠(yuǎn)程轉(zhuǎn)儲(chǔ);并且,在操作系統(tǒng)發(fā)生崩潰后,由于操作系統(tǒng)崩潰而所有被凍結(jié)的處理器核心能夠被解凍,因而使得處理器能夠恢復(fù)至操作系統(tǒng)發(fā)生崩潰之前的狀態(tài),以可靠地執(zhí)行遠(yuǎn)程轉(zhuǎn)儲(chǔ)所需的網(wǎng)絡(luò)傳輸操作。從而,本發(fā)明能夠?qū)崿F(xiàn)崩潰信息的遠(yuǎn)程轉(zhuǎn)儲(chǔ),因而對(duì)于未配置本地硬盤的無盤工作站或者本地硬盤啟用了硬盤還原保護(hù)的情況,同樣能夠獲取到操作系統(tǒng)的崩潰信息,而不會(huì)由于未配置本地硬盤或者本地硬盤啟用了硬盤還原保護(hù)而導(dǎo)致崩潰信息無法轉(zhuǎn)儲(chǔ)或者轉(zhuǎn)儲(chǔ)后無法被正確尋回。
【專利附圖】
【附圖說明】
[0036]圖1為本發(fā)明實(shí)施例中用于獲取操作系統(tǒng)的崩潰信息的方法的示例性流程示意圖;
[0037]圖2為如圖1所示示例性流程的擴(kuò)展示意圖。
【具體實(shí)施方式】
[0038]為使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下參照附圖并舉實(shí)施例,對(duì)本發(fā)明進(jìn)一步詳細(xì)說明。
[0039]請(qǐng)參見圖1,本實(shí)施例中用于獲取操作系統(tǒng)的崩潰信息的方法包括在操作系統(tǒng)初始化時(shí)執(zhí)行的如下步驟:
[0040]步驟111,向操作系統(tǒng)注冊(cè)崩潰回調(diào)函數(shù)。
[0041]其中,以操作系統(tǒng)選用Windows操作系統(tǒng)為例,本步驟可以通過調(diào)用系統(tǒng)接口函數(shù)KeRegisterBugCheckReasonCallback實(shí)現(xiàn)在操作系統(tǒng)對(duì)崩潰回調(diào)函數(shù)的注冊(cè)。
[0042]步驟112,為已注冊(cè)的崩潰回調(diào)函數(shù)設(shè)定遠(yuǎn)程轉(zhuǎn)儲(chǔ)地址,遠(yuǎn)程轉(zhuǎn)儲(chǔ)地址中優(yōu)選地至少包含遠(yuǎn)程網(wǎng)絡(luò)的IP地址和端口號(hào)。
[0043]其中,本步驟為已注冊(cè)的崩潰回調(diào)函數(shù)設(shè)定遠(yuǎn)程轉(zhuǎn)儲(chǔ)地址,是為了在操作系統(tǒng)發(fā)生崩潰后,能夠通過觸發(fā)已注冊(cè)的回調(diào)函數(shù)以設(shè)定的遠(yuǎn)程轉(zhuǎn)儲(chǔ)地址為目的而發(fā)起連接、以實(shí)現(xiàn)對(duì)收集到的崩潰信息的遠(yuǎn)程網(wǎng)絡(luò)傳輸。相應(yīng)地,遠(yuǎn)程的接收端收到崩潰信息后即可予以保存。
[0044]步驟113,獲取所有處理器核心對(duì)應(yīng)的內(nèi)核處理器控制塊信息。
[0045]其中,本步驟獲取內(nèi)核處理器控制塊信息,是為了在操作系統(tǒng)發(fā)生崩潰后,確保處理器能夠支持網(wǎng)絡(luò)傳輸?shù)膶?shí)現(xiàn),具體原因如下:
[0046]當(dāng)操作系統(tǒng)發(fā)生崩潰后,處理器中除了故障線程所在的一個(gè)處理器核心之外,其余的處理器核心都會(huì)被凍結(jié)(所謂的凍結(jié)并非是指處理器核心靜止、而是指運(yùn)行在此處理器核心的線程處于循環(huán)檢測(cè)狀態(tài)),以防止崩潰現(xiàn)場(chǎng)被破壞;
[0047]然而,操作系統(tǒng)在初始化時(shí)會(huì)識(shí)別處理器核心的總數(shù),并且,操作系統(tǒng)無論在何時(shí)都會(huì)按照其初始化時(shí)識(shí)別的處理器核心總數(shù)來分配相關(guān)任務(wù),即,網(wǎng)絡(luò)傳輸操作和其依賴的其他系統(tǒng)組件勢(shì)必需要由操作系統(tǒng)在初始化時(shí)識(shí)別出的所有處理器核心共同承擔(dān),因此,對(duì)于僅有一個(gè)處理器核心未被凍結(jié)的情況來說,不可能穩(wěn)定地完成操作系統(tǒng)所分配的與網(wǎng)絡(luò)傳輸操作的相關(guān)任務(wù);
[0048]基于此,為了確保系統(tǒng)崩潰后仍然能夠可靠地由其識(shí)別出的所有處理器核心協(xié)同執(zhí)行網(wǎng)絡(luò)傳輸操作,本步驟獲取的內(nèi)核處理器控制塊信息主要用于在操作系統(tǒng)發(fā)生崩潰后對(duì)凍結(jié)的各處理器核心實(shí)施解凍操作。
[0049]以基于多處理器核心運(yùn)行的Windows操作系統(tǒng)為例,內(nèi)核處理器控制塊信息表示為 KPRCB (Kernel Processor Control Block),此時(shí),本步驟可以具體包括:
[0050]a、通過調(diào)用系統(tǒng)接口函數(shù)KeQueryActiveProcessors來列舉所有的處理器核心;
[0051]b、調(diào)用系統(tǒng)接口函數(shù)KeSetSystemAffinityThread,以循環(huán)切換到每個(gè)處理器核心、并查詢其所對(duì)應(yīng)的KPRCB ;
[0052]C、將查詢到的所有處理器核心所對(duì)應(yīng)的KPRCB予以保存。
[0053]請(qǐng)?jiān)賲⒁妶D1,本實(shí)施例中用于獲取操作系統(tǒng)的崩潰信息的方法還包括在操作系統(tǒng)發(fā)生崩潰后通過觸發(fā)已注冊(cè)的回調(diào)函數(shù)執(zhí)行的如下步驟:
[0054]步驟121,收集操作系統(tǒng)的崩潰信息。
[0055]步驟122,利用已獲取的內(nèi)核處理器控制塊信息解凍所有被凍結(jié)的處理器核心。
[0056]其中,如前文所述,處理器核心的凍結(jié)并非是指處理器核心靜止、而是指運(yùn)行在此處理器核心的線程處于循環(huán)檢測(cè)狀態(tài)。并且,由于內(nèi)核處理器控制塊信息中通常會(huì)包含有凍結(jié)控制標(biāo)識(shí)(其在Windows操作系統(tǒng)中被表示為IpiFrozen),因此,運(yùn)行在被凍結(jié)的每個(gè)處理器核心的線程會(huì)循環(huán)檢測(cè)器對(duì)應(yīng)的內(nèi)核處理器控制塊信息中的凍結(jié)控制標(biāo)識(shí)。若對(duì)應(yīng)的內(nèi)核處理器控制塊信息中的凍結(jié)控制標(biāo)識(shí)表示凍結(jié)狀態(tài),則凍結(jié)的處理器核心中運(yùn)行的線程會(huì)繼續(xù)執(zhí)行前述的循環(huán)檢測(cè),即,該處理器核心仍持續(xù)其凍結(jié)的狀態(tài);若對(duì)應(yīng)的內(nèi)核處理器控制塊信息中的凍結(jié)控制標(biāo)識(shí)表示解凍狀態(tài),則凍結(jié)的處理器核心中運(yùn)行的線程會(huì)跳出前述的循環(huán)檢測(cè),即,該處理器核心被解凍。
[0057]由此,本步驟可以通過循環(huán)設(shè)置所有被凍結(jié)的處理器核心對(duì)應(yīng)的內(nèi)核處理器控制塊信息中的凍結(jié)控制標(biāo)識(shí)為解凍狀態(tài),實(shí)現(xiàn)對(duì)所有被凍結(jié)的處理器核心的解凍。
[0058]步驟123,將崩潰信息通過網(wǎng)絡(luò)向設(shè)定的遠(yuǎn)程轉(zhuǎn)儲(chǔ)地址傳輸。
[0059]其中,請(qǐng)參照前文所述,本步驟執(zhí)行的網(wǎng)絡(luò)傳輸由所有處理器核心承擔(dān),由于所有處理器核心此時(shí)都未處于凍結(jié)狀態(tài),因而本步驟執(zhí)行的網(wǎng)絡(luò)傳輸能夠得以可靠實(shí)現(xiàn)。
[0060]至此,上述流程結(jié)束,等待操作系統(tǒng)重啟。
[0061]如上述流程可見,基于本實(shí)施例中用于獲取操作系統(tǒng)的崩潰信息的方法,崩潰回調(diào)函數(shù)能夠以設(shè)定的遠(yuǎn)程轉(zhuǎn)儲(chǔ)地址為目的而發(fā)起對(duì)崩潰信息的遠(yuǎn)程轉(zhuǎn)儲(chǔ);并且,在操作系統(tǒng)發(fā)生崩潰后,由于操作系統(tǒng)崩潰而所有被凍結(jié)的處理器核心能夠被解凍,因而使得處理器能夠恢復(fù)至操作系統(tǒng)發(fā)生崩潰之前的狀態(tài),以可靠地執(zhí)行遠(yuǎn)程轉(zhuǎn)儲(chǔ)所需的網(wǎng)絡(luò)傳輸操作。從而,本實(shí)施例中用于獲取操作系統(tǒng)的崩潰信息的方法能夠?qū)崿F(xiàn)崩潰信息的遠(yuǎn)程轉(zhuǎn)儲(chǔ),因而對(duì)于未配置本地硬盤的無盤工作站或者本地硬盤啟用了硬盤還原保護(hù)的情況,同樣能夠獲取到操作系統(tǒng)的崩潰信息,而不會(huì)由于未配置本地硬盤或者本地硬盤啟用了硬盤還原保護(hù)而導(dǎo)致崩潰信息無法轉(zhuǎn)儲(chǔ)或者轉(zhuǎn)儲(chǔ)后無法被正確尋回。
[0062]需要說明的是,上述流程中的步驟111-113并不是必須在操作系統(tǒng)初始化時(shí)執(zhí)行,而是可以在操作系統(tǒng)發(fā)生崩潰之前的任意時(shí)刻執(zhí)行。
[0063]另外,在實(shí)際應(yīng)用中,上述流程中對(duì)崩潰信息的收集,可選地能夠以分段的方式予以實(shí)現(xiàn)。相應(yīng)地,上述的流程能夠進(jìn)一步得以擴(kuò)展。
[0064]請(qǐng)參見圖2,本實(shí)施例中用于獲取操作系統(tǒng)的崩潰信息的方法包括在初始化時(shí)執(zhí)行的如下步驟:
[0065]步驟211,向操作系統(tǒng)注冊(cè)崩潰回調(diào)函數(shù)、并為注冊(cè)的崩潰回調(diào)函數(shù)在本地內(nèi)存中預(yù)留出用于遠(yuǎn)程轉(zhuǎn)儲(chǔ)的緩存空間。
[0066]其中,本步驟可以理解為在圖1中的步驟111的基礎(chǔ)上進(jìn)一步為注冊(cè)的崩潰回調(diào)函數(shù)在本地內(nèi)存中預(yù)留出用于遠(yuǎn)程轉(zhuǎn)儲(chǔ)的緩存空間,預(yù)留的緩存空間可以是專用于在遠(yuǎn)程轉(zhuǎn)儲(chǔ)時(shí)存放崩潰信息的內(nèi)存空間,并且,對(duì)于預(yù)留的緩存空間的大小,可以依據(jù)操作系統(tǒng)的版本來設(shè)定。
[0067]步驟212,為已注冊(cè)的崩潰回調(diào)函數(shù)設(shè)定遠(yuǎn)程轉(zhuǎn)儲(chǔ)地址。
[0068]步驟213,獲取所有處理器核心對(duì)應(yīng)的內(nèi)核處理器控制塊信息。
[0069]其中,上述步驟212和213可以分別與圖1中的步驟112和113相同。
[0070]請(qǐng)?jiān)賲⒁妶D2,本實(shí)施例中用于獲取操作系統(tǒng)的崩潰信息的方法還包括在操作系統(tǒng)發(fā)生崩潰后通過觸發(fā)崩潰回調(diào)函數(shù)執(zhí)行的如下步驟:
[0071]步驟221,收集操作系統(tǒng)的崩潰信息的分段片段、并寫入預(yù)留的緩存空間。
[0072]步驟222,判斷是否完成對(duì)崩潰信息的所有分段片段的收集,若未完成,則返回步驟221繼續(xù)收集,若完成,則執(zhí)行步驟223。
[0073]例如,對(duì)于Windows操作系統(tǒng)支持分段收集的崩潰轉(zhuǎn)儲(chǔ)機(jī)制來說,當(dāng)收集完成后會(huì)產(chǎn)生一完成標(biāo)志KbDump1Complete,相應(yīng)地,本步驟即可根據(jù)是否有該完成標(biāo)志KbDump1Complete產(chǎn)生來判斷是否完成對(duì)崩潰信息的所有分段片段的收集。
[0074]其中,上述的步驟221和步驟222可以看作是對(duì)圖1中的步驟121的一種優(yōu)化變形。
[0075]步驟223,利用已獲取的內(nèi)核處理器控制塊信息解凍所有被凍結(jié)的處理器核心。
[0076]其中,本步驟可以與圖1中的步驟122相同。
[0077]步驟224,將緩存空間中存放的完整的崩潰信息通過網(wǎng)絡(luò)向設(shè)定的遠(yuǎn)程轉(zhuǎn)儲(chǔ)地址傳輸。
[0078]其中,本步驟相比于圖1中的步驟123,進(jìn)一步增加了從緩存空間中讀取完整的崩潰信息的操作,而對(duì)于網(wǎng)絡(luò)傳輸部分的操作則與圖1中的步驟123相同。
[0079]至此,上述流程結(jié)束,等待操作系統(tǒng)重啟。
[0080]與圖1所示的流程同理,上述如圖2所示流程中的步驟211-213并不是必須在操作系統(tǒng)初始化時(shí)執(zhí)行,而是可以在操作系統(tǒng)發(fā)生崩潰之前的任意時(shí)刻執(zhí)行。
[0081]以上是對(duì)本實(shí)施例中用于獲取操作系統(tǒng)的崩潰信息的方法的詳細(xì)說明。由于該方法能夠以計(jì)算機(jī)程序來實(shí)現(xiàn),因此,本實(shí)施例還對(duì)應(yīng)地提供了一種用于獲取操作系統(tǒng)的崩潰信息的裝置。
[0082]首先,該裝置包括在操作系統(tǒng)發(fā)生崩潰之前(例如操作系統(tǒng)初始化時(shí))運(yùn)行的如下模塊:
[0083]回調(diào)函數(shù)注冊(cè)模塊,向操作系統(tǒng)注冊(cè)崩潰回調(diào)函數(shù);
[0084]遠(yuǎn)程地址設(shè)定模塊,為已注冊(cè)的崩潰回調(diào)函數(shù)設(shè)定遠(yuǎn)程轉(zhuǎn)儲(chǔ)地址;
[0085]控制塊信息獲取模塊,獲取所有處理器核心對(duì)應(yīng)的內(nèi)核處理器控制塊信息;其中,控制塊信息獲取模塊可以包括:列舉子模塊,列舉所有處理器核心;查詢子模塊,循環(huán)切換至列舉的每個(gè)處理器核心查詢其對(duì)應(yīng)的內(nèi)核處理器控制塊信息;存儲(chǔ)子模塊,保存查詢到的每個(gè)處理器核心對(duì)應(yīng)的內(nèi)核處理器控制塊信息;
[0086]并且,該裝置還包括在操作系統(tǒng)發(fā)生崩潰后通過觸發(fā)已注冊(cè)的回調(diào)函數(shù)運(yùn)行的如下模塊:
[0087]崩潰信息收集模塊,收集操作系統(tǒng)的崩潰信息;
[0088]處理器核心解凍模塊,利用已獲取的內(nèi)核處理器控制塊信息解凍所有被凍結(jié)的處理器核心;其中,若內(nèi)核處理器控制塊信息中至少包含對(duì)應(yīng)的處理器核心的凍結(jié)控制標(biāo)識(shí),則處理器核心解凍模塊可以通過循環(huán)設(shè)置所有被凍結(jié)的處理器核心對(duì)應(yīng)的凍結(jié)控制標(biāo)識(shí)為解凍狀態(tài),實(shí)現(xiàn)對(duì)所有被凍結(jié)的處理器核心的解凍。
[0089]崩潰信息傳輸模塊,將崩潰信息通過網(wǎng)絡(luò)向設(shè)定的遠(yuǎn)程轉(zhuǎn)儲(chǔ)地址傳輸。
[0090]另外,上述裝置還可以支持崩潰信息的分段收集,此時(shí):
[0091]回調(diào)函數(shù)注冊(cè)模塊可以進(jìn)一步為注冊(cè)的崩潰回調(diào)函數(shù)在本地內(nèi)存中預(yù)留出用于遠(yuǎn)程轉(zhuǎn)儲(chǔ)的緩存空間;
[0092]崩潰信息收集模塊則可以選擇以分段收集的方式收集完整的崩潰信息、并進(jìn)一步寫入至預(yù)留的緩存空間;
[0093]以及,崩潰信息傳輸模塊進(jìn)一步從緩存空間中讀取所要傳輸?shù)谋罎⑿畔ⅰ?br>
[0094]如上述可見,基于本實(shí)施例中用于獲取操作系統(tǒng)的崩潰信息的裝置,崩潰回調(diào)函數(shù)能夠以設(shè)定的遠(yuǎn)程轉(zhuǎn)儲(chǔ)地址為目的而發(fā)起對(duì)崩潰信息的遠(yuǎn)程轉(zhuǎn)儲(chǔ);并且,在操作系統(tǒng)發(fā)生崩潰后,由于操作系統(tǒng)崩潰而所有被凍結(jié)的處理器核心能夠被解凍,因而使得處理器能夠恢復(fù)至操作系統(tǒng)發(fā)生崩潰之前的狀態(tài),以可靠地執(zhí)行遠(yuǎn)程轉(zhuǎn)儲(chǔ)所需的網(wǎng)絡(luò)傳輸操作。從而,本實(shí)施例中用于獲取操作系統(tǒng)的崩潰信息的裝置能夠?qū)崿F(xiàn)崩潰信息的遠(yuǎn)程轉(zhuǎn)儲(chǔ),因而對(duì)于未配置本地硬盤的無盤工作站或者本地硬盤啟用了硬盤還原保護(hù)的情況,同樣能夠獲取到操作系統(tǒng)的崩潰信息,而不會(huì)由于未配置本地硬盤或者本地硬盤啟用了硬盤還原保護(hù)而導(dǎo)致崩潰信息無法轉(zhuǎn)儲(chǔ)或者轉(zhuǎn)儲(chǔ)后無法被正確尋回。
[0095]以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)的范圍之內(nèi)。
【權(quán)利要求】
1.一種用于獲取操作系統(tǒng)的崩潰信息的方法,其特征在于, 該方法包括在操作系統(tǒng)發(fā)生崩潰之前執(zhí)行的如下步驟: 步驟al、向操作系統(tǒng)注冊(cè)崩潰回調(diào)函數(shù); 步驟a2、為已注冊(cè)的崩潰回調(diào)函數(shù)設(shè)定遠(yuǎn)程轉(zhuǎn)儲(chǔ)地址; 步驟a3、獲取所有處理器核心對(duì)應(yīng)的內(nèi)核處理器控制塊信息; 該方法還包括在操作系統(tǒng)發(fā)生崩潰后通過觸發(fā)已注冊(cè)的回調(diào)函數(shù)執(zhí)行的如下步驟: 步驟bl、收集操作系統(tǒng)的崩潰信息; 步驟b2、利用已獲取的內(nèi)核處理器控制塊信息解凍所有被凍結(jié)的處理器核心; 步驟b3、將崩潰信息通過網(wǎng)絡(luò)向設(shè)定的遠(yuǎn)程轉(zhuǎn)儲(chǔ)地址傳輸。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟a3包括: 步驟a31、列舉所有處理器核心; 步驟a32、循環(huán)切換至列舉的每個(gè)處理器核心查詢其對(duì)應(yīng)的內(nèi)核處理器控制塊信息; 步驟a33、保存查詢到的每個(gè)處理器核心對(duì)應(yīng)的內(nèi)核處理器控制塊信息。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,內(nèi)核處理器控制塊信息中至少包含對(duì)應(yīng)的處理器核心的凍結(jié)控制標(biāo)識(shí); 并且,步驟b2通過循環(huán)設(shè)置所有被凍結(jié)的處理器核心對(duì)應(yīng)的內(nèi)核處理器控制塊信息中的凍結(jié)控制標(biāo)識(shí)為解凍狀態(tài),實(shí)現(xiàn)對(duì)所有被凍結(jié)的處理器核心的解凍。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于, 步驟al進(jìn)一步為所述崩潰回調(diào)函數(shù)在本地內(nèi)存中預(yù)留出用于遠(yuǎn)程轉(zhuǎn)儲(chǔ)的緩存空間; 步驟bl以分段收集的方式收集完整的崩潰信息、并進(jìn)一步寫入至預(yù)留的緩存空間; 以及,步驟b3進(jìn)一步從緩存空間中讀取所要傳輸?shù)谋罎⑿畔ⅰ?br>
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟a2設(shè)定的遠(yuǎn)程轉(zhuǎn)儲(chǔ)地址至少包含遠(yuǎn)程網(wǎng)絡(luò)的IP地址和端口號(hào)。
6.一種用于獲取操作系統(tǒng)的崩潰信息的裝置,其特征在于, 該裝置包括在操作系統(tǒng)發(fā)生崩潰之前運(yùn)行的如下模塊: 回調(diào)函數(shù)注冊(cè)模塊,向操作系統(tǒng)注冊(cè)崩潰回調(diào)函數(shù); 遠(yuǎn)程地址設(shè)定模塊,為已注冊(cè)的崩潰回調(diào)函數(shù)設(shè)定遠(yuǎn)程轉(zhuǎn)儲(chǔ)地址; 控制塊信息獲取模塊,獲取所有處理器核心對(duì)應(yīng)的內(nèi)核處理器控制塊信息; 該裝置還包括在操作系統(tǒng)發(fā)生崩潰后通過觸發(fā)已注冊(cè)的回調(diào)函數(shù)運(yùn)行的如下模塊: 崩潰信息收集模塊,收集操作系統(tǒng)的崩潰信息; 處理器核心解凍模塊,利用已獲取的內(nèi)核處理器控制塊信息解凍所有被凍結(jié)的處理器核心; 崩潰信息傳輸模塊,將崩潰信息通過網(wǎng)絡(luò)向設(shè)定的遠(yuǎn)程轉(zhuǎn)儲(chǔ)地址傳輸。
7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,控制塊信息獲取模塊包括: 列舉子模塊,列舉所有處理器核心; 查詢子模塊,循環(huán)切換至列舉的每個(gè)處理器核心查詢其對(duì)應(yīng)的內(nèi)核處理器控制塊信息; 存儲(chǔ)子模塊,保存查詢到的每個(gè)處理器核心對(duì)應(yīng)的內(nèi)核處理器控制塊信息。
8.根據(jù)權(quán)利要求6所述的裝置,其特征在于,內(nèi)核處理器控制塊信息中至少包含對(duì)應(yīng)的處理器核心的凍結(jié)控制標(biāo)識(shí); 處理器核心解凍模塊通過循環(huán)設(shè)置所有被凍結(jié)的處理器核心對(duì)應(yīng)的內(nèi)核處理器控制塊信息中的凍結(jié)控制標(biāo)識(shí)為解凍狀態(tài),實(shí)現(xiàn)對(duì)所有被凍結(jié)的處理器核心的解凍。
9.根據(jù)權(quán)利要求6所述的裝置,其特征在于, 回調(diào)函數(shù)注冊(cè)模塊進(jìn)一步為所述崩潰回調(diào)函數(shù)在本地內(nèi)存中預(yù)留出用于遠(yuǎn)程轉(zhuǎn)儲(chǔ)的緩存空間; 崩潰信息收集模塊以分段收集的方式收集完整的崩潰信息、并進(jìn)一步寫入至預(yù)留的緩存空間; 以及,崩潰信息傳輸模塊進(jìn)一步從緩存空間中讀取所要傳輸?shù)谋罎⑿畔ⅰ?br>
10.根據(jù)權(quán)利要求6所述的裝置,其特征在于,遠(yuǎn)程地址設(shè)定模塊設(shè)定的遠(yuǎn)程轉(zhuǎn)儲(chǔ)地址至少包含遠(yuǎn)程網(wǎng)絡(luò)的IP地址和端口號(hào)。
【文檔編號(hào)】G06F11/34GK104268067SQ201410491488
【公開日】2015年1月7日 申請(qǐng)日期:2014年9月24日 優(yōu)先權(quán)日:2014年9月24日
【發(fā)明者】謝鵬 申請(qǐng)人:湖北盛天網(wǎng)絡(luò)技術(shù)股份有限公司