このサイトは、ほんの入り口です

ここにあるのは、だれかが実際に調べ、考え、作ってきたことを集めたメモです。気になったら、ページの下の「参考にした情報源」から、もとの本や記事、それを生み出した人たちに、直接ふれてみてください。このメモには書ききれないおもしろさが、そこにあります。

コンピューターの きおくは、なぜ 1000では なく 1024 なの?

1キロバイトはなぜ1000ではなく1024なのか ── 配線を1本足すと容量が2倍になる話

記憶容量が2のべき乗になる理由 ── アドレス線1本で2倍、1024と1000のずれ、1998年の二進接頭辞

分野:技術

コンピューターの 1キロバイトは、1000バイトでは なく、1024バイトです。ちょうど いい 数に したら よさそうなのに、なぜ ちゅうとはんぱな 数なのでしょう。

この メモでは、配線を 1本 ふやすと 場所が ちょうど 2ばいに なる わけと、手もとの きかいの 表しめしが ずれる わけが 分かります。

コンピューターの1キロバイトは、1000バイトではなく1024バイトのことが多くあります。最初に市販されたDRAM(1970年のIntel 1103)も、1000ビットではなく1024ビットでした[5]。

なぜ、こんな半端な数が使われるのでしょうか。メモリの場所を数える配線を1本足すと、数えられる場所がちょうど2倍になることが関わっています。この仕組みと、手元の機器で容量の表示がずれる理由が分かります。

1キロバイトは1024バイトと扱われることが多く、1970年に出た最初の市販DRAM、Intel 1103の容量も1000ビットではなく1024ビットだった[5]。

この半端な数は、アドレス線を1本足すと区別できる場所がちょうど2倍になる、という性質から出てくる。この仕組み、チップの世代が4倍ずつ進んだ経緯、1998年に決まった二進接頭辞(キビ・メビ・ギビ)が、容量表示のずれにどう関わるかが分かる。

読み方を切り替えられます。画面の上にある「よみかた」のボタンで、小学校低学年むけ・小学校高学年むけ・中学生むけの3つの書き方に切り替わります。むずかしいと思ったら、いつでもやさしい方に戻ってください。選んだ読み方はブラウザが覚えているので、次に別の記事を開いたときも同じ読み方で始まります。

1. 配線を 1本 ふやすと、場所は どう ふえる?

1. 配線を1本足すと、区別できる場所は何倍になるか

1. アドレス線の本数と区別できる場所の数 ── n本で2のn乗

メモリは、小さな 場所が たくさん ならんだ ものです。コンピューターは、どの 場所を 使うか、番号で 決めます。その 番号を つたえる 線が、アドレス線です。

コインを 1まい 思いうかべて ください。おもてか うらかで、2とおりです。2まいなら 4とおり、3まいなら 8とおり。1まい ふやす たびに、ちょうど 2ばいです。

アドレス線は、このコインに にて います。線が 1本 ふえると、見わけられる 場所は 2ばいに なります。10本なら、2を 10回 かけて 1024です[1]。ただし 本当の 線は、コインでは なく、電気が ある・ないで 0と 1を つたえます。

メモリは、小さな記憶の場所(番地)がずらりと並んだものです。CPUは、どの場所を使うかを、番号で指定します。その番号を送る線がアドレス線で、1本の線は「電気が流れている/いない」の2つの状態を表せます。

コインを考えると分かりやすくなります。1枚なら表か裏かの2通り、2枚なら4通り、3枚なら8通りです。1枚増やすたびに、組み合わせはちょうど2倍になります。

アドレス線も同じで、n本あれば2のn乗個の場所を区別できます。32本なら4,294,967,296個です[1]。線を1本足すだけで、扱える場所は2倍になります。

では、この「2を何回かかけた数」が、なぜメモリの大きさそのものになったのでしょうか。

メモリは番地の付いた記憶場所の集まりで、CPUは番地をアドレス線の信号の組み合わせで指定する。1本の線は高低2つの状態を取れるため、n本あれば区別できる場所は2のn乗個になる。32本なら2の32乗、つまり4,294,967,296個で、線を1本足せばちょうど2倍になる[1]。

32ビットのアドレスを出すCPUが扱えるメモリ空間は4Gバイト(2の32乗バイト)になる[2]。アドレスの幅が、扱える空間の大きさを決めている。では、なぜ実際のメモリ容量までが2のべき乗に揃ったのか。

