對於計算機專業的童鞋來說,大概對計算機存儲單位換轉換不算陌生,但是往往有力不從心總是感到迷迷糊糊。原因是不同書本、不同領域對他們的定義不盡相同。比如,計算機網絡中1Kb=1000b,而操作系統和計算機組成原理中卻用1Kb=1024b,1Mb=1024Kb 。。。,一般來說軟件廠商如微軟用1024,硬件廠商用1000。
文章:http://news.csdn.net/n/20071030/110069.html(轉)
詞頭加在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,0
硬盤廠商將1GB定義為1,000,000,000B的常規做法又一次成為了爭論的焦點。為了幫助對此有疑惑的網友搞清楚一些容易混淆的背景情況,草成此短文。水平有限,如有錯誤或是火星之處還請口下留情。
先明確一個關鍵問題,什么是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,都是大家所熟悉的用法。24K金那個K和SI可沒關系,24K的K也不是詞頭,因為后面沒有單位。
回到正題上來,雖然B並不是SI單位,但考慮到SI前綴不應用於2的冪次的明確要求,此處1GB應該是10^9B=1000*10^6B=1000MB。從這個意義上來說,硬盤廠商的標注沒有錯。
那么經常聽到的1GB=1024MB的說法是怎么來的?這就要從計算機的童年時代說起。
起先計算機的存儲容量低到可憐,幾千個Byte算是很奢侈的容量,由於計算機的二進制特性,這個容量通常是2的整數次冪,用起來不方便。IT工程師們發現 2^10=1024與k=10^3接近,相差不過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的 PCI在一個周期內可以傳輸4Byte,帶寬也就成了133.3MB=133.3*10^6B。更有甚者還有混着用的:1.44MB軟盤的容量是奇怪的 1474560B。80柱面*2磁頭*18扇區一共是2880個512B的扇區,於是就被叫成了1.44MB。如果我買了一台電腦擁有2.4GHz的 CPU/2GB的內存/320GB的硬盤/雙GbE,那么這4個G中,唯獨第2個的含義與眾不同。
看來當初的偷懶做法和造成千年蟲問題的節約搞法一樣愚蠢是么?確實如此。
為了解決這個混亂的局面,還是有人做過努力。早在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詞頭回復原來的含義,表示2冪次重任就交給了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這幾個普普通通的字母帶來的混亂,還會持續多久呢?