バイトが8ビットである理由の歴史は何ですか?


86

8ビットのグループを基本単位として使用することを決定する際に、歴史的な力が働いている場所とトレードオフの関係はどうでしょうか。

かつて、他のワードサイズを使用するマシンがありましたが、今日では、8ビット以外の場合、博物館の作品、組み込みアプリケーション用の専用チップ、およびDSPを調べる必要があります。バイトは、コンピューター設計の初期の混乱と創造性からどのように進化したのですか?

ビット数が少ないとコンピューティングを実現するのに十分なデータを処理するのに効果的ではなく、多すぎると高価なハードウェアにつながると想像できます。遊びに他の影響はありましたか?これらの力がなぜ8ビットにバランスをとったのですか?

(ちなみに、時間旅行ができたら、「バイト」が8ビットであると宣言された時点に戻り、すべての人に12ビットにするよう説得し、21世紀初頭の装身具で賄いました。)


7
これは、古き良きウィキペディアよりもよく答えられない質問の1つかもしれません。
スコットホイットロック

10
では、なぜ12ビットを8よりも好むのでしょうか?
FrustratedWithFormsDesigner

8
最後の文は冗談ですか?それは2の累乗ではありませんので、12ビットのバイトは不便だろう
ロブ

19
当時のメモリとレジスタはそれほど安上がりではなかったため、6または9(36ビットワードの端数)と比較して、8ビットが適切な妥協案でした。また、アドレスの計算は2のべき乗で非常に簡単であり、小さな缶で生のトランジスタからロジックを作成するときに重要です。
マイクダンラベイ

9
2のべき乗であるワードサイズを使用することは、「初期」ではそれほど重要ではありませんでした。DEC-10には36ビットワードがあり、CDC 6000シリーズには60ビットワードがあり、18ビットのインデックスレジスタがありました。
ジェイエルストン

回答:


75

本当に初期の作品の多くは、5ビットのボドーのコードで行われましたが、それらはすぐにかなりの制限になりました(唯一の32の可能な文字は、その基本的にのみ大文字を、そしていくつかの句読点が、数字のために十分ではない「空間」) 。

そこから、かなりの数のマシンが6ビット文字になりました。しかし、これはまだかなり不十分でした-大文字と小文字(英語)の文字と数字が必要な場合、句読点にさらに2文字しか残されていないため、ほとんどの場合、文字セットに含まれる文字は1つだけです。

ASCIIは7ビット文字セットを定義しました。これは、長い間多くの用途に「十分」であり、ほとんどの新しい文字セット(ISO 646、ISO 8859、Unicode、ISO 10646など)の基礎にもなっています。

バイナリコンピューターは、設計者が2のべき乗のサイズを作成するように動機付けます。とにかく「標準」の文字セットには7ビットが必要だったので、2のべき乗を得るためにもう1ビット追加するのはそれほど長くはありませんでしたより受け入れられました)。

それ以来、文字セットは16ビットと32ビットに移動しましたが、ほとんどの主流のコンピューターは、元のIBM PCにほぼ基づいています。繰り返しになりますが、市場が十分に8ビット文字で十分に満足しているため、PCが現在の支配レベルに達していない場合でも、とにかくすべての人がより大きな文字ですべてを行うかどうかはわかりません。

また、市場はかなり変化したことを付け加える必要があります。現在の市場では、文字サイズはソフトウェアよりもハードウェアによって定義されています。Windows、Javaなどは、かなり前に16ビット文字に移動しました。

現在、16ビットまたは32ビットの文字をサポートする上での障害は、16ビットまたは32ビットの文字自体に固有の難しさによるものであり、i18nの一般的なサポートの難しさによるものです。(たとえば)ASCIIでは、文字が大文字か小文字かを検出したり、2つの文字を変換したりすることは非常に簡単です。完全なUnicode / ISO 10646では、それは基本的には説明できないほど複雑です(標準が試してさえいないという点まで、説明ではなく表を提供します)。次に、一部の言語/文字セットでは、大文字/小文字の基本的な考え方さえ当てはまらないという事実を追加します。次に、それらの一部の文字を表示することでさえ、はるかに複雑であるという事実を追加します。

それはすべてのソフトウェアが非常に複雑であるため、ほとんどのソフトウェアは試してさえいません。状況は徐々に改善されつつありますが、ゆっくりとは運用上の言葉です。


9
ほとんどの伝送プロトコルは設計者が望んでいたほどロスレスではなかったため、8ビットは7ビットASCIIに加えて検証ビットが必要だったと思います。
マーティンヨーク