2. なぜ 2ばいずつの 大きさに なったの?

2. メモリの大きさが2のべき乗に揃っていった理由

2. 1960年代なかば以降、主記憶が2のべき乗になった経緯

1000ばんの 場所だけ ほしくても、線は 10本 いります。10本で 1024ばんまで 作れるので、のこりの 24ばんは むだに なってしまいます。

それなら、1024ばん ぜんぶを 使う ほうが しぜんです。線の ならびかたを ぜんぶ 番号に すれば、すきまなく 使えますし、つなげて 大きく する ことも かんたんです[3]。

1960年代の なかばには、こうした 2しんの 番号づけが ほとんどの コンピューターの きまりに なって いたと いわれます。2倍の ルールが あった わけでは なく、そう する ほうが しぜんだったのです。

メモリを1000個の場所だけにしたいときも、アドレス線は10本必要です。10本あれば1024個まで区別できるので、残りの24個は使われないまま残ります。

それなら、線の状態の組み合わせをすべて有効な番号にして、1024個ぜんぶを使うほうが無駄がありません。連続した番号のまま、メモリを大きなかたまりにつなげやすい利点もあります[3]。

資料によれば、1960年代なかばまでに、二進のアドレス指定がほとんどのコンピューター設計の標準になり、主記憶の大きさは2のべき乗が一般的になりました[3]。「2倍にする決まり」があったのではなく、そうするのが設計上自然だった、という説明です。

こうして容量が1024、2048、4096と並ぶようになると、1024に名前をつけたくなります。そこで使われたのが「キロ」でした。

仮に1000個の番地だけが必要でも、アドレス線は10本要り、10本では1024個まで指定できるため24個が余る。線の状態の組み合わせをすべて有効な番号にすれば無駄がなく、番号を連続させたままメモリを大きなかたまりに連結しやすい[3]。

この事情から、1960年代なかばまでに二進のアドレス指定が大半のコンピューター設計の標準となり、主記憶の大きさは2のべき乗が一般的になった[3]。ただし、これは設計上そうするのが自然だったという説明であり、容量を2倍にせよと定めた法則があったわけではない。

3. 1024を、なぜ「キロ」と よんだの?

3. 1024に「キロ」の名前がついた経緯

3. SI接頭辞「キロ」が1024の意味で使われはじめた経緯

「キロ」は 本来 1000の ことです。1キロメートルは 1000メートルですね。

コンピューターの 人たちは、2を 10回 かけた 1024が、1000に とても 近い ことに 気づきました。そこで、1024の ことも 「キロ」と よぶ ように なりました[4]。1964年の IBM 360の しりょうなどでも 使われたと いわれます[3]。

ところが、これが ややこしさの はじまりでした。物理や 工学の 人たちと 話すとき、「キロ」が 1000なのか 1024なのか、わからなく なって しまったのです[4]。

「キロ」は、メートルやグラムでは1000倍を表す言葉です。ところが、コンピューターの専門家たちは、2の10乗の1024が1000にほぼ等しいことに気づき、「キロ」を1024の意味で使いはじめました[4]。

IBM 360(1964年)の資料などで広く使われ、大文字のKで二進の意味を示すこともあったとされます[3]。

便利な呼び方でしたが、同じ「キロ」が分野によって1000にも1024にもなるため、物理学者や技術者との意思疎通で問題になりました[4]。

このずれは、のちに手元の機器の表示にまで顔を出します。その前に、メモリそのものがどう大きくなったのかを見てみましょう。

SI接頭辞のキロは本来10の3乗を表す。しかしコンピューター分野の専門家は、2の10乗=1024が1000にきわめて近いことに気づき、キロを1024の意味で使いはじめた[4]。IBM 360(1964年)の資料などで広く使われ、大文字のKで二進の意味を示す例もあった[3]。

便利な近似だったが、同じ接頭辞が分野によって1000にも1024にもなるため、物理学者・技術者との意思疎通で混乱が生じた[4]。この食い違いも、後述する容量表示のずれに関わる。

4. チップの きおくできる 量りょうは、4ばいずつ 進んだの?

4. メモリチップは約3年で4倍ずつ大きくなった

4. DRAMの集積度は約3年で4倍 ── 1K・4K・16Kの世代

1970年に、1024ビットの 記おく チップ「Intel 1103」が 発売されました。世界で はじめて 売られた DRAM です[5]。1ビット 1セントの ねだんで、それまでの じきコアメモリに 本気で 勝負を しかけた さいしょの はんどうたいチップでした[6]。

