Pac*_*ier 52 windows restore crash filesystems
我的印象是,当计算机崩溃时,出现了问题并且无法再执行。
我想知道计算机如何在崩溃之前保存内容?
计算机真的能够知道它什么时候会崩溃(从而通知所有进程:“尽快保存,因为我即将崩溃”)?
如果没有,程序怎么可能喜欢Chrome并且Microsoft Word可以在计算机崩溃后提供“恢复”服务?
Ste*_*ngs 82
Chrome 和 Microsoft Word 会在您工作时定期保存您的当前状态。如果应用程序或计算机崩溃,当应用程序重新启动时,它们会在磁盘上查找保存的状态,并为您恢复它。他们不需要预测崩溃;如果出现问题,他们会不断保存您的状态。
Zip*_*pyV 62
编辑:这仅适用于应用程序崩溃时,而不是 Windows。
由于 Windows Vista 有一个新的 API,它允许 Windows 在应用程序崩溃时调用一个特殊的函数,以便它可以在关闭之前尝试恢复任何数据。它是这样工作的:
RecoverData()RecoverData()在应用程序中执行RecoverData() 尝试检索有关当前打开的文档的数据,同时它不断 ping Windows 以告知它仍在忙于恢复。RecoverData()完成/超时/停止 ping 时,Windows 将终止应用程序并重新启动它。更多信息:http : //msdn.microsoft.com/en-us/library/windows/desktop/aa373351(v=VS.85).aspx
inf*_*inf 16
好吧,他们只是在崩溃之前保存当前状态。就像每 X 秒自动保存一次。
我认为一个人真的必须区分:
小智 10
这取决于崩溃的严重程度。非常严重的崩溃(在计算机的最低级别)将导致计算机简单地停止。唯一保存的工作是每个应用程序定期自动保存其数据。
对于不太严重的崩溃,计算机会警告每个程序需要关闭。如果程序侦听此消息,则程序将在此处保存当前数据。但是,并非所有程序都注意此消息。
我的印象是,当计算机崩溃时,出现了问题并且无法再执行。
是的,这是完全正确的。但是,从逻辑的角度来看,您的程序并不是在计算机上不受限制地运行。程序在操作系统下运行!
我想知道计算机如何在崩溃之前保存内容?计算机是否真的能够知道它何时会崩溃(从而通知所有进程:“尽快保存,因为我即将崩溃”)?
好吧,在BSOD或内核恐慌的情况下,操作系统确定将发生真正不安全的事情(无效的内存指针、覆盖分配给操作系统内核的某些内存、访问不存在的硬件等。 .) 在这种情况下,操作系统会要求所有进程停止执行,将 RAM 的内容保存到磁盘(因为操作系统还负责管理内存分配),然后安全地关闭或重新启动计算机。
当程序抛出未处理的异常并传播到操作系统时,单个应用程序本身就会崩溃。在这种情况下,操作系统将停止执行程序,并关闭所有打开的内存/文件句柄。
在上述两种情况下,程序执行通常不会正常终止。在这些情况下,由各个应用程序来恢复自己的数据,因为它们会突然“停止”执行。
如果没有,Chrome 和 Microsoft Word 之类的程序怎么可能在计算机崩溃后提供“恢复”服务?
IIRC,如果发生上述情况,这两个应用程序都会定期将应用程序状态保存到磁盘,以防止数据丢失。例如,Word 每隔几分钟自动保存当前工作文档的备份副本,以便在突然硬重启的情况下,您仍然可以恢复数据(提供或花费几分钟的工作),而无需您做过什么。
但同样,作为开发人员,您有责任确保您的应用程序能够处理这些情况。
当计算机“崩溃”时,例如可能是由于“突然”电源故障(在这种情况下什么也做不了),也可能是由于某种令人讨厌的内部事件(例如,损坏的页表)导致类似地阻止做任何事情,或者可能是由于某些条件以某种方式简单地阻止了“进一步操作”——也许无法启动新进程,也许无法更新显示,也许系统只是简单地用完了存储。
在后一种情况下,操作系统仍然可以在一定范围内运行,并且至少可以完成正在进行的磁盘操作、很好地关闭文件等。此外,如果可能有更多的功能,操作系统可能能够告诉各种应用程序进程以干净地关闭自己。
但即使系统“严重”宕机,整个系统和单个应用程序可能会维护一个“日志”和/或“检查点”系统,以允许恢复整个系统和单个应用程序的状态到一个“原子”点,一切都是“内部一致的”,并且丢失了最少的重要数据。
这一切都不是通过单一机制完成的,而是通过系统和应用程序级别的功能层来完成的。
特别是关于电源故障,可能有也可能没有提前通知,“提前”警告可能是几分之一秒或(使用 UPS 或笔记本电脑电池出现故障)几分钟。可以做什么取决于警告的数量。
在大多数情况下,对于没有 UPS 的台式机系统,最好有时间“停顿”磁盘操作,以便在电源最终消失时没有磁盘处于写入过程中。这可以防止在磁盘上产生坏扇区。过去,当 RAM 小得多时,可能有足够的时间(电源中有大电容,甚至奇怪地使用磁盘驱动器转子中存储的能量来发电)在通电前将 RAM 写入磁盘下降了,但是当 RAM 增长到 100M 左右时,这种可能性几乎消失了。
[请注意,在过去,当记忆是用磁性“核心”制作时,断电时 RAM 会自然地保留下来(尽管在断电时读取/写入的特定字可能会损坏)。这使那些旧系统更容易从电源故障中恢复。]
然而,对于类似 UPS 的东西(它可以提供几分钟到几小时的额外电力),还有更多的选择。一种是简单地关闭系统,就好像您要求“关闭电源”一样。这会导致每个应用程序自行结束,然后整个系统写出永久表并关闭。这可能需要很长时间(我相信你们中的许多人已经注意到了)。但也可以使用“休眠”策略,其中 RAM 作为单个块写入磁盘,然后关闭系统电源。在“休眠”场景中,在恢复供电时,RAM 被读回到它被写入的确切位置,这里和那里的一些位被混淆,然后从它停止的地方恢复执行。
在一些较旧的“大铁”系统上,使用半休眠策略进行紧急关闭:内存将按上述方式写出,但当电源恢复并读入内存时,将发生标准关闭。这样做是因为系统状态的某些位(特别是在 I/O 控制器中)无法可靠地保存/恢复以允许继续操作。
| 归档时间: |
|
| 查看次数: |
6458 次 |
| 最近记录: |