(本文約4900字,預計閱讀時間12分鐘)
引言
前段時間,遇到一個有趣的問題,1GB究竟等於1000MB還是1024MB?究竟誰纔是對的?這個問題很有趣,最近週末翻了翻資料研究了一下,寫一點內容分享給大家。
首先回答標題的問題,相信很多小夥伴已經可以對答入流了。硬盤製造商標識硬盤容量的時候用的是10進制,即
而windows計算硬盤容量採用的是2進制,即:
如此一來,我們就可以得到廠商標識的1TB容量在Windows眼裏就應該是
雙方用的計算方法不同,那得到的結果自然就不同了。
但是如果有使用其他操作系統的小夥伴發現,在Mac OS以及linux的某些發行版中1TB的硬盤就被顯示爲了1TB。
那麼問題來了,爲什麼同樣的符號,卻有截然兩種不同的規則呢?究竟是硬盤偷工減料還是windows搞錯了呢?
這個問題究竟是怎麼來的?
在20世紀60年代和70年代,隨着計算機技術的發展,工程師和科學家開始普遍採用二進制系統來解決計算問題。而衆所周知,計算機底層是採用二進制的。而2的十次方爲1024,這個數與1000接近,因此早期計算機科學家和工程師在系統設計中逐漸採用1KB = 1024B的定義,MB、GB和TB亦然。隨着技術的發展,這一定義在行業內得到了廣泛接受,併成爲計算機存儲容量和數據處理的基本單位之一。包括一些早期的行業標準中,也是如此規定的。
但是~但是~但是~採用這樣一個定義存在一個非常易燃易爆炸的雷。
k、M、G、T這些我們通常稱爲(量化)詞頭。以k爲例,k是kilo-的縮寫,這是英文中從希臘語借用的詞根,就是千的意思,如千克——kilogram(kg)、千米——kilometre(km)。這些詞頭在計算機引入以前在其他領域以及日常生活中已經廣泛採用了。換言之,只有在計算機系統中,對上述詞頭進行了與衆不同的量化表示。如果你是強迫症,聽到這裏估計要起雞皮疙瘩了。
如果,你沒有強迫症,或許沒有體會到怪在哪裏。那讓我翻譯成中文表達來體會一下:一千米表示1000米,一千克表示1000克,但是,一千字節表示1024字節。這TM也太78怪了!!!對吧????
顯然,計算機相關領域的專家們也意識到了這一個問題,如果這樣定義,日後必定會出現歧義。而生活在現在的我們已經知道了,這個導致的歧義不僅有,還很大。市面上對GB定義不清、各種混用的情況比比皆是,搞得大家頭都大了。
既然GMK已經有定義了,那換一個符號表示不就行了嘛?
是的,先前的工程師們就是這麼想的。1988年,國際電工委員會(IEC)發佈了國際標準 IEC 60027-2,該標準定義了以二進制爲基礎的單位,以便於在計算機科學和信息技術領域中更清晰地表示數據存儲容量。
IEC引入了一套新的量化詞頭,包括:
Kibibyte (KiB): 1 KiB = 2^10 字節 = 1024 字節
Mebibyte (MiB): 1 MiB = 2^20 字節 = 1,048,576 字節
Gibibyte (GiB): 1 MiB = 2^30 字節 = 1,073,741,824字節
Tebibyte (TiB): 1 TiB = 2^40 字節 = 1,099,511,627,776 字節
Pebibyte (PiB): 1 PiB = 2^50 字節 = 1,125,899,906,842,624 字節
GiB,全稱Gibibyte,是giga binary byte的縮寫。其中binary就是二進制的意思。其他單位也同理,這些詞頭專門用來表示1024進制。
現在我們有新的單位詞頭來表示1024進制了,而原來的KMG,還是還回去讓它們繼續表示十進制詞頭吧。
寫到這裏,我需要做一點補充說明,IEC對GB和GiB的重新定義不涉及任何技術問題!!!!我看到有很多人有誤解,覺得“計算機是二進制的,1GB就應該表示1024MB。計算機中進位用1000簡直就是異端”。
其實不是這樣的,這些新標準不是技術標準,他們的核心僅僅是:當我進行書面表達時,需要一個詞頭來表示1000或1024(及更高進位),寫成什麼符號更合適。
IEC的新標準可以非常好的解決該歧義的問題,同時也得到了其他衆多組織和標準的支持。
2000年,國際標準化組織(ISO)在其標準 ISO/IEC 80000-13:2008引入了上述前綴,2005年,電氣和電子工程師協會(IEEE)在其標準 IEEE 1541-2002 中引入了上述前綴。
上述組織在計算機乃至多個領域內都是鼎鼎大名的,具有非常廣泛且強大的國際影響力,有計算機專業背景的同學肯定都很熟悉。
有這麼多組織推動,看來解決歧義問題勢在必得了.......嗎?
新詞頭的推廣有着無盡的阻力
儘管,衆多行業龍頭組織出臺了一系列標準試圖解決GB的歧義問題,但人的習慣哪會說改就改的。
在計算機誕生後的一段時間裏,1024進制就是該領域不爭的事實標準。而後的很長時間,GB的混用問題持續存在,直到如今。而在此期間,各種資料書籍等持續影響着後來人。時至今日,很多大學生上課接觸到的課程和課本依舊是1024進制。
尤其是堪稱國民級操作系統的Windows OS,在表示內存和硬盤的時候也是用1024進制來計算的。而windows對廣大用戶的潛移默化的影響力,可能比一些行業龍頭的一張白紙要大的多。
而現代的的一些linux發行版,以及Mac OS(在版本10.6 Snow Leopard之後),都對該問題進行了更標準化的表達。因此也出現了一些比較極端的觀點,認爲Windows對新行業標準的支持不夠積極是導致如今詞頭混亂的罪魁禍首。至於爲什麼Windows沒有積極響應,是技術還是意願那就不得而知了。
但話說回來,windows真的沒有遵守行業標準嗎?
標準不是你幾個組織就說了算的
雖然很多行業標準對該問題進行了定義,那有沒有行業標準依舊保持1GB=1024MB的定義嗎?還真有。
聯合電子設備工程委員會(JEDEC)2002年發佈了100B.01標準“微型計算機、微處理器和存儲器集成電路的術語、定義和字母符號“,該規範依舊引用了KMG作爲1024進制的三個前綴。
可能會有朋友不認識這個組織,覺得什麼野雞組織也配亂下定義。實則不然,大家耳熟能詳的內存標準DDR就是該組織發佈的。該標準化組織在半導體工業界,尤其是內存和固態等領域也是有着十足的影響力的。如此看來,對於硬盤內存的容量表達,似乎JEDEC的標準纔是正統啊?
哎,話又說回來啊。100B.01標準中也提到“這種做法(指KMG等詞頭)經常導致混淆並被棄用”,引入這些前綴只是爲了“反映常見用法”,他們也推薦了IEC標準中的二進制字母符號,用於替代舊的詞頭。
只不過,二十多年過去了,JEDEC再也沒出臺新的標準對詞頭使用進行明確約束,100B.01標準是該組織最後一次對詞頭進行明確表態。這麼看來,內存、硬盤遵守1024進制似乎也是情有可原。
哈哈哈怎麼可能呢,別忘了標題,就是硬盤廠商採用了1000進制的計算纔有今天這篇文章。小弟們沒一個聽話的,真正遵守規範的反而是windows。也確實,對於硬盤廠商而言,同樣寫成1GB,採用1000進制的標準,既很多有行業標準的支持,又節省了成本,何樂而不爲呢?
在這裏再扯遠一點,有人應該還會好奇,包括我,內存應該還是遵循JEDEC標準的吧?
讓我來打開電腦看一看,我電腦上插了兩條8+16”GB“內存。用相關工具輸出一下:
雖然各個工具輸出的具體值有所差異,但顯然識別到的內存容量是顯然高於24*10^9的,而且考慮到可能有少量內存被BIOS和kenel內核保留而未被正確識別,內存中GB確實是遵循JEDEC標準的二進制的。其中lshw工具爲了避免理解有誤,非常貼心的採用了GiB的輸出,free工具也可以通過參數指定不同的單位,這點好評!
混亂,混亂,還是***混亂
蒐集資料的時候,發現了一些好(wu)玩(yu)的事。
在美商海盜船的官網有一篇文章,文中對二進制詞頭和十進制詞頭進行了明確的解釋,並且對混用現象表達了無奈。“你會經常看到“Megabyte ”或簡稱 MB,指的是 1,000,000 字節或 1,048,576 字節中的一個,但卻不知道是哪一個。”
有意思的是,美商海盜船其官網描述其內存的時候至今仍然用的是GB單位,左腦和右腦博弈了屬於是。
類似的案例還有金士頓,金士頓在官網的內存術語表中也對GB爲10進制單位進行了明確表述。有條件的小夥伴可以查查看金士頓和海盜船的”xGB“內存究竟是GB還是GiB。
混亂遠不止於此!!上述內容還能歸結爲單位不統一,但下面這個真的可以讓強迫症噶過去了。
應該有的小夥伴在買硬盤的時候也遇到過,一個1TB的硬盤,Windows顯示953GB。這又是怎麼回事呢?
原來該廠商是這樣計算的:1TB=1024GB,但是1GB=1000MB=1000^2kB=1000^3Byte。也就是一個硬盤同時混用了1000進制和1024進制!!!
混亂,太TM混亂了。
這麼多標準,就沒一個能頂事的嗎?
前面的內容中,我們提到了很多國際組織和標準,有人會有疑問,“這些標準誰大誰小”、“誰能管的住誰”、“誰更具權威”等。其實這些標準都不是強制執行的,也不存在包含和剋制關係。這些標準都是各組織在各自領域希望推動行業規範化的一些“倡議”,甚至歷史上,行業不響應“倡議”把標準推翻的例子也屢見不鮮。
那麼問題來了,就沒有一項標準是強制執行的嗎?其實還真有。
國際計量大會(CGPM)採納和推薦的一貫單位制——國際單位制(SI),是現時世界上最普遍採用的標準度量衡單位系統。比如,大家學物理肯定知道的七個基本物理量:長度(米)、質量(千克)、時間(秒)、電流(安培)、熱力學溫度(開爾文)、物質的量(摩爾)和發光強度(坎德拉)。我們現在所採用這些物理量的單位,米啊、千克啊、秒啊等等,遵循的就是國際單位制。
那該標準和其他行業標準有何區別呢?區別就在於,很多國家在政府文件引入了國際單位制(SI),也就意味着該標準是受法律保護的。以中國爲例,在《中華人民共和國國家標準GB3100-93》文件中,明確了國際單位制及其應用的規範。
那麼國際單位制是如何對詞頭進行定義的呢?國際單位制詞頭如下定義。
雖然國際單位制並沒有引入Gi、Mi等詞頭,但對kMG等詞頭的使用進行了約束。按照規範,1GB=1000MB=1000^2kB=1000^3B是沒問題的。換言之,如果因爲用GMK表示1024進製造成糾紛或其他不良影響的,可能會存在潛在的法律風險。
不過在我國的國家標準中有一條補充:有些國際單位制以外的單位,可以按習慣用SI詞頭構成倍數單位。顯然,計算機中的各種信息量的單位屬於國際單位制之外的範疇,這個“按習慣”還是給了一定的空間。我也沒查到有關該爭議的判決文書,所以從具體執行方面講,依舊算是灰色狀態。
結語
綜上所述,這個問題是一個持續已久的歷史遺留問題。我寫這篇文章,也並不是想對Windows指責,更不是爲硬盤廠商洗白。希望能幫大家理清一個詞頭混用問題的歷史發展脈絡,以及爲了解決該問題的一些方案和趨勢。
目前GB依舊處於混用的狀態。在日常常接觸到的地方,其表示二進制詞頭的地方主要包括內存廠商對內存的標註和Widows對硬盤和內存容量的計算。其他方面,比如硬盤廠商對硬盤容量的標註、安卓(存疑)和蘋果系統對容量的計算,以及網速帶寬等地方出現的詞頭G,多是十進制的。
從我個人來講,還是希望二進制詞頭能夠普及的。從用戶的角度,普及二進制詞頭可以很好的避免單位混淆帶來的困惑;對廠商而言,普及二進制詞頭同樣可以得到更加廣泛的行業支持。這本就是一件雙向奔赴的事。
只是出於歷史慣性,想要在大衆中普及,絕非一朝一夕的事。可以預見,我們還要在這種混亂的狀態下,掙扎很久......
更多遊戲資訊請關註:電玩幫遊戲資訊專區
電玩幫圖文攻略 www.vgover.com