|
Windows Vista通過(guò)許多新功能和改進(jìn)提高了系統(tǒng)的可靠性和您對(duì)系統(tǒng)與應(yīng)用程序問(wèn)題的診斷能力。例如,內(nèi)核 Windows 事件跟蹤 (ETW) 記錄程序總是處于運(yùn)行狀態(tài),能夠生成有關(guān)文件、注冊(cè)表、中斷以及其他活動(dòng)類型的跟蹤事件,并保存在循環(huán)緩沖區(qū)中。當(dāng)出現(xiàn)問(wèn)題時(shí),新的 Windows 診斷基礎(chǔ)結(jié)構(gòu) (WDI) 會(huì)捕獲緩沖區(qū)快照,并進(jìn)行本地分析或上載到 Microsoft 支持進(jìn)行故障排除。
新的 Windows 性能和穩(wěn)定性監(jiān)視器可以幫助用戶通過(guò)更改系統(tǒng)配置將錯(cuò)誤(如崩潰和掛起)相互關(guān)聯(lián)。強(qiáng)大的系統(tǒng)修復(fù)工具 (SRT) 取代了故障恢復(fù)控制臺(tái),用于不可啟動(dòng)系統(tǒng)的離線恢復(fù)。
有三個(gè)方面依靠對(duì)系統(tǒng)進(jìn)行的內(nèi)核級(jí)更改,即需要您認(rèn)真閱讀的本文中的以下方面:內(nèi)核事務(wù)管理器 (KTM)、改進(jìn)的崩潰處理和以前的版本。
1.內(nèi)核事務(wù)管理器
軟件開(kāi)發(fā)中最繁瑣的一個(gè)方面就是處理錯(cuò)誤條件。特別是在進(jìn)行高級(jí)操作的過(guò)程中,應(yīng)用程序完成了一個(gè)或多個(gè)導(dǎo)致文件系統(tǒng)或注冊(cè)表更改的子任務(wù)。例如,應(yīng)用程序的軟件更新服務(wù)可能要進(jìn)行幾次注冊(cè)表更新,替換應(yīng)用程序的可執(zhí)行文件之一,而在它嘗試更新第二個(gè)可執(zhí)行文件時(shí)被拒絕訪問(wèn)。如果服務(wù)不想將應(yīng)用程序留在因此導(dǎo)致的不一致?tīng)顟B(tài),就必須跟蹤所有更改并為撤銷它們做好準(zhǔn)備。測(cè)試錯(cuò)誤恢復(fù)代碼很困難,并經(jīng)常跳過(guò),因此恢復(fù)代碼中的錯(cuò)誤會(huì)讓努力徒勞無(wú)功。
為 Windows Vista 編寫(xiě)的應(yīng)用程序通過(guò)使用 NTFS 中新的事務(wù)支持和使用內(nèi)核事務(wù)管理器的注冊(cè)表,不費(fèi)吹灰之力即可獲得自動(dòng)錯(cuò)誤恢復(fù)能力。當(dāng)應(yīng)用程序想進(jìn)行許多相關(guān)更改時(shí),可以創(chuàng)建分布式事務(wù)處理協(xié)調(diào)器 (DTC) 事務(wù)和 KTM 事務(wù)處理,或直接創(chuàng)建 KTM 處理,并將對(duì)文件和注冊(cè)表項(xiàng)的修改與事務(wù)關(guān)聯(lián)起來(lái)。如果所有的更改成功,應(yīng)用程序會(huì)提交事務(wù)同時(shí)更改生效,但是在此之前任何時(shí)候,應(yīng)用程序可以回滾事務(wù),然后放棄更改。
其有利因素在于,其他應(yīng)用程序在提交事務(wù)后才能看到事務(wù)中的更改,而在 Windows Vista 和即將問(wèn)世的 Windows Server(代號(hào)名為“Longhorn”)中使用 DTC 的應(yīng)用程序會(huì)通過(guò) SQL Server、Microsoft Message Queue Server (MSMQ) 以及其他數(shù)據(jù)庫(kù)協(xié)調(diào)其事務(wù)。因此,使用 KTM 事務(wù)的應(yīng)用程序更新服務(wù)永遠(yuǎn)不會(huì)將應(yīng)用程序留在不一致的狀態(tài)。這就是 Windows Update 和系統(tǒng)還原使用事務(wù)的原因。
作為事務(wù)支持的核心,KTM 允許事務(wù)資源管理器(如 NTFS 和注冊(cè)表)對(duì)應(yīng)用程序所做的特定更改協(xié)調(diào)其更新。在 Windows Vista 中,NTFS 使用稱為 TxF 的擴(kuò)展來(lái)支持事務(wù)。注冊(cè)表使用稱為 TxR 的類似擴(kuò)展。這些內(nèi)核模式資源管理器與 KTM 一起協(xié)調(diào)事務(wù)狀態(tài),正如用戶模式資源管理器使用 DTC 跨多用戶模式資源管理器協(xié)調(diào)事務(wù)狀態(tài)一樣。第三方也可以使用 KTM 實(shí)施其自己的資源管理器。
TxF 和 TxR 都定義了一套新的文件系統(tǒng)和注冊(cè)表 API(與現(xiàn)有的類似,只不過(guò)它們包含事務(wù)參數(shù))。如果應(yīng)用程序想在事務(wù)中創(chuàng)建文件,首先要使用 KTM 創(chuàng)建事務(wù),然后將引起的事務(wù)處理傳遞給新文件創(chuàng)建 API。
TxF 和 TxR 都依賴在 Windows Server 2003 R2 中引入的公用日志文件系統(tǒng)或 CLFS (%SystemRoot%\System32\Clfs.sys) 的高速文件系統(tǒng)記錄功能。TxR 和 TxF 使用 CLFS 永久性地存儲(chǔ)提交事務(wù)之前的事務(wù)狀態(tài)更改。這樣可以讓它們提供事務(wù)恢復(fù)并確保即使在斷電時(shí)也可以恢復(fù)。除了 CLFS 日志,TxR 還創(chuàng)建了一組相關(guān)的日志文件,跟蹤 %Systemroot%\System32\Config\Txr 中系統(tǒng)注冊(cè)表文件的事務(wù)更改(如圖 1 所示),同時(shí)還為每個(gè)用戶注冊(cè)表配置單元單獨(dú)創(chuàng)建幾組日志文件。TxF 在名為 \$Extend\$RmMetadata 的卷的隱藏目錄中存儲(chǔ)每個(gè)卷的事務(wù)數(shù)據(jù)。
2.增強(qiáng)的崩潰支持
當(dāng) Windows 遇到不可恢復(fù)的內(nèi)核模式錯(cuò)誤時(shí)(無(wú)論是由于設(shè)備驅(qū)動(dòng)程序錯(cuò)誤、硬件故障還是操作系統(tǒng)問(wèn)題),在出現(xiàn)“藍(lán)屏死機(jī)”現(xiàn)象和將物理內(nèi)存的部分或所有內(nèi)容寫(xiě)入崩潰轉(zhuǎn)儲(chǔ)文件(如果配置為執(zhí)行此操作)后,它會(huì)嘗試終止系統(tǒng)來(lái)防止磁盤數(shù)據(jù)的損壞。轉(zhuǎn)儲(chǔ)文件非常有用,因?yàn)楫?dāng)您在系統(tǒng)崩潰后重啟時(shí),Microsoft 在線崩潰分析 (OCA) 服務(wù)會(huì)分析這些文件找出根本原因。如果愿意,您也可以使用面向 Windows 的 Microsoft 調(diào)試工具自已進(jìn)行分析。
不過(guò),在以前的 Windows 版本中,只有在會(huì)話管理器 (%Systemroot%\System32\Smss.exe) 進(jìn)程初始化分頁(yè)文件后才會(huì)啟用對(duì)崩潰轉(zhuǎn)儲(chǔ)文件的支持。這意味著在此之前任何嚴(yán)重錯(cuò)誤會(huì)導(dǎo)致藍(lán)屏,但沒(méi)有轉(zhuǎn)儲(chǔ)文件。由于在 Smss.exe 啟動(dòng)之前,會(huì)出現(xiàn)大量的設(shè)備驅(qū)動(dòng)程序初始化,所以早期的崩潰永遠(yuǎn)不會(huì)引起崩潰轉(zhuǎn)儲(chǔ),因此使原因診斷極為困難。
在所有引導(dǎo)啟動(dòng)設(shè)備驅(qū)動(dòng)程序初始化之后,但在系統(tǒng)啟動(dòng)驅(qū)動(dòng)程序加載之前,Windows Vista 通過(guò)初始化轉(zhuǎn)儲(chǔ)文件支持,可減少無(wú)轉(zhuǎn)儲(chǔ)文件生成的時(shí)間窗口。由于這一更改,如果在引導(dǎo)過(guò)程開(kāi)始時(shí)出現(xiàn)崩潰,系統(tǒng)就可以捕捉崩潰轉(zhuǎn)儲(chǔ),讓 OCA 幫助您解決問(wèn)題。此外,Windows Vista 使用 64KB 塊將數(shù)據(jù)存儲(chǔ)到轉(zhuǎn)儲(chǔ)文件中,而以前的 Windows 版本使用 4KB 塊寫(xiě)入文件。這一更改使得大型轉(zhuǎn)儲(chǔ)文件的寫(xiě)入速度最多可提高 10 倍。
應(yīng)用程序崩潰處理功能在 Windows Vista 中也得以改進(jìn)。在以前的 Windows 版本中,當(dāng)應(yīng)用程序崩潰時(shí),它會(huì)執(zhí)行未處理的異常處理程序。處理程序啟動(dòng) Microsoft 應(yīng)用程序錯(cuò)誤報(bào)告 (AER) 進(jìn)程 (%Systemroot%\System32\Dwwin.exe),顯示對(duì)話框,指明程序崩潰,并詢問(wèn)您是否要向 Microsoft 發(fā)送錯(cuò)誤報(bào)告。不過(guò),如果崩潰時(shí)進(jìn)程主線程的堆棧損壞,未處理的異常處理程序執(zhí)行時(shí)會(huì)崩潰,導(dǎo)致內(nèi)核終止進(jìn)程、程序窗口立即消失,并且沒(méi)有錯(cuò)誤報(bào)告窗口。
Windows Vista 將錯(cuò)誤處理從崩潰進(jìn)程的上下文移至新服務(wù),即 Windows 錯(cuò)誤報(bào)告 (WER)。此服務(wù)由服務(wù)托管進(jìn)程中的 DLL (%Systemroot%\System32\Wersvc.dll) 實(shí)施。在應(yīng)用程序崩潰時(shí),它仍然會(huì)執(zhí)行未處理的異常處理程序,但是該處理程序會(huì)向 WER 服務(wù)發(fā)送消息,并且服務(wù)會(huì)啟動(dòng) WER 錯(cuò)誤報(bào)告進(jìn)程 (%Systemroot%\System32\Werfault.exe) 以顯示錯(cuò)誤報(bào)告對(duì)話框。如果堆棧損壞并且未處理的異常處理程序崩潰,處理程序會(huì)再次執(zhí)行并且再次崩潰,最終消耗所有線程的堆棧(使用內(nèi)存區(qū)域),此時(shí)內(nèi)核會(huì)介入,并向服務(wù)發(fā)送崩潰通知消息。
|
【收藏】【打印】【進(jìn)入論壇】 |
|
|
|
|
|
|
|