x86CPUの誕生から使い続けて30年のKASAです。
還暦を直前にして、今までかかわってきたOS(オペレーティングシステム)について語ってみようかと思います。
今回は初回ということでOSではありませんが、
私の原点とも言えるPC-98の8086ニーモニックから。
私が大学の卒業研究をしていた頃は、PCが16Bit化されその上でDOSが動くという世界でした。
その年NECが最新のPCとして、
Intel8086CPU互換の16BitCPUを搭載したPC-9801というその後日本を席巻するPC98シリーズの初代が発売された年だったと思います。
Intel8086は今のパソコンのCPUの直接の祖先ですね。
(x86の86はここから来ています)
ゼミではその最新のPCを購入して研究に利用することになったのですが、
貧乏なゼミだったのでPCを買うのに予算を使い果たし、
コンパイラを購入する予算がありませんでした。
研究内容は行列計算の類なのですが、
グラフィック(GUI)担当のメンバーはN-98Basicというインタプリタでなんとかなりそうでしたが、
肝心のデータ演算部を作るのにコンパイラがない、
かといってBasicなんかで作ってたら遅すぎて使い物にならない…
そこで教授から言い渡されたのは
「KASA君申し訳ないがPCに元々ついているニーモニックでやってくれ」
の一言。
これはもう非情の一言でしたね、
二ーモニック≒簡易アセンブラ(機械語)ということですから。
高級なアセンブラならジャンプ先にラベルが使えたり、
変数名が使えたりします。
しかし98のニーモニックはジャンプもアドレス指定、
メモリ参照もアドレス指定、
辛うじて命令とレジスタ名だけが文字でOKというほぼ機械語直打ちに近い状況だったのです。
この状況で行列計算をするというのは、
ある程度知識のある人なら絶対にやりたくないと思うでしょうね。
この日から配列をどうメモリアドレスに割り付けるか、
コンパイラがやってくれる作業を人力でコツコツやることになりました。
研究内容は、当時の大型コンピュータでやっているものを、
非力なPC(PCとしては最新)でさせてみようという結構無謀な挑戦でした。
(16BitCPUで5MHzで駆動、128KBのRAMという非力なものでした)
もちろん元になる公式も高速化に寄与するものでしたが、
それだけでは不十分で最適化も併せて考える必要もありました。
基本的に行列計算はメモリを大量に必要としますし、
計算コスト(回数)も多いです。