3
@LokiAstari、はい、それはパリティビットと呼ばれ、エラー検出または回復の粗い形式に使用できます。ウィキペディア:パリティビット
CVn

2
IBM PCがこれと何をしているのかわからない。「バイトあたり8ビットが」8080 CPU(IBMのPC時代の8分の8086の前身)に開始され、CP / Mの時代(<1980)ですでに標準だった
MSalters

1
@MSalters:主にハードウェアの進化を(ほぼ間違いなく)「阻害」していること。いいえ、8ビット/バイトはPCの新機能ではありませんでしたそれまではほとんどのアーキテクチャが数年ごとに交換されていました。PCはそれをほぼ停止し、新しいときには特に進歩的ではなかったアーキテクチャを採用し、数十年にわたってそれを保存しました。
ジェリーコフィン

2
現在の文字セットは16ビットでも32ビットでもありませんし、JavaやWindowsでも使用されていません。現在の文字セットはUnicodeであり、直接マップするには21ビットが必要です。現在のソフトウェアは、8(UTF-8)、16(UTF-16)または32(UTF-32)ビットコード単位に基づいたエンコードを使用し、必要に応じて複数のコード単位を組み合わせて単一のコードポイントを形成しますが、これらのビットサイズは結果です文字セットではなく、ハードウェアの。
セバスチャンレッド

10

ASCII情報用の7ビット、およびエラー検出パリティ用の1ビット。


27
物事のすべての種類のために使用されているASCIIおよび1つの余分ビットのための7ビット
マーティンベケット

1
初期の記憶を扱うとき、パリティは非常に重要でした。8ビットのデータバイトに移動した後でも、パリティチェックを可能にする9ビットのメモリチップがありました。
ジムC

1
これは興味深い主張です。このアイデアを裏付ける履歴データはありますか?
デビッド

6

見てみましょう8ビット・アーキテクチャ上のWikipediaのページを。文字セットは5、6、7ビットの可能性がありますが、基礎となるCPU /メモリバスアーキテクチャは常に2のべき乗を使用していました。最初のマイクロプロセッサ(1970年代頃)は4ビットバスでした。外部メモリとCPU間のデータのビット。

その後、8080プロセッサのリリースにより、8ビットアーキテクチャが一般的になり、それが今日でも使用されているx86アセンブリ命令セットの始まりとなった。私が推測しなければならなかった場合、バイトはこれらの初期のプロセッサから来ており、そこで主流の人々はPCを受け入れて遊んでおり、8ビットは単一のデータ単位の標準サイズと考えられていました。

それ以来、バスのサイズは2倍になりましたが、常に2の累乗(16ビット、32ビット、現在は64ビット)のままでした。現在の主流のCPUアーキテクチャは64ビットです。

(50%増加する代わりに)常に2倍にすることで、既存のアプリケーションやその他のレガシーコンポーネントと共存する新しいハードウェアを簡単に作成できると思います。たとえば、8ビットから16ビットになった場合、各命令は1ではなく2バイト移動できるようになったため、1クロックサイクル節約できますが、結果は同じです。ただし、8ビットアーキテクチャから12ビットアーキテクチャに移行した場合、元のデータを半分に分割し、管理するのは面倒になります。これらは単なる推測であり、私は実際にはハードウェアの専門家ではありません。


5
"(1970年代頃)非常に最初のCPU ..." 。コンピューティングの歴史を読む必要があります!! フォンノイマンアーキテクチャコンピュータ用の最初のCPUは、第二次世界大戦中またはその前に構築されました(誰が歴史のバージョンを信じているかによって異なります)
スティーブンC

19世紀にはコンピューティングデバイスがあり、エジプト人には何らかの計算ポットがあったと確信しています。その情報は、私がリンクしたウィキペディアのページから来ました。私が言ったように、私はハードウェアの専門家ではなく、確かに歴史家でもありませんが、もしあなたが私が遠く離れていると感じるなら、あなたはそのウィキペディアのページを更新したいかもしれません。
DXM

私が入ってきたときにリンクを台無しにしないと助けになると思います。また、「最初のCPU」と言って謝罪します。wikiページを引用していたので、「最初のマイクロプロセッサー」と言ったはずです。それが私が意味したことです。ごめんなさい
DXM

「プレ電子」コンピューターの解決策は、現代のコンピューターと言うか、電子コンピューターだと思います。今日でも、機械式コンピューターを構築できます。電子プロセッサを使い始めてからマイクロプロセッサを構築しました。
ラムハウンド

PDPシリーズで使用される8ビットバイトと16ビットワードサイズも、8ビットバイトの人気の要因となっている可能性があります。
ジェイエルストン

4

