CPUを考える
最新 2008.4.27
更新履歴
2008.3.16 開始
【はじめに】
これは、単なる暇つぶしなので、実現できるかとか論理的真偽は最初からありません。そういう代物なので真に受けないでね。
従来のレジスタとALUのいわゆるCPUについては、いまさら考えてもしょうがないので説明をしません。
さて、CPUとはなんでしょうか。それはプログラムの実行装置であるわけで、プログラムが実行しやすくすべきではないでしょうか。ところが、現在ではCPUにあわせてソフトを作っている。RISCなんて、CPUを早くするためのもので、プログラミングをしやすくする改良ではない。レジスタの数を増やすとか実につまらない。
2008.3.23
テーマ:アドレスをなくすと
さて、従来のCPUには、アドレスがありました。ところで、ソフトにはアドレスが出てくるでしょうか。BYTEデータもあれば、構造体もあって、配列といえども、並びは仮想的なものです。したがって、メモリアドレスはソフトでは意味がありませんのでなくします。
物理アドレスは4KBのページ内アドレスとページアドレスをOSが知っておればよい。ページがディスクにあってもnet上でもよい。
では、どうやって、配列データをアクセスすればいいでしょうか。それには、ポインタのネットリストで代用できます。
要するにツリーですから、データの挿入・削除においてもポインタリストの変更ですんでしまいます。もしアドレスというイメージを確保したければ、ネットリストのポインタからなるネットリストを構成すれば、それは局所的な仮想アドレスになります。
ネットリストは状況に応じてネットリストのポインタのネットリストをつくればいいので、1つのネットリストをいちいち走査する必要がない。また、アクセス頻度が高いものは都度ポインタのネットリストを組めばよい。
1つのネットリストから必要とされるポインタのネットリストを元のネットリストからいくつ作られても良い。
また、ネットリストを構成するツリーを深くすることでネットリスト上のデータの数には制限がない。つまり、従来の仮想アドレス空間の制限すらもない。
さて、CPUにはレジスタがありました。レジスタは必要でしょうか。
たとえば、プログラムカウンタですが、プログラム自体、ネットリスト構造ならば、ネットリストをたどるだけですから、ある枝のネットリストポインタで済みます。
プログラムがツリーのネットリストなので、並列部分と結合部分ははっきりしているので実行するプロセッサーが1つである必要もない。
プログラムは、データのネットリスト(詳しくはデータのネットリストへのポインタのネットリスト)と結合されてる。さらに詳しく言えば、各処理、1つ1つにネットリストが着いている。命令にデータのリストがくっついている。
それなので、ネットリストを構成するデータはパケットとして、プロセッサー群に流れてくる。たくさんあるプロセッサーの1つのプロセッサーは、流れてきた命令とデータのパケットを処理してパケットを流す。パケットにはネットリストIDがついている。OSはパケットを流す役割をもつ。
そうすると、パケットを処理するプロセッサーはどこにあっても良く、net上でも良い。また、プロセッサーが随時追加削減されても影響はない。したがって、ネット上の全てのリソースが処理リソースになりうる。
以上から、従来のCPUすなわち中央処理装置は、分散されていわゆるCPUはなくなります。すると表題と矛盾します。
さて、それでは、たとえば、データベースの排他的制御はどうするんだと仰るでしょう。
まあ、OSがアクセス権を握っていますから、これは問題になりません。
さて、プロセッサは多数になるとOSは忙しくなるので、プロセッサはかなり高度な処理を行います。
そういう意味で、プロセッサはマイコンレベルか、コンピュータレベルになります。