それから やく30年、DRAMチップの きおくできる 量りょうは、およそ 3年で 4ばいの ペースで ふえたと つたえられて います[7]。そのあと 4096ビット、16384ビットの チップが 作られました[8]。

4ばいは、2ばいを 2回 くりかえした ことです。ちょうど コインを 2まい ふやした ことに なります。ただし いつも きっちり 3年だった わけでは なく、「およそ」の 話です。

1970年10月に発売されたIntel 1103は、世界で初めて市販されたDRAMで、1024ビットの記憶容量を持ちました[5]。1ビット1セントという値段で、それまで主役だった磁気コアメモリに本格的に挑んだ最初の半導体チップです[6]。

その後、DRAMの集積度は約30年のあいだ、おおよそ3年で4倍のペースで増えたと、コンピュータ歴史博物館は述べています[7]。たとえばMostek社は4Kビット、続いて16Kビットのチップを作りました。16Kには、IBMが1967年に取った特許の、トランジスタ1個のセルが使われました[8]。

1Kから4K、4Kから16Kへは、どちらも4倍です。4倍は2倍を2回かさねたことですから、コインを2枚増やすのと同じで、アドレス線にすると2本ぶんです。ただし、毎回きっちり3年だったわけではなく、あくまで「おおよそ」のペースです。

なお、よく聞く「ムーアの法則」は、半導体全体の部品数が約2年で2倍になる、という話で、メモリ容量の法則そのものではありません[9]。数字も別ものです。

Intel 1103(1970年10月)は世界初の市販DRAMで、構成は1024×1、18ピンだった[5]。ジョエル・カープらの設計で、1ビット1セントの価格により、磁気コアに本格的に挑んだ最初の半導体チップとなった[6]。

コンピュータ歴史博物館によれば、技術の進歩と国際競争が重なり、DRAMの集積度は約30年にわたり、おおよそ3年で4倍の割合で増えた[7]。具体的には、Mostekが4Kビット、続いて16Kビットを作った。4Kのチップでは、アドレスピンを共用する多重化で16ピンに収め、16Kは、IBMの1967年の特許にある1トランジスタのセルを利用した[8]。

1K→4K→16Kの各段は4倍、すなわち2倍を2回かさねた形で、アドレスのビット数でいえば2ビットぶんの増加にあたる。ただし「毎回きっちり」ではなく概数である。なぜ世代ごとが2倍でなく4倍なのかを説明する設計上の理由は、今回の資料からは述べられない。

よく並べられるムーアの法則は、1965年に部品数が約1年で2倍と述べたのち、1975年に1980年ごろまでは毎年倍、その後は約2年で2倍と改められたもので、半導体全体の集積度の話である[9]。DRAMの「約3年で4倍」と無理に一致させない。

5. パソコンの 表しめしが 少し ちがうのは なぜ?

5. 買った容量と表示がずれるわけ

5. メガバイトの二つの意味と、二進接頭辞

パソコンや スマホで、「買った はこには 500 と 書いて あるのに、画面では 少なく 見える」と 思った ことは ありませんか。

ふつうの メーカーは、メガバイトを 2の 20乗、1,048,576バイトの 意味で 使います。ところが、データを しまう きかいの メーカーは、ふつう 1,000,000バイトの 意味で 使います[4]。どちらが まちがい、という わけでは なく、同じ ことばに 2つの 意味が あります。これも、ずれて 見える 理由の 一つです。

そこで 1998年12月に、国さいてきな きまりを 作る IEC が、1024の ための 新しい 名前を 決めました。1024バイトは「キビバイト」、1000バイトは「キロバイト」と 分けて よびます[4]。2の 20乗は「メビ」、2の 30乗は「ギビ」です。

パソコンやスマホの容量が、箱に書かれた数字より少なく表示されて、不思議に思った人もいるかもしれません。

NISTによると、ほとんどのメーカーはメガバイトを2の20乗=1,048,576バイトの意味で使いますが、記憶装置のメーカーは通常1,000,000バイトの意味で使います[4]。どちらかが間違っているのではなく、同じ言葉に二つの意味があります。表示がずれる理由の一つは、この単位の基準の違いです。

