top>

Computer Sience

コンピュータはどのように計算しているのでしょうか?
コンピュータは0と1だけで計算している!とか、それは電気的にonとoffに置き換えられるからだとかいいますが、具体的にどんなふうにしているんでしょう?
参考文献:
やさしいコンピュータ科学 Great Ideas in Computer Science, 1993年, Alan W. Biermann, アスキー出版局
高等学校物理Ⅱ, 平成16年1月10日、国友正和他、数研出版

10進数と2進数

私たち(人間)は、普通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となり、やたら桁が多くなるという欠点があります。
歯車は単純でも、たくさん並べないといけない感じがします。しかもその分とっても遅くなりそうです。
で、電気回路の登場です。

電気回路

コンピュータはどうして動くのか?

私は、大学に入って(1977年)、ペントミノの解が2,339通りで、コンピュータ計算ですべての解がわかっているということに驚きました。
数学科に、これをやっている人がいるという噂を聞き興味を持ったものの当時そのままになっていました。
このホームページarigirisuは、これを解決すべく開始したといっても過言ではありません。そして、一応解決しました。(→ペントミノ
その過程で、C言語とかVisual Basicなどのプログラムの書き方も勉強しましたが、これらプログラムの背後で、コンピュータはどんな作業を実行しているのか興味を持つに至りました。
さて、コンピュータは、次の命令文:
  Z=X+Y;
を受けて、どのようにして X と Y を捜し、それを加算し、その結果を Z に入れるのでしょう?
コンピュータの電気回路は、この命令をどうやって達成するのでしょう?
まず、プログラムの実行文は、アセンブリ言語に翻訳されてから基本的な機械動作に分解されます。そして、電気回路が次の基本動作を実行します。

例えば次の命令文、
    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種類の回路が必要です。すなわち、上記で命令レジスタ及びデータレジスタとして示した記憶回路と、コード解読回路及び機械動作回路として示した操作回路(演算回路)です。

単純な関数を計算する回路

最も単純な回路、すなわち、1個の電球、1個の電池、及び1個または2個のスイッチを接続したものを考えます。
スイッチは、ノーマルオープンタイプ(ノーマルでopen, 押すとclose)と、ノーマルクローズタイプ(ノーマルでclose, 押すとopen)の2種類考えます。
AND回路


ノーマルオープンタイプのsw1とsw2を直列につないだ回路です。
4通りの状態があり、表にすると、
  乗算の関数fmulti=xy
の表とまったく同じになります。
これを AND回路といいます。

OR回路


ノーマルオープンタイプのsw1とsw2を並列につないだ回路です。
4通りの状態があり、表にすると、
    加算の関数fadd=x+y
の表に似ています。(同じではありません)
これをOR回路といいます。

NOT回路


ノーマルクローズタイプのsw3を使った回路です。
2通りの状態があり、表にすると、
  fnot(x)=1-x
の表とまったく同じです。
これを NOT回路といいます。

リレー

情報記憶回路

加算回路

半導体

ゲルマニウム(Ge)、ケイ素(Si)は、抵抗率が導体と不導体の中間にあるので、半導体といいます。

真性半導体

ゲルマニウム(Ge)、ケイ素(Si)は、低温では抵抗率が大きく電気を通しにくいですが、温度が上がると抵抗率が小さくなって電気を通すようになります。このような半導体を真性半導体といいます。

不純物半導体

真性半導体に微量のリン(P)やアルミニウム(Al)のような不純物を入れると、真性半導体に比べて電気を通しやすくなります。これらを不純物半導体といい、ダイオードやトランジスタに用いられます。

1) N型半導体

真性半導体(GeやSi)の結晶の中に微量のリン(P)やアンチモン(Sb)を混ぜたものがN型半導体です。
GeやSiの原子は最も外側の電子殻に4個の価電子をもち、これらを互いに共有した共有結合によって結晶をつくっています。
一方、PやSbは5個の価電子をもつので、GeやSiの結晶に微量入ると、そのうちの4つが共有結合に加わり、1個の価電子が余ります。
この余った電子は結晶内を動き回ることができ、電流の担い手となります。
電流の担い手をキャリアといい、N型半導体のキャリアは電子ということになります。
電子は負の電荷をもっており、負は英語でnegtiveなので、電子がキャリアとなる半導体をN型半導体といいます。

2)P型半導体

真性半導体(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日