当前位置:在线查询网 > 在线百科全书查询 > 指令纠错技术

指令纠错技术_在线百科全书查询


请输入要查询的词条内容:

指令纠错技术


ECC( Error Checking and Correcting) 指令纠错技术:ECC本身并不是一种内存型号,也不是一种内存专用技术,它是一种广泛应用于各种计算机指令中的指令纠错技术。它是为了解决同位检查码技术的缺陷而产生的一种新的内存纠错技术,它的英文全称是“Error Checking and Correcting”,对应的中文名称就叫做“错误检查和纠正”,从这个名称上大家就可以看出它的主要功能是发现并纠正错误。



基本概念


ECC( Error Checking and Correcting) 指令纠错技术:ECC本身并不是一种内存型号,也不是一种内存专用技术,它是一种广泛应用于各种计算机指令中的指令纠错技术。它是为了解决同位检查码技术的缺陷而产生的一种新的内存纠错技术,它的英文全称是“Error Checking and Correcting”,对应的中文名称就叫做“错误检查和纠正”,从这个名称上大家就可以看出它的主要功能是发现并纠正错误。它比奇偶校正技术更为先进,这主要体现在它不仅可以发现错误,而且能够纠正这些错误,从而确保服务器的正常运行。而之所以说ECC不是一种内存型号,那是因为它并不是一种影响内存结构和存储速度的技术,它可以应用到不同的内存类型之中。

它也是在原来的数据位上外加位来实现的。如8位数据,则需1位用于Parity检验,5位用于ECC,这额外的5位是用来重建错误的数据的。当数据的位数增加一倍,Parity也增加一倍,而ECC只需增加一位,当数据为64位时所用的ECC和Parity位数相同(都为8)。在那些Parity只能检测到错误的地方,ECC可以纠正绝大多数错误。若工作正常时,你不会发觉你的数据出过错,只有经过内存的纠错后,计算机的操作指令才可以继续执行。当然在纠错时系统的性能有着明显降低,不过这种纠错对服务器等应用而言是十分重要的。

要了解ECC技术,就不能不提到Parity(奇偶校验)。在ECC技术出现之前,内存中应用最多的是另外一种技术,就是Parity(奇偶校验)。我们知道,在数字电路中,最小的数据单位就是叫“比特(bit)”,也叫数据“位”,“比特”也是内存中的最小单位,它是通过“1”和“0”来表示数据高、低电平信号的。在数字电路中8个连续的比特是一个字节(byte),在内存中不带“奇偶校验”的内存中的每个字节只有8位,若它的某一位存储出了错误,就会使其中存储的相应数据发生改变而导致应用程序发生错误。而带有“奇偶校验”的内存在每一字节(8位)外又额外增加了一位用来进行错误检测。比如一个字节中存储了某一数值(1、0、1、0、1、0、1、1),把这每一位相加起来(1+0+1+0+1+0+1+1=5)。若其结果是奇数,对于偶校验,校验位就定义为1,反之则为0;对于奇校验,则相反。当CPU返回读取存储的数据时,它会再次相加前8位中存储的数据,计算结果是否与校验位相一致。当CPU发现二者不同时就作出视图纠正这些错误,但Parity有个缺点,当内存查到某个数据位有错误时,却并不一定能确定在哪一个位,也就不一定能修正错误,所以带有奇偶校验的内存的主要功能仅仅是“发现错误”,并能纠正部分简单的错误。

工作原理


ECC(Error Correct Code,纠错码)是在原来的数据位上外加位来实现的,增加的位用来重建错误数据。在ECC纠错体系中,如果数据为n个字节,则外加的ECC位为log2n + 5。例如对于64位数据,需要外加log28 + 5 = 8个ECC位。

当出现一个存储位错误时,ECC体系可以自动进行纠错。当出现2个数据位错误时,可以检测出来,但不能纠错,这种行为通常称作“单错纠正/双错检测(Single Error Correction/Double Error Detection ,简称SEC/DED)。一次存取中有2个以上的数据位出错时,由于SEC/DED体系检测不出来了,致使数据的完整性受损。采用这种结构的存储器,当检测出多位错误时,系统就会报告出现了致命故障(Fatal fault),之后系统崩溃。

ECC指令纠错技术的特点


ECC内存的最大特点并不是因为它速度快(速度方面根本与ECC无关,只与内存类型有关),而是因为它具有特殊的纠错能力,可以使服务器保持长时间的稳定运行。

Chipkill技术:

我们知道ECC内存可以同时检测和纠正单一比特的错误,但如果同时检测出两个以上的比特错误,则一般无能为力。Chipkill技术正是IBM公司为了解决ECC技术的不足之处而开发的,是一种新的ECC内存保护标准。

IBM的Chipkill 技术是利用内存的子结构方法来解决这一问题的。内存子系统的设计原理是这样的,单一芯片,无论数据宽度是多少,只对于一个给定的ECC识别码,它的影响最多为一比特。举个例子来说明,如果使用4比特宽的DRAM,4比特中的每一位的奇偶性将分别组成不同的ECC识别码,这个ECC识别码是用单独一个数据位来保存的,也就是说保存在不同的内存空间地址。因此,即使整个内存芯片出现故障,每个ECC识别码也将最多只出现一比特的坏数据,而这种情况完全可以通过 ECC逻辑修复,从而保证内存子系统的容错性,使服务器在出现故障时,拥有更强大的自我恢复能力,使服务器的可靠性和稳定性得到更加充分的保障。

Register(寄存器或目录寄存器):

