只要是使用過Windows
或Windows
的用戶
我估計沒有遇到過一般性保護錯(GPF)的人幾乎沒有
當一個程序試圖訪問其內存地址空間之外的內存時
就會引發這種錯誤
每當發生這種錯誤
系統就會提示
程序執行了非法操作
這時我們該怎麼辦呢?下面是針對不同程序的GPF而分別采取的處理辦法
基於MS
DOS程序中的GPF
由於每個MS
DOS程序只在獨自的虛擬機上運行
故基於MS
DOS的程序出現一般性保護錯後
受影響的僅僅是該MS
DOS程序
因此
當這類程序出現GPF後
用戶只須在GPF對話框中單擊
關閉
按鈕
就將終止該MS
DOS程序以及運行它的虛擬機而收回被該程序調用的系統資源
點擊GPF對話框中的
詳細資料
按鈕
系統將提供一些堆棧轉儲數據
這些堆棧轉儲數據是在程序崩潰時存儲在系統寄存器中的消息
該信息一般只對編寫程序的人有用
位Windows程序中的GPF
由於基於Windows的所有
位程序享用相同的地址空間
故只要一個
位程序出現GPF
則其他正在運行的
位Windows程序都將因此而終止
只有將出現GPF的
位程序清除後
其他
位程序才能繼續讀線程中的消息和正常進行操作
由於所有
位的Windows程序共享相同的資源
因此即使將出現故障的
位程序關閉
通常也不能把資源徹底返回操作系統
而這些不能回收的資源又可能造成另外的
位Windows程序出現GPF
故當
位Windows程序出現GPF時
要徹底收回系統資源
唯一的辦法是關閉所有的
位Windows程序
當
位Windows程序出現故障時
Windows系統也將發出指示故障的程序的GPF對話框
該對話框是基於Windows
舊類型的對話框
由
關閉
按鈕和
忽略
按鈕所構成
用戶選擇
關閉
按鈕後
將看到Windows
/
GPF的對話框
位Windows程序中的GPF
雖然所有的
位Windows程序都使用同一個系統虛擬機
但是它們都有單獨的虛擬地址空間
所以當
位Windows程序出現GPF故障時
不會對其他任何程序產生影響
要收回出現GPF故障的
位Windows程序占用的系統資源
用戶只須在出現的
Windows
/
GPF
對話框中單擊
關閉
按鈕
Windows就會關閉出錯的程序並把其資源返回操作系統
設備驅動程序中的GPF
設備驅動程序中也會出現GPF
由於設備驅動程序能直接訪問硬件並作為基本操作系統的一部分運行
所以當設備驅動程序出現GPF故障後
將會影響整個Windows系統的穩定和繼續正常運行
因此設備驅動程序出現了一般性保護錯後
最好的解決辦法就是重新啟動系統
將詳細講講如何跟蹤虛擬機
看看理論是否與事實相吻合
點擊
開始/附件/系統工具
中的
系統監視器
打開
系統監視器
中的
編輯
菜單
選擇
添加項目(A)
選項
選擇
核心
類別中的
虛擬機
項目
單擊
確定
按鈕
即可利用
系統監視器
查看
虛擬機
的運行狀態
從下面的介紹中
我們可以看到Windows程序和MS
DOS程序調用虛擬機的真實情況
程序調用情況
只運行了Windows
系統
虛擬機運行情況
只調用了系統虛擬機
說明
Windows系統的系統程序只在系統虛擬機中運行
程序調用情況
打開了Word
和PhotoShop
程序
虛擬機運行情況
仍然只調用了系統虛擬機
說明
基於Windows的所有程序(無論是
位還是
位程序)均在系統虛擬機中運行
程序調用情況
在上個基礎上調用了一個MS
DOS程序
虛擬機運行情況
調用了系統虛擬機和一個MS
DOS虛擬機
說明
從圖中可以看出
MS
DOS程序不在系統虛擬機中運行
而是單獨調用一個MS
DOS虛擬機運行
並且一個MS
DOS虛擬機的峰值為
程序調用情況
在上個基礎上再打開了一個MS
DOS程序
虛擬機運行情況
調用了系統虛擬機和兩個MS
DOS虛擬機
說明:基於MS
DOS的程序並不是在同一個MS
DOS虛擬機中運行
一個MS
DOS虛擬機中只能運行一個MS
DOS程序
而且MS
DOS虛擬機相互之間互不干擾
總結
Windows系統中的所有程序只能在系統虛擬機和MS
DOS虛擬機中運行!程序的不響應又稱為程序被掛起
那麼
什麼叫程序的不響應呢?形象地說
就是某個正在運行的程序非正常地停留在某一狀態
而又不對系統作出相應的反應
就仿佛死了一般
與出現GPF故障的程序不同的是
被掛起的程序並不會被系統強制終止
而是在繼續運行
但不會對系統作出響應
造成程序
不響應
的原因是多方面的
但有一點是我們應該了解的
那就是線程的阻塞是造成程序掛起的主要因素
而不是虛擬機的問題
另外一些其他原因也能造成程序被掛起
如造成
位Windows程序被掛起可能是該程序不能與別的
位程序共享資源
或者因其他的
位程序出現GPF而沒有得到及時消除造成:
位的Windows程序所需資源被其他程序使用時也會出現程序不響應故障
從而我們可以看到
如果一個程序在使用一個關鍵資源時被掛起
則所有其他需要該資源的程序也將被掛起
掛起的程序必須關閉以釋放其占用的資源後
其他程序才能夠繼續運行
下面就是不同程序出現不響應故障後的解決措施
掛起的MS
DOS程序
由於每個MS
DOS程序使用獨自的MS
DOS VM
而每個MS
DOS VM擁有單獨的線程(注
每個MS
DOS VM擁有
個線程)
因此
當一個MS
DOS程序被掛起時
其他的MS
DOS程序仍能正常運行
要關閉被掛起的MS
DOS程序
用戶只需同時按下CTR l+ALT +del鍵
調出圖
界面
然後選中被掛起的MS
DOS程序
單擊
結束任務
按鈕即可
掛起的
位Windows 程序
位Windows 程序被掛起時
它們一般不會釋放對線程和其它系統資源的控制
又由於
位Windows程序共享單個線程
因此
當一個
位Windows 程序被掛起後
可能導致越來越多的
位Windows 程序被掛起
所以
必須將所有的被掛起的
位Windows程序關閉後
其它的
位程序才能繼續正常運行
另外
Windows
X系統使用Win
Mutex標志來指示某個特定的
位Windows 程序正在使用的資源
Win
Mutex標志的出現會產生一個副作用
即當被掛起的
位Windows 程序被釋放後
會產生一些
位代碼碎片
如果
位的Windows程序正准備使用這些碎片
則可能會被其他試圖使用相同碎片的
位程序掛起
因此
當
位程序被掛起時
最穩妥的方法是重新啟動計算機
掛起的
位Windows 程序
位Windows 程序被掛起時
則不起影響其他
位Windows程序!這主要是因為它們擁有獨自的線程
因此
當一個
位Windows 程序被掛起後
只需按三鍵組合
點擊
結束任務
按鈕將其關閉即可
From:http://tw.wingwit.com/Article/os/xtgl/201311/9045.html