2009年9月5日土曜日

パソコン昔話1(なぜ、1バイトは8ビット?)

きのう、新人の男の子に昔話をしました。彼は、コンピュータ関連の学科を出ましたが、コンピュータの昔話(「なぜ、パソコンを起動するときにブートと言うのか」、「パリティビットがなぜ有効なのか」など)については、大学で話を聞いたことが無いようで、大変、興味を持ってもらいました。現在の当たり前のように使われているパソコンでも、昔からの歴史を知ることによって、より理解が進むのではないでしょうか?

そこから、1つ思い出したので、ここで一つ話します。どうして1バイトが8ビットかと言うことです。これは、Wikipediaにも書いていましたので、参考に見ていただくと良いかもしれません。(参考)
コンピュータ内部ではオン/オフを示すbitを処理する回路で構成されます。データを取り出すためには、それぞれのビットを取り出すのではなく、まとまった単位で取り出す方が効率的です。そこで、CPUは、何らかの単位でビットの集まりを取り出して、アキュムレータやレジスタと呼ばれる演算器へ送られ、そこで、演算を行ってメモリに格納します。この基本単位がバイトとなります。CPUは、ビットが集まって作られているCPU命令を基に動作します。この命令もメモリに格納されていますので、CPUが解釈する命令もバイトの倍数となります。

昔は、メモリも十分に無かったので、表現が必要なパターンがバイトで表現できるようすることが、効率的にコンピュータを利用することになります。このため、昔のコンピュータでは、アドレスの単位が6bitのコンピュータもありました。有名なコンピュータは、PDP-11です。PDP-11は、1バイトが6ビットでした。HPのホームページには、PDP-11開発談があります。その中には、開発者のケンオルセンの話が以下のようにあります。
「その当時必要とされていたデータは6ビットでいろいろな文字コードや制御コードを表現していたんだよ。」
ちなみに、UNIXで8進数表現がある点もPDP-11の命令を表現し易かった事が理由であると思います。

しかし、処理する文字が英語の大文字小文字や特殊記号など増えてくるのに従って、6ビットでは足りなくなってきました。英語大文字+英語小文字+数字を表現するだけで26+26+10=64パターン必要です。64パターンを表現するには、6ビット必要となります。さらに、プラスやマイナス等の特殊記号を表現させるために、最低でも7ビット必要となります。
7bitで1バイトでも良いのですが、通信用のパリティビットを表現させたりするために、プラス1ビットを追加した8ビットが1バイトとなりました。

将来は、処理する文字コードを全世界で対応できるunicodeにするなどして、1バイトが16ビットになるかもしれませんね。

4 件のコメント:

  1. 分かりやすかったです。気になりますがなかなか訊けないので、とてもすっきりしました。ありがとうございました。

    返信削除
  2. 私の受けているパソコンの授業では、8bit=1Bが当たり前の定義のように扱われていたので、疑問が解消できて本当に良かったです。ありがとうございます。

    返信削除
  3. この記事をリンクさせて頂いています。
    https://qiita.com/yaju/items/c5da6df2221d5c3611e0
    26+26+10=64ではなく62という指摘を受けたのでリンク先では修正しました。

    返信削除
  4. 小5の息子になぜ1バイトは8ビットなのか聞かれて答えられませんでした。わかりやすかったです。ありがとうございました。

    返信削除