この混乱を解くため、IEC(国際電気標準会議)は1998年12月に、二進の倍数に新しい接頭辞を承認しました。2の10乗がキビ(Ki)、2の20乗がメビ(Mi)、2の30乗がギビ(Gi)です。キビバイトは1024バイト、キロバイトは1000バイトと、はっきり分かれます[4]。

NISTは、多くのメーカーがメガバイトを2の20乗=1,048,576バイトの意味で使う一方、記憶装置のメーカーは通常1,000,000バイトの意味で使う、と説明する[4]。これが、箱の容量と画面表示のずれに関わる理由の一つである。どちらかが誤りなのではなく、単位の意味が異なる。

この曖昧さを解消するため、IEC(国際電気標準会議)は1998年12月に二進接頭辞を承認した。2の10乗=キビ(Ki)、2の20乗=メビ(Mi)、2の30乗=ギビ(Gi)であり、KiBは1024バイト、kBは1000バイトを表す[4]。国際標準としては、1000を表す記号と1024を表す記号が区別されている。

6. 手もとで たしかめて みよう

6. 手元で確かめてみよう

6. 自分で確かめるために

やってみよう。10まいの コインが あれば、おもてと うらの ならびは 全部で 何とおりか、1まい 2まいと ふやして かぞえて みましょう。10まいで 1024とおりに なります。

おうちの 人に たのんで、パソコンや スマホの 設定せっていで、ストレージの 全体の 容量ようりょうを 見て みましょう。はこや 本に 書いて ある 数字と くらべると、ほんの 少し ちがうかも しれません。

やってみよう。10枚のコインを使って、1枚、2枚、3枚と増やしたときの表裏の並び方の数を書き出してみましょう。2、4、8、16と倍々になり、10枚で1024通りになります。

もう一つ。家のパソコンやスマホの設定画面で表示される「ストレージ」の容量を見て、箱や説明書に書かれた数字と比べてみましょう。ほんの少しずれていたら、その理由の一つはこのメモの5章にあります。

箱の「GB」の表記と、設定画面に出る数字の両方を、紙に書き写して見比べてみましょう。

確かめ方として、10枚のコインの表裏の並びを1枚ずつ増やして数えると、2、4、8…と倍になり、10枚で1024通りになることが体験できる。手元の機器のストレージ表示と、箱や仕様書の記載容量を比べ、ずれがKiB(二進)とkB(十進)の違いで説明できるか考えるのもよい。

一次資料としては、NISTの「Prefixes for binary multiples」が、二進接頭辞の定義を示す[4]。Computer History Museumの記憶装置の年表は、1103からDRAMの世代交代までを見せてくれる[8]。

しらべた もとの じょうほう

参考にした情報源

参考にした情報源と、その使い方

このメモで使った資料です。事実の確認に使ったものだけを並べています。

  1. Wikipedia「Address bus」 https://en.wikipedia.org/wiki/Address_bus (アドレス線の本数と場所の数)
  2. EE Times Japan「メモリ・アドレス解説」 https://eetimes.itmedia.co.jp/ee/articles/1602/26/news026_2.html (32ビットアドレスと4Gバイト)
  3. Wikipedia「Binary prefix」 https://en.wikipedia.org/wiki/Binary_prefix (2のべき乗の定着と「キロ」の使われ方)
  4. NIST「Prefixes for binary multiples」 https://physics.nist.gov/cuu/Units/binary.html (キロの意味のずれ・メガバイトの二つの意味・二進接頭辞)
  5. Wikipedia「Intel 1103」 https://en.wikipedia.org/wiki/Intel_1103 (最初の市販DRAMの容量と構成)
  6. Computer History Museum「Storage Engine 1970」 https://www.computerhistory.org/storageengine/semiconductors-compete-with-magnetic-cores/ (1103と磁気コアの競争)
  7. Computer History Museum「MOS DRAM」 https://www.computerhistory.org/revolution/memory-storage/8/368 (集積度が約3年で4倍)
  8. Computer History Museum「Memory & Storage」 https://www.computerhistory.org/revolution/memory-storage/8/311 (4Kと16KのDRAM)
  9. Wikipedia「Moore's law」 https://en.wikipedia.org/wiki/Moore%27s_law (ムーアの法則との違い)

なおした ところ

更新履歴

更新履歴(改版の記録)

  •  初版を公開。

このサイトでは、公開した記事の本文は原則として書き直しません。誤りが見つかったときや、内容が古くなったときだけ手を入れ、その理由をこの欄に残します。