コンピュータはどのように計算しているのでしょうか?
コンピュータは0と1だけで計算している!とか、それは電気的にonとoffに置き換えられるからだとかいいますが、具体的にどんなふうにしているんでしょう?
参考文献:
やさしいコンピュータ科学 Great Ideas in Computer Science, 1993年, Alan W. Biermann,
アスキー出版局
高等学校物理Ⅱ, 平成16年1月10日、国友正和他、数研出版
私たち(人間)は、普通10進数で計算します。
たぶん指が10本あったので10種類の文字(数字)を用意し、これを利用しているのだと思います。
0, 1, 2, 3, 4, 5, 6, 7, 8, 9の10種類です。
1桁目を10種類の数字で区別し、0から9まで数えたら、桁上がりして10になるということです。
さて、この10進法の足し算、掛け算は、どのように計算しているのでしょう?
【足し算】たとえば、1+1は2, 3+7は10, 5+8は13, …です。下左表のように 1桁同士の加法の組み合わせは100通りあります。
【掛け算】たとえば、3×4は12, 6×7は42, 8×6は48, …です。下右表のように 1桁同士の乗法の組み合わせも100通りあります。
このように1桁の2数の計算が基本となり、大きな数字の計算も行っているのです。
小学校2年生までにマスターしている内容です。
そして、昔の人はみんな紙と鉛筆で計算していたのです。
偉大な数学者も、天文学者も、、、つい最近まで。
サイモン・シンの暗号解読という本に、計算機の黎明期の話が載っていますが、始めは歯車を使って計算しようとしていました。
第2次世界大戦中、暗号解読の必要性から電気回路を使った計算機の考え方が生じ、電気回路を使えば、歯車を使うよりはるかに早く、大量のデータを取り扱えることに気付いたわけです。
そして、2進法の話になります。
10進法のことを思い出して、2進法について考えてみます。
2進法の数字は、0, 1の2種類です。
0, 1と数えたら、桁上がりして10になります。
1桁同士の加法、乗法の組み合わせは下表の通りです。
つまり、これだけで計算できるわけです。
上の表を、2数x, yの関数fadd(x,y), fmulti(x,y)の表に直してみます。
fadd(x,y)=x+y
fmulti(x,y)=xy
です。
この表を使えば、2進数の計算ができるはずです。小学校2年のとき苦労した九九は覚えなくてよさそうです。
仮に歯車で計算機を作ったとしても簡単そうです。
しかし、例えば10進数の57は、2進数だと111001となり、やたら桁が多くなるという欠点があります。
歯車は単純でも、たくさん並べないといけない感じがします。しかもその分とっても遅くなりそうです。
で、電気回路の登場です。
例えば次の命令文、
Z=X+Y;
は、次のように翻訳されます。
Xという数量を得よ COPY
AX, X
Yを得て最初の数量に加えよ ADD AX, Y
結果を格納せよ COPY CN1, AX
結果を取り出せ COPY AX, CN1
それをZに入れよ COPY Z, AX
翻訳機は、入力された Z=X+Y; を、それに対応するアセンブリ言語の演算(COPY AX, Y など)に変換する作業を行います。
次にこれらの演算は、"00101101"や"01101010"のような2進符号に変換され、最後に電気回路がこの2進符号を順次実行し、目的の仕事を遂行します。
コンピュータは下図のように、情報を記憶するレジスタと呼ぶ回路と、レジスタに格納するものを演算する回路とで構成されています。
命令レジスタという特別なレジスタが、何をすべきかを示すコード(例えば"00101101")を記憶します。回路がそのコードを解読し、算術演算などの仕事を行う回路を作動させます。次に、この演算回路がデータを操作し、それをデータレジスタに格納します(このようなデータレジスタを、ここでは
X1, X2, X3, …と呼ぶことにします)。
上の例では、演算は次のように行われます。
1) 最初の命令コード(00101101)を命令レジスタに入れ、
2) それを解読し、
3) 適切な機械動作を呼び出して仕事を実行する
そして
1)次の命令コード(01101010)を読み込み、2), 3)と同様の行動を繰り返す。
このような読み込みと命令の実行を、仕事が完了するまで次々と順番に繰り返します。
このような機械を作るには、2種類の回路が必要です。すなわち、上記で命令レジスタ及びデータレジスタとして示した記憶回路と、コード解読回路及び機械動作回路として示した操作回路(演算回路)です。
ノーマルオープンタイプのsw1とsw2を直列につないだ回路です。
4通りの状態があり、表にすると、
乗算の関数fmulti=xy
の表とまったく同じになります。
これを AND回路といいます。
ノーマルオープンタイプのsw1とsw2を並列につないだ回路です。
4通りの状態があり、表にすると、
加算の関数fadd=x+y
の表に似ています。(同じではありません)
これをOR回路といいます。
ノーマルクローズタイプのsw3を使った回路です。
2通りの状態があり、表にすると、
fnot(x)=1-x
の表とまったく同じです。
これを NOT回路といいます。
ゲルマニウム(Ge)、ケイ素(Si)は、低温では抵抗率が大きく電気を通しにくいですが、温度が上がると抵抗率が小さくなって電気を通すようになります。このような半導体を真性半導体といいます。
真性半導体に微量のリン(P)やアルミニウム(Al)のような不純物を入れると、真性半導体に比べて電気を通しやすくなります。これらを不純物半導体といい、ダイオードやトランジスタに用いられます。
真性半導体(GeやSi)の結晶の中に微量のリン(P)やアンチモン(Sb)を混ぜたものがN型半導体です。
GeやSiの原子は最も外側の電子殻に4個の価電子をもち、これらを互いに共有した共有結合によって結晶をつくっています。
一方、PやSbは5個の価電子をもつので、GeやSiの結晶に微量入ると、そのうちの4つが共有結合に加わり、1個の価電子が余ります。
この余った電子は結晶内を動き回ることができ、電流の担い手となります。
電流の担い手をキャリアといい、N型半導体のキャリアは電子ということになります。
電子は負の電荷をもっており、負は英語でnegtiveなので、電子がキャリアとなる半導体をN型半導体といいます。
真性半導体(GeやSi)の結晶の中に微量のアルミニウム(Al)やインジウム(In)を混ぜたものがP型半導体です。
AlやInの原子は価電子を3個しかもたないので、共有結合するには電子が1個不足して、電子のないところができます。これをホール(または正孔)といいます。
電場を与えると、ホールよりエネルギーが高い共有結合の電子が移動してホールを埋めます。電子が移ったあとが新しいホールになり、これを別の電子が埋めるようにして、ホールは電場の向きに移動します。
このようにホールは正の電気をもつ粒子のようにふるまい、キャリアとなります。
ホールは正の電荷をもっており、正は英語でpositiveなので、ホールがキャリアとなる半導体をP型半導体といいます。
P型とN型半導体を接合し、両端に電極を付けたものを半導体ダイオードといいます。
コンピュータは1秒間に何百万回もの開閉ができ、消費電力が少なく、しかも非常に小さいスイッチが必要です。
開始:2014年5月1日
更新:2014年5月7日
更新:2014年5月9日
最終更新:2014年5月12日