查看單個文章
舊 2003-04-04, 10:56 AM   #3 (permalink)
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設

Windows是怎樣死掉的
只要是使用過Windows 95或Windows 98的用戶,我估計沒有遇到過一般性保護錯(GPF)的人幾乎沒有。當一個程序試圖訪問其記憶體地址空間之外的記憶體時,就會引發這種錯誤,每當發生這種錯誤,系統就會提示:程序執行了非法操作。這時我們該怎麼辦呢?下面是針對不同程序的GPF而分別採取的處理辦法。

  1.基於MS-DOS程序中的GPF

  由於每個MS-DOS程序只在獨自的虛擬機上執行,故基於MS-DOS的程序出現一般性保護錯後,受影響的僅僅是該MS-DOS程序。因此,當這類程序出現GPF後,用戶只須在GPF對話視窗中單擊「關閉」按鈕,就將終止該MS-DOS程序以及執行它的虛擬機而收回被該程序調用的系統資源。

  點擊GPF對話視窗中的「詳細資料」按鈕,系統將提供一些堆棧轉儲資料,這些堆棧轉儲資料是在程序崩潰時存儲在系統寄存器中的消息,該信息一般只對編寫程序的人有用。

  2.16位Windows程序中的GPF

  由於基於Windows的所有16位程序享用相同的地址空間,故只要一個16位程序出現GPF,則其他正在執行的16位Windows程序都將因此而終止。只有將出現GPF的16位程序清除後,其他16位程序才能繼續讀線程中的消息和正常進行操作。

  由於所有16位的Windows程序共享相同的資源,因此即使將出現故障的16位程序關閉,通常也不能把資源徹底返回操作系統,而這些不能回收的資源又可能造成另外的16位Windows程序出現GPF。故當16位Windows程序出現GPF時,要徹底收回系統資源,唯一的辦法是關閉所有的16位Windows程序。

  當16位Windows程序出現故障時,Windows系統也將發出指示故障的程序的GPF對話視窗,該對話視窗是基於Windows 3.1舊類型的對話視窗,由「關閉」按鈕和「忽略」按鈕所構成。用戶選擇「關閉」按鈕後,將看到Windows 95/98 GPF的對話視窗。3.32位Windows程序中的GPF

  雖然所有的32位Windows程序都使用同一個系統虛擬機,但是它們都有單獨的虛擬地址空間,所以當32位Windows程序出現GPF故障時,不會對其他任何程序產生影響。

  要收回出現GPF故障的32位Windows程序佔用的系統資源,用戶只須在出現的「Windows 95/98 GPF」對話視窗中單擊「關閉」按鈕,Windows就會關閉出錯的程序並把其資源返回操作系統。4.設備驅動程序中的GPF

  設備驅動程序中也會出現GPF。由於設備驅動程序能直接訪問硬體並作為基本操作系統的一部分執行,所以當設備驅動程序出現GPF故障後,將會影響整個Windows系統的穩定和繼續正常執行。因此設備驅動程序出現了一般性保護錯後,最好的解決辦法就是重新啟動系統。 將詳細講講如何跟蹤虛擬機,看看理論是否與事實相吻合。

  1.點擊「開始/附件/系統工具」中的「系統監視器」。

  2.開啟「系統監視器」中的「編輯」表單,選擇「增加項目(A)」選項。

  3.選擇「核心」類別中的「虛擬機」項目,單擊「確定」按鈕,即可利用「系統監視器」查看「虛擬機」的執行狀態。

  4.從下面的介紹中,我們可以看到Windows程序和MS-DOS程序調用虛擬機的真實情況:程序調用情況:只執行了Windows 98系統。

  虛擬機執行情況:只調用了系統虛擬機。

  說明:Windows系統的系統程序只在系統虛擬機中執行。

  程序調用情況:開啟了Word97和PhotoShop4.0程序。

  虛擬機執行情況:仍然只調用了系統虛擬機。

  說明:基於Windows的所有程序(無論是16位還是32位程序)均在系統虛擬機中執行。

  程序調用情況:在上個基礎上調用了一個MS-DOS程序。

  虛擬機執行情況:調用了系統虛擬機和一個MS-DOS虛擬機。

  說明:從圖中可以看出,MS-DOS程序不在系統虛擬機中執行,而是單獨調用一個MS-DOS虛擬機執行,並且一個MS-DOS虛擬機的峰值為1。程序調用情況:在上個基礎上再開啟了一個MS-DOS程序。

  虛擬機執行情況:調用了系統虛擬機和兩個MS-DOS虛擬機。

  說明:基於MS-DOS的程序並不是在同一個MS-DOS虛擬機中執行。一個MS-DOS虛擬機中只能執行一個MS-DOS程序,而且MS-DOS虛擬機相互之間互不干擾。

  總結:Windows系統中的所有程序只能在系統虛擬機和MS-DOS虛擬機中執行!程序的不響應又稱為程序被掛起,那麼,什麼叫程序的不響應呢?形象地說,就是某個正在執行的程序非正常地停留在某一狀態,而又不對系統作出相應的反應,就彷彿死了一般。與出現GPF故障的程序不同的是,被掛起的程序並不會被系統強制終止,而是在繼續執行,但不會對系統作出響應。

  造成程序「不響應」的原因是多方面的,但有一點是我們應該瞭解的,那就是線程的阻塞是造成程序掛起的主要因素,而不是虛擬機的問題。另外一些其他原因也能造成程序被掛起,如造成16位Windows程序被掛起可能是該程序不能與別的16位程序共享資源,或者因其他的16位程序出現GPF而沒有得到及時消除造成:32位的Windows程序所需資源被其他程序使用時也會出現程序不響應故障。從而我們可以看到,如果一個程序在使用一個關鍵資源時被掛起,則所有其他需要該資源的程序也將被掛起。掛起的程序必須關閉以釋放其佔用的資源後,其他程序才能夠繼續執行。

  下面就是不同程序出現不響應故障後的解決措施。

  掛起的MS-DOS程序

  由於每個MS-DOS程序使用獨自的MS-DOS VM,而每個MS-DOS VM擁有單獨的線程(註:每個MS-DOS VM擁有2個線程)。因此,當一個MS-DOS程序被掛起時,其他的MS-DOS程序仍能正常執行。要關閉被掛起的MS-DOS程序,用戶只需同時按下CTR l+ALT +del鍵,調出圖1界面,然後選被掛起的MS-DOS程序,單擊「結束任務」按鈕即可。

  掛起的16位Windows 程序

  16位Windows 程序被掛起時,它們一般不會釋放對線程和其它系統資源的控制,又由於16位Windows程序共享單個線程。因此,當一個16位Windows 程序被掛起後,可能導致越來越多的16位Windows 程序被掛起。所以,必須將所有的被掛起的16位Windows程序關閉後,其它的16位程序才能繼續正常執行。

  另外,Windows 9X系統使用Win16Mutex標誌來指示某個特定的16位Windows 程序正在使用的資源。Win16Mutex標誌的出現會產生一個副作用,即當被掛起的16位Windows 程序被釋放後,會產生一些16位代碼碎片,如果32位的Windows程序正準備使用這些碎片,則可能會被其他試圖使用相同碎片的16位程序掛起。

  因此,當16位程序被掛起時,最穩妥的方法是重新啟動電腦。

  掛起的32位Windows 程序

  32位Windows 程序被掛起時,則不起影響其他32位Windows程序!這主要是因為它們擁有獨自的線程。因此,當一個32位Windows 程序被掛起後,只需按三鍵組合,點擊「結束任務」按鈕將其關閉即可。
__________________
http://bbsimg.qianlong.com/upload/01/08/29/68/1082968_1136014649812.gif
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次