バイトは、見ているコンピューターに応じて、さまざまな(少なくとも)1、4、6、7、8、9、12、18、20ビット、場合によっては36ビットです。ここでは、「バイト」を、テキスト中心の解釈を使用するのではなく、「メモリの最小アドレス単位」を意味します。(たとえば、人気のあるHP48SX / GX電卓ラインで使用される64ビットCPUであるSaturn CPUは、4ビットのニブルでメモリをアドレス指定します。)

20ビットのバイトは、50年代の「IASマシン」では非常に一般的でした。6、12、18(および多分36)は、60年代、70年代、そしてある程度80年代のさまざまなアーキテクチャで非常に人気がありました。

最終的に、「2のべき乗」と「アドレス指定可能なユニットのビット」の間に適切な対応関係があることが勝ったようです。


そして、決して10ビット?Googleで見つけられたのは、最近のビデオプロセッサが10ビットであるということだけです。
rslnx 14年

@khrf可能性はありますが、それがあったアーキテクチャは思い出せません(私はほとんどの場合、汎用コンピューターと考えていました)。
ヴァティーヌ14年

はい、汎用コンピューターも検討しています。私はそれはあなたがなどもちろん1バイト、2バイトで1メガバイト、と1キロバイトに対処できることを知っている10ビットバイトになりますどのように素敵な想像ので、それは奇妙だ、それは:)快適にちょうど気まぐれだ
rslnx

2

最初に少し説明します。オクテット(8ビット単位)は、実際には現代のコンピューターアーキテクチャの基本単位ではありません。少なくとも他の2のべき乗-2、4、16、32、64、128などよりも基本的ではありません。オクテットは8ビットプロセッサの基本単位でした(そのため名前です!) -内部的に設定します。たとえば、x86_64には64ビット整数レジスタと80ビット浮動小数点レジスタがあります。RAMは64ビットチャンクで読み書きされ、プロセッサはほんの少しの魔法を使って、個々の8ビットバイトをアドレス指定できるように見せかけます。

古いアーキテクチャの場合、「バイト」はデータバスのサイズを示し、元の質問が示すように、さまざまなバスサイズが多数存在しました(4、5、6、8、12など)。しかし、1993年以降、データサイズの標準化されたSIユニットを得るために、1バイトは8ビットとして定義されています。したがって、「バイト」の意味は、アーキテクチャに依存するユニットから、アーキテクチャに依存しない標準化されたユニットに変更されました。

そのため、最近では、バイトはデータのアドレス指定と定量化の標準単位ですが、それ以外の場合は基本的なものではありません。

オクテットユニットは、主にテキストの保存に関する懸念により、ストレージの事実上の標準になりました。テキストを保存するには、1バイトに1文字を保存するのが理想的です。2つの要素が重要でした:

  • 2の累乗の単位(2、4、8、16、32など)があると、デジタルシステムを設計する際に便利です。
  • ASCII文字セットに単一の文字を保存するには、8ビットで十分です(たとえば、キリル文字をサポートするために文字セットを拡張するための余裕があります)。

もちろん、8ビットではすべてのスクリプトをサポートするのに十分ではありません-日本語のようなものには少なくとも16ビットが必要ですが(その価値はUnicodeは21ビットです)、その時点でビットは高価で、ほとんどのデジタルテキストはとにかくASCII範囲。

最近では、テキストは通常​​、UTF-8のような可変幅エンコーディングで保存され、Unicodeのような文字の組み合わせでは、「1バイトが1文字に等しい」というのは昔のことです。今日、バイトは歴史的な理由から本当に標準に過ぎません。


1

私の情報によると、単語バイト自体は8ビットの単語である8桁のフレーズから派生しました。8ビットワードで見つかる利便性は、値00000000 = 00および11111111 = FF(符号なしの場合は255、符号付きの場合は-127)であるため、16進数値への変換です。オペレーション。

バイト(8ビットワード)は、壊滅的な小さな3ビットから途方もなく大きな60ビットワードまでのワードサイズの自然な進化と考えています


そのための参考資料をご覧ください。私はそれを真剣に疑います。特に、C標準で使用され、C ++標準に組み込まれている「バイト」という言葉は、「8ビット」を意味しません。8ビットの量はオクテットです。
gnasher729

0

バイトは8ビットである必要はありませんが、CおよびC ++は少なくとも8ビットであるとバイトを定義しているようです(それ以上の場合もあります)。スタックオーバーフローに関するこの質問では、1バイトが8ビットではないいくつかのシステムについて言及しています。


C ++、またはコンパイラ
バビカー14

@Babiker:C ++。コンパイラには正確な定義があります。(CHAR_BITSマクロ)
MSalters
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.