Register(寄存器或目录寄存器)被广泛的应用在服务器内存上,它在内存中的作用我们可以把它理解成书的目录,有了它,当内存接到读写指令时,会先检索此目录,然后再进行读写操作,这将大大提高服务器内存的工作效率。我们目前能见到的Register内存基本上都具有ECC功能。

基于各种各样的理由,PHP 的设置需要依赖于 register_globals

远程用户可以简单的传递 ''authenticated'' 作为表单变量,即使

authenticate_user() 函数返回 false,$authenticated 还是会设置成 true。这是一个简单的例子,你或许会说,我的程序不会这样来写。

而实际上,在稍微复杂一些的应用里面,这个机制就会成为重大的漏洞。

因此,新版本的 PHP ,我们建议用户不要采用这个变量来控制应用,虽然我们没有打算要在不久的将来删除。

为了帮助用户建立 register_globals 设置为 off 的应用,增加了一些变量来代替旧的,下面是7 个新的数组:

$_GET - 包含了通过 GET 发送的表单变量

$_POST - 包含了通过 POST 发送的表单变量

$_COOKIE - 包含了 HTTP cookie 变量

$_SERVER - 包含服务器端变量 (例如:REMOTE_ADDR)

$_ENV - 包含环境变量

$_REQUEST - GET 变量,POST 变量和 Cookie 变量的混合,通过用户而来而不能信任的变量。

$_SESSION - 包含通过会话模块注册的 HTTP 变量

这些变量,在任何范围内,都自动设置为全局变量,可以在任何地方调用,而不需要加 global 关键字。

例如:

function example1()

{

print $_GET["name"]; // 没有必要写成:''global $_GET;''

}

另外一个值得一提的小窍门是在 $_SESSION 数组中增加一个记录能自动作为会话变量注册,就像你调用了

session_register() 函数。

实际意义


内存是一种电子器件,在其工作过程中难免会出现错误,而对于稳定性要求高的用户来说,内存错误可能会引起致命性的问题。内存错误根据其原因还可分为硬错误和软错误。硬件错误是由于硬件的损害或缺陷造成的,因此数据总是不正确,此类错误是无法纠正的;软错误是随机出现的,例如在内存附近突然出现电子干扰等因素都可能造成内存软错误的发生。

为了能检测和纠正内存软错误,首先出现的是内存“奇偶校验”。内存中最小的单位是比特,也称为“位”,位有只有两种状态分别以1和0来标示,每8个连续的比特叫做一个字节(byte)。不带奇偶校验的内存每个字节只有8位,如果其某一位存储了错误的值,就会导致其存储的相应数据发生变化,进而导致应用程序发生错误。而奇偶校验就是在每一字节(8位)之外又增加了一位作为错误检测位。在某字节中存储数据之后,在其8个位上存储的数据是固定的,因为位只能有两种状态1或0,假设存储的数据用位标示为1、1、1、0、0、1、0、1,那么把每个位相加(1+1+1+0+0+1+0+1=5),结果是奇数。对于偶校验,校验位就定义为1,反之则为0;对于奇校验,则相反。当CPU读取存储的数据时,它会再次把前8位中存储的数据相加,计算结果是否与校验位相一致。从而一定程度上能检测出内存错误,奇偶校验只能检测出错误而无法对其进行修正,同时虽然双位同时发生错误的概率相当低,但奇偶校验却无法检测出双位错误。

ECC(Error Checking and Correcting,错误检查和纠正)内存,它同样也是在数据位上额外的位存储一个用数据加密的代码。当数据被写入内存,相应的ECC代码与此同时也被保存下来。当重新读回刚才存储的数据时,保存下来的ECC代码就会和读数据时产生的ECC代码做比较。如果两个代码不相同,他们则会被解码,以确定数据中的那一位是不正确的。然后这一错误位会被抛弃,内存控制器则会释放出正确的数据。被纠正的数据很少会被放回内存。假如相同的错误数据再次被读出,则纠正过程再次被执行。重写数据会增加处理过程的开销,这样则会导致系统性能的明显降低。如果是随机事件而非内存的缺点产生的错误,则这一内存地址的错误数据会被再次写入的其他数据所取代。

使用ECC校验的内存,会对系统的性能造成不小的影响,不过这种纠错对服务器等应用而言是十分重要的,并且由于带ECC校验的内存价格比普通内存要昂贵许多,因此带有ECC校验功能的内存绝大多数都是服务器内存。

认识误区


一谈到服务器内存,大家都一致强调要买ECC内存,认为ECC内存速度快,其实是一种错误地认识,ECC内存成功之处并不是因为它速度快(速度方面根本不关它事只与内存类型有关),而是因为它有特殊的纠错能力,使服务器保持稳定。ECC本身并不是一种内存型号,也不是一种内存专用技术,它是一种广泛应用于各种领域的计算机指令中,是一种指令纠错技术。

ECC比奇偶校正技术更先进的方面主要在于它不仅能发现错误,而且能纠正这些错误,这些错误纠正之后计算机才能正确执行下面的任务,确保服务器的正常运行。ECC内存即纠错内存,简单的说,其具有发现错误,纠正错误的功能,一般多应用在高档台式电脑/服务器及图形工作站上,这将使整个电脑系统在工作时更趋于安全稳定。

之所以说它并不是一种内存型号,那是因为并不是一种影响内存结构和存储速度的技术,它可以应用到不同的内存类型之中,就象在前讲到的“奇偶校正”内存,它也不是一种内存,最开始应用这种技术的是EDO内存,SD也有应用,而ECC内存主要是从SD内存开始得到广泛应用,而新的DDR、RDRAM也有相应的应用,主流的ECC内存其实是一种SD内存。

相关分词: 指令 纠错 技术