硬盘厂商将1GB定义为100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B传统的做法再次成为争论的焦点。为了帮助那些对此感到困惑的网民找出一些令人困惑的背景,草成了这篇短文。水平有限,如有错误或火星,请留下深情。
首先明确一个关键问题是什么G,什么是M?
G和M是国际单位制(SI)中规定的词头(prefix)。词头加在SI单位(非SI单位也可以使用并通常遵循此用法)之前表示10的整数幂次,譬如k表示10^3=1000,M表示10^6=1,000,000,G则表示10^9=1,000,000,000.
举些例子,1kg=1000g,1km=1000m,1GeV=1,000,000,000eV=1,000MeV,大家都熟悉用法。K金那个K和SI可没关系,24KK不是词头,因为后面没有单位。
回到正题,虽然B不是SI单位,但要考虑SI前缀不应用于2的幂次的明确要求,此处1GB应该是10^9B=1000*10^6B=1000MB。从这个意义上说,硬盘制造商的标签没有错。
所以经常听到的1GB=1024MB说法是怎么来的?这要从计算机童年开始。
起初,计算机的存储容量低到可怜,成千上万Byte这是一个非常豪华的容量,由于计算机的二进制特性,这个容量通常是2的整数功率,使用起来不方便。IT工程师们发现了 2^10=1024与k=10^接近,相差只有2%。所以有人偷懒以1kB表示2^10B也就是1024B,一开始似乎一切都好,2%的差距不大,时间长了大家都会接受。
但问题是,根据摩尔定律,计算机的存储容量(Moore’s Law)随着指数的增长,这种差异会越来越大。1kB与1KiB(稍后解释)相差只有2%,1MB与1MiB相差近5%,1GB与1GiB相差7%,1TB和 1TiB差了10%。可以预见,随着硬盘容量的进一步扩大,希捷为这些字母复杂多变的含义提起了越来越多的诉讼。
今天,在IT业内形成了以下混乱局面:
CPU制造商在计算频率时认为1GHz=10^9Hz,内存制造商认为1GB=2^30B,硬盘/闪存是1GB=10^9B,微软坚持认为1GB= 2^30B。通信工程师认为千兆以太网的位速是1Gbit/s=10^9bit/s,32bit 33.3MHz的 PCI4可以在一个周期内传输Byte,带宽也变成了133.3MB=133.3*10^6B。更何况还有混用:1.44MB软盘的容量很奇怪 1474560B。80柱面*2磁头*共有2888个512扇区B扇区被称为1.44MB。如果我买了一台电脑,有2台.4GHz的 CPU/2GB的内存/320GB的硬盘/双GbE,所以在这四个G中,只有第二个同的含义。
看来最初的懒惰做法和造成千年虫问题的节约做法一样愚蠢,对吧?
有些人努力解决这种混乱局面。早在1998年SI手册中明确要求SI词头不应用于2的幂次。同年,国际电工委员会(IEC)推出了一套适合2进制的词头,得到了IEEE的批准 (IEEE 1541)-但这仍然是一个试用标准。简单来说就是在SI词头后加"i"。比如k就成了Ki,M成了Mi,G成了Gi。发音把原来SI词头的第二个音节被替换为[bi]。譬如Ki念 [kibi],Mi念[mebi],Gi则是[Gibi]等等,等等。这样,kMG之类的的SI词头回复原意,说明二幂次重任交给了Ki= 2^10=1024,Mi=2^20=1048576,Gi=2^30=1073741824等等。这样,当一台一台电脑是3时.15GHz CPU/2GiB内存/320GB硬盘时,G/Gi含义没有歧义。
很简明易懂的解决方案,然而很不幸似乎买IEC账目真的不多,目前支持的也不多。IEC词头软件屈指可数——可喜包括Linux核心。更糟糕的是1G= 1024M这种传统的错误观念已经根深蒂固。如果到2000年,千年虫问题基本结束,kMGTP这些普通字母带来的混乱会持续多久?