ぷろぐらむをうごかすぷろぐらむはどうやってうごいているの?

プログラムのプログラムって誰が作ったの?

ちょっと待ってくれ。高校生やそこらの専門出の連中がハードウェア基礎すら知らずに言ってるなら理解はするが、世のソフト屋のほとんど全員これを理解してないってマジか?

そこまでハード叩けないソフト屋が増えたってことか。
ENIACもチューリングマシンも知らないか、もしくはそう言うものがあったんだって名前だけ覚えてるって世界か。


言いかえれば、これは自分で車をバラして再度組み立てることができるか、あるいはその構造を理解したうえで車を操縦できる人と、教習所で車の乗り方だけを習った人の違い。

コンピューター。それはひどく複雑化してひどくややこしくなってしまった算盤に過ぎない。
未だ人の扱う機械は、原理的にチューリングマシンのそれを超えていない。

さぁ、計算機概論のお時間です。どこから話せばいい。
最終的にはプログラムとは何ぞや、にたどり着ければよいのだろうけど。

電子式での計算機を作るにあたって(実際には電子式でなくても蒸気式だろうができるにはできる)、まずは物事を極限まで単純化させる必要があった。
算盤、いわゆる計算尺すらも複雑機構なんだ。これらはその大部分を人間の能力で補填する形で計算を補っている。

計算とは、そもそも何ぞや?
算盤を考える。1、という数字を現すとき、算盤は玉をひとつあげる。それに1を加える、という動作をするとき、二個目となる玉を上げる。
実はこのとき算盤は計算なんかしていない。しているのは人間だ。そろばんはただ、その変化の記録となっているに過ぎない。

それは紙の上で計算式を記録するのと、何らの違いはない。単に、その変化の回数が無限回数あったとしても、計算の過程において算盤の桁数をはみ出さないのであれば、有限の尺の中にそれを表現することができる。

算盤、とは言いかえればそれは、メモリの原形に他ならない。メモリ、とはこんぴーたの挙動においてのもっとも根幹となる部分である。
言っておくが、こんぴーたの本体はCPUではない。構造的な本体、原理的な本質はメモリだ。

1.スイッチ

スイッチを知ってるだろうか。そう、電気をつけたり消したりするアレ。あれが何か、知ってるだろうか。
ってスイッチはスイッチだよね。あれが何か分からない、どんな原理か想像もつかない、という人はたぶんとりあえず死んでいい。現代人として生きていくのはたぶん困難な人だ。

このスイッチを入れる条件、というのが、人の手でぱちこんぱちこんやってる部分だ。

では、あるスイッチを入れることで、他のスイッチの状態が変化するように作るとすると、どんなものが考えられるだろう。

たとえば
スイッチAを入れると、スイッチBがオンになる。
スイッチBを入れると、スイッチFとスイッチHがオンになる。
スイッチCを入れると、(以下略)

同時に、逆に
スイッチAがオフになると、スイッチBもオフになる。
スイッチBをオフにしても、スイッチFはオンのまま、スイッチHはオフになる。
スイッチCが切れると、(以下略)

こんな調子で。
どうだい、ただのスイッチの話をしてるだけなのにずいぶんとややこしくなったと思わないか?

そう、このスイッチの連鎖のバケモノこそが、ENIACと呼ばれるコンピューターの祖先だ。
そして、あるスイッチが変化したときに、他のスイッチに変化を起こす、という現象を起こすのに必要だったもの、それが”真空管”だ。

やがてはトランジスタとダイオードに取って代わられるが、真空管の仕組みそのものはまさにこのスイッチと言っていい。

真空管の仕組みは言うべきかどうなのか。トランジスタの理解には必須だが…図を書かないとわかんないよな、あんなの。基本的には増幅機、そして整流器としての性質が強いのがこの真空管。
極端なことを言ってしまえば、普通の電球の中に余計に一枚金属板を追加して、そこから線を引っ張りだしたもの、であるが。
まあここでは省こう。知りたい人は調べればいい。すごく単純だから。ただ説明するのに絵がないととてもじゃないけどめんどくさい。このへんでも見てろ。

さて、真空管に代わって現れるのがトランジスタ。真空管が電気の流れを制御することでスイッチとして機能することはなんとなく見てとれるとは思う。
電気の流れる方向をスイッチで変えてやれば、真空管は電気を通さなくなったり、通したりする。
電気を通している状態を1、電気を通してない状態を0と考えれば、巨大な二進数を真空管とスイッチであらわすことができることがわかるだろうか。
スイッチで電流の流れをぐるっと変えるのは四極のスイッチがあれば簡単にできる。

ENIACが真空管の塊だったのは、この二進数での数値を取り扱うためだ。膨大な電力と真空管の故障にも悩まされながらも、真空管が0と1を表現するスイッチとなると同時に、”現在の状態を維持する”というメモリとしての役割を持っていることにも理解は及ぶだろうか。

もちろん、同様のことは(場所と空間の制約さえ考えなくてよいなら)最悪歯車と人力でも作り上げることができる。もちろん、一つの計算にかかる時間については考えたくもないが。
実際に、パスカルによる歯車式の計算機はすでに17世紀に存在している。

