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