コンピュータのメモリにはなぜ 2 つの状態しかないのでしょうか?

コンピュータのメモリにはなぜ 2 つの状態しかないのでしょうか?

コンピューターはなぜバイナリを使用するのでしょうか。つまり、高と低の状態しか表せないビットを使用するのはなぜでしょうか。私は「Logic & Computer Design Fundamentals」(M. Morris Mano、Charles R. Kime (著者)、Tom Martin 著) を読んでいましたが、その理由がわかりません。

10 進数を表す 10 個の値を持つシステムを考えてみましょう。このようなシステムでは、使用可能な電圧 (たとえば 0 ~ 1.0 ボルト) を 10 の範囲に分割し、それぞれの長さを 0.1 ボルトにします。回路は、これらの 10 個の各範囲内で出力電圧を提供します。回路の入力は、印加電圧が 10 個の範囲のどれに該当するかを判断する必要があります。電圧のノイズを許容する場合は、特定の桁表現に対して出力電圧の範囲を 0.05 ボルト未満にし、入力間の境界を 0.05 ボルト未満にすることができます。これには複雑で高価な電子回路が必要になり、製造中または使用中に発生する小さな「ノイズ」電圧や回路の小さな変動によって出力が乱される可能性があります。

では、0.05V の変化を正確に検出し、ノイズから保護することが可能であれば、10 個の状態を持つコンピューターを使用するでしょうか。もしそうなら、0.05V の変化を検出できるような機器を発明するだけの問題でしょうか。スケールを大きくして、たとえば範囲を 0 ~ 50 ボルトにして、5 の倍数ごとに状態 (例: 0、5、10、15、...、50) を設定し、ノイズ用に +/- 2V を許容すればいいのではないでしょうか。

答え1

根本的な理由は、2 状態ロジックを構築する方が簡単であり、99% の場合、より複雑なものを構築しても実用的な利点がないことです。

実際、それは遠い10 個の状態を保存して読み出すことができる単一のメモリ ユニットを構築するよりも、それぞれが 2 つの状態 (BCD 表記の 10 進数を格納できる) を持つ 4 つのメモリ ユニットを構築する方が簡単 (つまり、より小型で、より安価で、より信頼性が高い) です。

将来の技術の進歩によって10分の1メモリが改良される可能性はあります。しかし、同じ技術開発をバイナリ回路にも適用すれば、より小型で信頼性が高く、消費電力も少なくなります。バイナリ回路は10分の1電圧レベル回路よりも早く改良されます。なぜなら、バイナリ回路は基本的により単純な仕事をするからです。そのため、10分の1回路は一度もない追いつく。

より高い電圧を使用するのは、まずいことです。消費電力が増加します。また、信号ラインの電圧が高くなるほど、放射されるノイズも大きくなります (そのため、他の信号が破損する可能性が高くなります)。実際、現在、信号トレースは互いに非常に近い距離で実行されているため、50 ボルトでは、静電結合だけでなくアーク放電も心配する必要があります。最近の CPU の傾向は、より高い電圧ではなく、より低い電圧を使用することです。

さらに、バイナリ コーディングは、最初は奇妙に思えますが、多くの点で非常に便利です。バイナリ加算回路は、ここで説明したようなさまざまな電圧レベルを使用する加算器よりもはるかに単純な (そして信頼性の高い) 設計です。(乗算、除算、浮動小数点演算をどのように行うかは考えたくもありません。) さらに、コンピューターのプロセッサの残りの部分を実装するには、バイナリ デジタル ロジックが必要です。

人間が 10 進数を使用してコンピューターを扱うことを好むという事実は、ほとんど無関係です。2 進数と 10 進数間の変換は、些細なコードです。

ごく初期のコンピュータには、数字を 10 進数として保存するものがいくつかあったことは注目に値します。ただし、それらのコンピュータは、電圧レベルを変化させて保存していたわけではありません。代わりに、リング カウンタと呼ばれる回路を使用していました。これは、実際には 10 ビットのメモリが設定されており、一度に 10 ビットのうち 1 ビットだけが「1」になるものでした (「デカトロン」を調べてください)。

その後、IBM 1401 や IBM 1620 などの「10 進」コンピュータが登場しましたが、それらも基本的にはバイナリ ストレージを使用していました。ビットは、10 進数をさまざまな方法で表すために使用されていました。たとえば、1401 は「2 進化 10 進数」を使用しており、10 進数の各桁をコード化するために 4 ビットのセットが使用されていました。このようなコンピュータは当時非常に成功しており、ほとんどの計算機は今でもこの方法で動作しています。

つまり、10 進数表現の方が理にかなっているように思えますが、それは単に、文明として私たちが慣れているからに過ぎません。コンピューター回路では、エンジニアリングのあらゆる尺度から見て、2 進数表現の方が理にかなっています。(それに、私たちがもう少し賢ければ、指を使って 2 進数で数えて成長し、10 だけでなく 1023 まで数えられるようになるでしょう! :) )

答え2

あなたが引用した記事はあなたの質問に非常によく答えています。もう少し考えてみる必要があるだけです。

電子データの保存と転送にバイナリ表現を使用する主な理由は、回路の複雑さのレベルとノイズマージンです。

もうひとつの重要な理由は、データ保存の目的においてバイナリが最小公分母であるということです。バイナリでは、オーバーヘッドなしであらゆるデータを効率的に表現できます。2つ以上の状態を使用すると、非常に単純なデータ(たとえばバイナリ)を表現しようとするときにオーバーヘッドが発生することがよくあります。

質問の最後の部分については、電子部品産業が進歩するにつれて、電圧は高くなるのではなく低くなる傾向があることを思い出さなければなりません。コンピューターのメイン メモリ IO ピンに 50 ボルトをかけることは、非常に非現実的で、危険で、コストもかかります。現代のコンピューター メモリは通常、1.5V 前後を使用します。

以下の本を読むことをお勧めします。

答え3

メモリはトランジスタに基づいています。トランジスタは本質的にアナログですが、バイナリ方式で使用され、クロック信号 (MHz) に結合されます。最もシンプルなメモリは J/K (Q/Q') フリップフロップです。この 4 つのシンプルな NAND ゲートの配置は、デジタル ストレージの基本ビットであり、1 または 0 を保存します。フリップフロップには、非デジタル値や複数の値を保存する機能はありません。

もう 1 つの側面は、値のラッチを提供するクロック信号です。値が変化すると、出力が不確定になることがあります。クロック信号は、出力が安定するのにかかる時間よりもわずかに長くなるように選択されます。これにより、値がラッチされ、計算が続行されます。値がクロック パルスに間に合うように安定しない場合、間違った値が繰り越​​され、コンピューターがクラッシュします。

関連情報