版权归原作者所有,如有侵权,请联系我们

[科普中国]-硬错误

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

定义

Hard faults are also known as page faults. Despite the negative connotation of the name, this is not an error condition. Rather, it represents an instance where a block of memory needed by the operating system or an application has to be fetched from the page file on the hard disk instead of from physical memory. A consistently high number of hard faults per second indicates a large—perhaps excessive—reliance on virtual memory, with consequent adverse performance effects. 1

硬错误”也名为“页面错误”。尽管字面上是负面的含义,但并非表示一种故障状态。它表示操作系统或应用程序访问的内存地址不在当前物理内存中,而在磁盘上的页面文件中的情况。每秒发生的“硬错误”数量长期处于较高说明系统过度依赖于虚拟内存,随之引起的是性能的下降。

内存中的数据在工作过程中难免会出现错误,而对于稳定性要求高的用户来说,比如完成一项需要连续求解30天的分析项目,内存中的数据错误可能会引起致命性的问题(死机、蓝屏、重启、数据丢失)和白白浪费宝贵的时间。内存错误根据其原因可分为硬错误和软错误。硬错误是由于硬件的损坏或缺陷造成的,因此数据总是不正确的,此类错误是无法纠正的;软错误是随机出现的,例如在内存附近突然出现电子干扰等因素,可能造成内存软错误的出现。2

处理方法针对MS-DOSMS-DOS处理硬错误的方法是相当直接的,当MS-DOS已运行到一定程度时发现上述的硬错误,就会与磁盘驱动器通讯。驱动器报告这个问题,MS-DOS就在屏幕上显示“Abort,Retry,Ignore?”信息。通常,用户纠正一下错误并给系统予以应答。MS-DOS然后按用户指定的动作行动,完成其任务,并返回到应用级。应用程序常常并不要系统自动地处理硬错误。或许,它们担心数据的完整性并要求直到写磁盘问题,或者它们要防止用户指明“Ignore”,或者它们并不想叫MS-DOS在不通知它们的情况下就在屏幕上显示。为了处理这些情形,MS-DOS让应用程序将硬错误处理程序的地址存放在INT24向量中。如果有这一硬错误处理程序,MS-DOS就调用它,而不调用自己的硬错误处理程序。3

当系统处理MS-DOS硬错误时,系统处于的状态并不一般,应用程序起动通过INT21向量调用MS-DOS,MS-DOS然后在其内调用较深的几层,在这里有一个MS-DOS内部过程即将硬错误处理程序调用到应用程序。因为MS-DOS通常不是可再入的,所以这时应用程序就不能通过INT21再调用MS-DOS,否则这样做就意味着在同一时刻已调用二次MS-DOS了。应用程序很可能在处理硬错误时,需要做屏幕和键盘I/O操作,所以MS-DOS被做成是部分可再入的。因起始调用包含磁盘I/O操作,所以MS-DOS可通过屏幕/键盘I/O调用再进入而不会产生问题。3

针对OS/2对于OS/2,有一些问题使我们不能按照MS-DOS的方法来做。首先,和单任务MS-DOS不同,OS/2不能在操作系统调用应用程序期间(这样的调用或许在很长时间内部不能返回)将操作暂停下来。第二,主要技术和安全性问题都包含在从0级(有特权的核心方式)到第3级(应用方式)的调用中。第三,在MS-DOS环境下,OS/2就不那么容易了,这是因为可能有多个进程使磁盘FAT扇区或磁盘目录被编辑,由于OS/2所使用的缓冲技术也会在没有进程做I/O操作时导致硬错误的出现。最后一点,即使我们解决了所有这些问题,引起硬错误的应用程序也会在后台屏幕组里运行,它不能显示信息或利用键盘。即使该应用程序在前台屏幕组内,如果它不是正控制屏幕和键盘的进程,它也不能使用屏幕和键盘。3

ECC功能为了提高内存中数据的可靠性,引入了ECC技术。ECC是Error Correcting Code的简写,中文名称是“错误检查和纠正”。ECC内存就是应用了这种技术的内存,一般多应用在服务器和图形工作站上,这将使整个电脑系统在工作时更趋于安全稳定。2

ECC纠错算法ECC内存技术是在数据位上额外的位存储一个用数据加密的代码,当数据被写入内存时相应的ECC代码同时也被保存下来,当重新读回刚才存储的数据时保存下来的ECC代码就会和读数据时产生的ECC代码作比较,如果两个代码不相同,则他们会被以确定数据中的哪一位是不正确的,然后这个错误位将会被抛弃,内存控制器会释放出正确的数据。被纠正的数据很少会被放回内存。假如相同的错误数据再次被读出,则纠正过程再次被执行。重写数据会增加处理过程的开销,会导致系统性能的明显降低。一般而言,同等性能等级的内存,当加入了ECC校验技术后会导致整体性能下降10%或更多。不过,这种纠错对大规模有限元分析等需要长期高负荷运行、时刻保持高度稳定性的应用来说是十分重要的。带ECC校验技术的内存价格一般会比普通内存贵一些。2

ECC内存认识误区一谈到服务器内存,大家一般都一致强调要买ECC内存,认为ECC内存速度快,其实这是一种错误的认识。ECC内存的成功之处并不是因为它的速度快,而是因为它有特殊的纠错能力,使服务器保持稳定。ECC本身并不是一种内存型号,也不是一种内存专用技术,它是广泛应用于各种计算机指令区域的一种指令纠错技术。之所以说它并不是一种内存型号,是因为它并不是一种影响内存结构和存储速度的技术。它可以用到不同的内存类型中,就像“奇偶校验”内存,它也不是一种单纯的硬件。2

带ECC校验的内存还要主板支持,并在BIOS中进行相应的设置,应用到大多数服务器主板上,一些厂商推出的入门级低端服务器使用的多是普通内存,无ECC功能,在选购时应该注意这个指标。由于ECC技术会增加成本,并且大多数家用计算机并不要求高度的可靠性,所以除XEON(志强)系列外,Intel公司的桌面级CPU(G、I3、I5、I7系列等)都不支持ECC内存。XEON(志强)CPU对内存的要求是向下兼容的,也就是说支持ECC内存也支持非ECC内存。2