さあ、0と1が表現できるようになった。これはすなわち、複数の真空管を組み合わせることで、上記のスイッチの変化がスイッチの変化を起こす、という現象を作れることを意味する。

これはどういうことかというと、前半のスイッチAが入ったら、というのは入力、そして後半のスイッチBがオンになる、という部分は出力であることを意味する。
入力と出力を持つ素子。それはスイッチを自動的にオンオフする。

当時はまだ理論すらおぼつかなげではあったものの、それは論理回路そのものの理論だったんだ。
And、Or、そしてNot。


さて。そして、ようやくトランジスタのお目見えってわけだ。
トランジスタの発明は戦後間もない1948年。AT&Tベル研究所。アメリカの電話という電話の支配者となったベル研究所だ。

コレクタ、ベース、エミッタの三極からなるトランジスタは、実に面白い働きをした。
コレ自体もまた真空管同様の増幅作用を見せたが、やはり大きいのはそのスイッチとしての機能を真空管とは比べ物にならない小ささに仕上げたことにある。

エミッタに陰極、ベースとコレクタに陽極をつなげる。エミッタ-ベース間の回路は制御回路とも言える部分で、ここに流れる電気の量によって、エミッタ-コレクタ間において流れる電気の量が完全に制御される。
制御回路部分の電気を流れないようにすれば、エミッタ-ベース間の電気も流れない。

スイッチAがオフになると、スイッチBもオフになるのである。たとえ回路がつながっていても。
これをどんどんくりかえし、何億、何十億という数のパターンのスイッチングパターンを有するもの、それがCPUだからだ。

CPUとは、ただ単純にものすごい数のパターンを内部に持つスイッチの塊に過ぎない。
ピンの足の数の乗数分だけ、かけられる電圧のパターンは存在し、そのパターンに応じてCPUは動きを変えているだけだ。

…ってこれいつになったらプログラムにたどり着けるんだろう。
とりあえず結論だけ言っとくか。

プログラムのもっともの原形はこのスイッチングのコントロールコードに過ぎない。
つまり、オンとオフの指示書。足し算をするときはどのスイッチを入れよ、と書いてあるかの説明書。

足し算の場合

・スイッチA群の8個のスイッチを2進数に見立て、最初の数字を入れよ。00000001で1である。
・次にスイッチB群のどれかを入れよ。足し算ならスイッチB-1、引き算ならB-2といった具合である。
・スイッチC群の8個のスイッチを2進数の各桁に見立て、二項目の数値を入れよ。

パンチカードに結果が二進数で出力されるであろう。



多分にこれは冗談にすぎるけれどw 原理はこうだったんだよ。

まずはそんな説明書があった。
それがいつしか、集約スイッチになり、キーボードのような操作パネルに集約された。

さらに、いくつかの操作をひとまとめにして、ひとつのキーを押すと複数のスイッチをオンしたりオフしたりするような操作パネルになった。

もし統一的な操作パネルが存在したとしようか。それこそが、君らのいうOSの原形だ。あるキーがどのスイッチを操作するかを統一的に決まっていれば、その操作パネルの操作方法という新たなマニュアルが生まれるだろう。
その統一的に決まってる何か、がAPIで、操作パネルの操作マニュアルがOS上で走るプログラムの原形だ。

プログラムがOSを分解して、操作パネルも分解していけば最終的にスイッチの操作手順書に書き変えることが可能であることも理解できるか?

いってしまえばこれがプログラムの大本だ。だから、我々はプログラムが人間の想定以上のことをなさないことを理解している。
これを超えるには、どうしてもノイマン型コンピューターの呪縛を超えなければならないことも。

プログラムとは何ぞや、という問いに対して、手順書である、という回答以外の答えを僕は持っていない。コードとはスイッチのオンオフの塊でしかない。それが紙の上に書かれていようが、ディスクに入っていようが、メディアはこの場合重要ではない。

ついでに言えば書式なんてのもそれを解読するものが読めるように書かれていればいいだけのことで、別にそれがなんであれ問題はない。
チューリングマシンであるこんぴーたーは起動するとかならずあるポイントからデータを読み取り、ヘッドを次のポイントに移動し、と繰り返す。

そこに、決まりきったルールの記述式に基づいた手順書を書いておけば、スイッチを入れたり切ったりするだけのことだ。
そして、こんぴーたはそう言う風に動くように、回路設計されている。それはENIACだってそうだ。

そのスイッチ操作方法の書いてある場所が、電気的な記録メディアの上であろうと、FlashROMの上にあろうが、紙テープの上にあろうが同じことだろう。
電気が入るとエンジンが回ってパンチカードをまきこみ、穴のあいてるとこに合わせてスイッチを押すだけの機械を、プログラムだと呼ぶのだと言うならば君はぜんまいと歯車で作られた壁掛け時計や水飲み鳥もプログラムだと呼べばいいと思う。

原理だけをいうならこれらだって立派なプログラムだ。ある手順に従って動く、という意味でね。
それすらもどうして動くの?とか言い出すならそもそもそれは電子工学の世界の話じゃなくて物理の話だね。

0 thoughts on “ぷろぐらむをうごかすぷろぐらむはどうやってうごいているの?

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です