电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

Windows死机原理揭密


发布日期:2021/4/11
 

只要是使用过Windows 或Windows 的用户我估计没有遇到过一般性保护错(GPF)的人几乎没有当一个程序试图访问其内存地址空间之外的内存时就会引发这种错误每当发生这种错误系统就会提示程序执行了非法操作这时我们该怎么办呢?下面是针对不同程序的GPF而分别采取的处理办法

基于MSDOS程序中的GPF

由于每个MSDOS程序只在独自的虚拟机上运行故基于MSDOS的程序出现一般性保护错后受影响的仅仅是该MSDOS程序因此当这类程序出现GPF后用户只须在GPF对话框中单击关闭按钮就将终止该MSDOS程序以及运行它的虚拟机而收回被该程序调用的系统资源

点击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程序和MSDOS程序调用虚拟机的真实情况程序调用情况只运行了Windows 系统

虚拟机运行情况只调用了系统虚拟机

说明Windows系统的系统程序只在系统虚拟机中运行

程序调用情况打开了Word和PhotoShop程序

虚拟机运行情况仍然只调用了系统虚拟机

说明基于Windows的所有程序(无论是位还是位程序)均在系统虚拟机中运行

程序调用情况在上个基础上调用了一个MSDOS程序

虚拟机运行情况调用了系统虚拟机和一个MSDOS虚拟机

说明从图中可以看出MSDOS程序不在系统虚拟机中运行而是单独调用一个MSDOS虚拟机运行并且一个MSDOS虚拟机的峰值为程序调用情况在上个基础上再打开了一个MSDOS程序

虚拟机运行情况调用了系统虚拟机和两个MSDOS虚拟机

说明:基于MSDOS的程序并不是在同一个MSDOS虚拟机中运行一个MSDOS虚拟机中只能运行一个MSDOS程序而且MSDOS虚拟机相互之间互不干扰

总结Windows系统中的所有程序只能在系统虚拟机和MSDOS虚拟机中运行!程序的不响应又称为程序被挂起那么什么叫程序的不响应呢?形象地说就是某个正在运行的程序非正常地停留在某一状态而又不对系统作出相应的反应就仿佛死了一般与出现GPF故障的程序不同的是被挂起的程序并不会被系统强制终止而是在继续运行但不会对系统作出响应

造成程序不响应的原因是多方面的但有一点是我们应该了解的那就是线程的阻塞是造成程序挂起的主要因素而不是虚拟机的问题另外一些其他原因也能造成程序被挂起如造成位Windows程序被挂起可能是该程序不能与别的位程序共享资源或者因其他的位程序出现GPF而没有得到及时消除造成:位的Windows程序所需资源被其他程序使用时也会出现程序不响应故障从而我们可以看到如果一个程序在使用一个关键资源时被挂起则所有其他需要该资源的程序也将被挂起挂起的程序必须关闭以释放其占用的资源后其他程序才能够继续运行

下面就是不同程序出现不响应故障后的解决措施

挂起的MSDOS程序

由于每个MSDOS程序使用独自的MSDOS VM而每个MSDOS VM拥有单独的线程(注每个MSDOS VM拥有个线程)因此当一个MSDOS程序被挂起时其他的MSDOS程序仍能正常运行要关闭被挂起的MSDOS程序用户只需同时按下CTR l+ALT +del键调出图界面然后选中被挂起的MSDOS程序单击结束任务按钮即可

挂起的位Windows 程序

位Windows 程序被挂起时它们一般不会释放对线程和其它系统资源的控制又由于位Windows程序共享单个线程因此当一个位Windows 程序被挂起后可能导致越来越多的位Windows 程序被挂起所以必须将所有的被挂起的位Windows程序关闭后其它的位程序才能继续正常运行

另外Windows X系统使用WinMutex标志来指示某个特定的位Windows 程序正在使用的资源WinMutex标志的出现会产生一个副作用即当被挂起的位Windows 程序被释放后会产生一些位代码碎片如果位的Windows程序正准备使用这些碎片则可能会被其他试图使用相同碎片的位程序挂起

因此位程序被挂起时最稳妥的方法是重新启动计算机

挂起的位Windows 程序

位Windows 程序被挂起时则不起影响其他位Windows程序!这主要是因为它们拥有独自的线程因此当一个位Windows 程序被挂起后只需按三键组合点击结束任务按钮将其关闭即可

上一篇:利用超级急救盘结合Ghost软件进行系统维护

下一篇:Opera+Mozilla:微软Win7E治标不治本