So-net無料ブログ作成
検索選択

「天空のリング」記事の仮想記憶に関する訂正 [昔話]

昨日の記事の最後の方にアポロコンピュータの仮想記憶を2個のMC68000で同じ命令をずらして実行して実現している、と書いた。これはずっと前アポロがまだ存在していた頃聞いた話だった。が、今になってなんかおかしいな、と気がついた。CPUの内部状態も含めてコピーしてこないと実行を続けられない。それができればそんな面倒なことをしないでもページフォルトの処理はできるんじゃない?

ということで今日会社で調べてたらやっぱり間違っていたということがわかった。一番わかりやすいのは、簡潔で親切な記述のこのページの最後の方の解説。「1命令遅延」説はたまたま同じCPUが並んでたのを見た人がそう思い込んだのかなあ。僕は「1命令遅延」説はアポロの日本法人の営業の兄ちゃんから「昔はこんなことをしていた」みたいにして聞いたような気がする。それともHPのすごいおしゃべりな営業の兄ちゃんの方だったかな。あのころはOSからなにからメーカごとに全然違っていてそうやって話を聞くだけでも面白かったけど。

その直後のソニーのワークステーション「NEWS」ではMC68020が2個並んでボードに乗っていた。これを見たらなんて言うんだろう。こっちはカタログにはっきりと「片方はI/O処理用」と書いてあったっけ。

ということでお詫びして訂正します。

西之園さん [昔話]

こないだお読み終わった「すべてがFになる」には主人公の一人として西之園萌絵という二十歳前の少女が活躍する。
中学のときの同級生に西園(にしぞの)さんと言う女の子がいた。

続きを読む


第1宇宙速度 [昔話]

今から40年前、僕が中学生のときに夏休みの自由研究というのがあった。同級生は皆いいかげんに昆虫や花や雲を観察した。2学期の初めの理科の授業でそれぞれ発表することになった。確か僕は蜘蛛を箱に入れて巣を張るのを観察する、とかいって箱にその辺でつかまえた蜘蛛を入れたら翌日全部いなくなりました、なんていうお粗末なものだったと思う。

その中で、誰がやったのか忘れた(顔は思い出すが名前はわからない)のだけど、今でも覚えている発表がある。

続きを読む


「レイフ・ヴォーン・ウィリアムズ」の音楽 [昔話]

先日、N響アワーでメシアンとは全然関係ないのに思い出したヴォーン・ウィリアムズについて、ちょっと。

続きを読む


子供の頃に聴いた音楽 [昔話]

小さい頃、図書館勤めの父親が子供の教養のためと思ってか、レコードを借りてきてくれた。父親の借りてきてくれるレコードのおかげで小学校の4、5年の頃ベートーヴェンの交響曲に心酔してしまった。

続きを読む


クレーで思い出した事 [昔話]

15、6年前にグッゲンハイム美術館展が池袋に来たとき、幼稚園に入ったばっかりくらいの娘を連れて見に行った。出かける前日の夜に美術館展のパンフレットを娘に見せて「これがミロ、人形が体操してるみたいだねえ、こっちはモンドリアン、いろんな色のガムテープを貼ったみたいだねえ、これはタンギー、海の底みたいだねえ、明日これを見に行くからね」と予習をさせた。
翌日比較的すいていた会場でちっこい女の子が「あっ、おとうさんカンディンスキーだ!」「ホラホラこっち、クレーだ!」とか言いながら走り回る事になって、周りの人を驚かせた。

会場を出た所の椅子に座って休んでいると娘にじいさんがしゃがみ込んで「お嬢ちゃん絵は好きなの?」、僕に五、六十ぐらいのおばさんがよってきて「お宅のお嬢さんはすごいですねえ」

僕は「はっはっは。私が好きなもので娘もこのように」とか答えて鷹揚に笑ってみせた。あの人たちはまさか一夜漬けだとは思いもしなかっただろうなあ。

そのときのグッゲンハイム展は好きな絵がいっぱいあったので一人で見に行き直した。


ハリウッド映画 [昔話]

映画を見て思い出した。

子供の頃母親に連れられて三番館に映画を見によく行った。なぜか二つ下の弟は一緒ではなく、母親に一人でつれられて行った。

続きを読む


カレーを食べて思い出したこと [昔話]

昔出張で何度もシンガポールに行った。
シンガポールには工場があって、そこに生産展開するためだったが、仕事の話はどうでもいい。

シンガポールに行きたてのころ、当時現地のシンガポーリアン技術者とは僕も含めてみんな仲がよく、しょっちゅう彼らに食べに連れて行ってもらっていたが、たまたまある休日に日本から来ているメンバーだけで食事しに出かけた。カッページプラザ(今でもあるんかいな)かどこかだったと思うが、そこのインド料理屋に入った。

続きを読む


Mathematicaのこと [昔話]

Mathematicaには世話になっている。1.2からの付き合い。
1990年前後だったと思うが当時はちょっと賢い電卓と言う雰囲気だった。
数式処理にはReduceとMACSYMAが全盛だった。Reduceは当時VAX/VMSに移植するパッケージ(テープ(!)を送れば返送してくれた)があって動かしている人の話を聞いたりしたが敷居が高かった。何しろまず専用のインタプリタを自力でコンパイルしなければならなかった。MACSYMAは値段が高かった。

最初Mathematicaには言語としての問題意識に非常に惹かれた。複雑なことをするには複雑な命令が必要と言うのが常識だったコンピュータ用言語(本当は必ずしもそうではなかったかもしれないが)としては目から鱗ものに見えた。特に記憶力が鰐には勝つが牛には負ける程度しかない私には福音に見えた。

Mathematicaはすばらしいパターンマッチング(どうやって実装するんだろう)の能力とオプションと言う引数のアイデアで処理対象が数式だろうが文字列だろうが数値の配列だろうが同じ概念を持つ作業は同じ名前の関数を呼べば良かった。当時、Reduceは字面がFORTRAN臭いし、MS-DOS用にmuMATHというReduceクローンがあったが使い物にならなかった。特にmuMATHは、正確なシンタクスはもう覚えていないが、たとえば数式を変形する関数があってその引数のひとつ目に式を指定する。二つ目に整数を指定する。その整数が1だったら展開、2だったら因数分解、というような万事その調子で記憶されることを拒否しているようなインターフェイスだった。

当時はもうすでにコンピュータ用言語はCとそれ以外と言う状態だったがFORTRAN、BASIC、pascal、その他いろいろいっぱいあった。特にインタプリタではBASICが主流でHPの計測制御用として社内でもユーザは多く、NECの98シリーズ用に趣味的にBASICで書いている人もいた。98シリーズはよく知らないがHPのBASICはやたらと高機能で、測定機との複雑なデータのやり取りや、データのプロットが1行のコマンドでできてしまうほどだった。
しかしこれがインフレで、機能が追加されるたびにコマンドが追加される。一体いくつコマンドがあるのかもわからないほど増えてしまうと、1行書くのに分厚いマニュアルをひっくり返すことになる。これでは何のための高機能化かわからない。

Mathematicaは数値でも文字でもそのまま式を書いて計算する。未評価の文字が含まれていてもあとから文字に数値を割り当てれば数値評価が可能になる。基本的な1次元関数のプロットもPlot[f,{x,x0,x1}]だけ。表示領域やスタイルの変更はオプションで行う。オプションは引数と違い必要なものだけ書けば良い。この簡単さ、覚えやすさは有難かった。

もうMathematicaとの付き合いは十数年になるが、これがないと仕事の能力が何割りか下がってしまうほど依存している。Mathematicaがないとロボトミー手術と同じか?いやそれ以前に前頭葉が萎縮していてMethematicaがその肩代わりをしている?はっはっはっは。僕にもっと仕事をさせたかったらMathematicaを6.0に上げて(今使っているのは5.0forMacOSX)クァドコアマシンでも寄越すんですな。え?Mathematicaに給料出すって?


Handle昔話 [昔話]

Carbonな人には問題ないだろうけどMac OSのHandleには初め驚き、そのあと苦労した。

OS9以前のMacではメモリブロックを要求する場合、ほとんど必ずHandleというポインタへのポインタを使う(何故かWindowの構造体はHandleではなくPtrなのが依怙贔屓)。
OSXではCoreServises/MacMemory.hのなかに

typedef char *                          Ptr;
typedef Ptr *                           Handle;


と定義されている(ヘッダからのコピー)。

メモリを要求するときは

Handle	aHandle = NewHandle(handleSize);


等とするのであるが、なんでこんなことをするかと言うと、驚くなかれ昔のMacは仮想メモリが無かった。

ロードされたアプリケーションのすべてが一つのメモリ空間を行儀良く使わなければいけなかった。あるアプリケーションがメモリブロックを要求するとシステムにたった一つのヒープからOS(memoryManager)が割り当てる。割当/解放を繰り返すとヒープが穴だらけになる。ほっておくとメモリは余っているのにメモリブロックの割当が失敗するようになる。これを避けるためにメモリブロックへのポインタを渡すのではなく、メモリブロックのポインタはOSが管理し、そこへのポインタ(Handle)をアプリケーションに渡す。ポインタそのものはOSが管理しているのでコンパクションが必要になったらOSが勝手に行うことができる。

だからアプリケーションはいつメモリブロックの場所が変わっても良いようにプログラムしなければならない。ブロック本体をアクセスするときは当然ポインタが必要なのでHandleを手繰ることになるが、手繰った値をずっと持っていたらいつの間にかブロックの位置が変わっていた、等と言うことになる。

古いMac OSは今で言うプリエンプティブではなかったのでWaitNextEvent()を呼ばないかぎりOSに制御は渡らないのだけど数値計算の場合、深いループの中に入ってしまうとマシン全体がハングしてしまったように見えるので、それなりの頻度でWaitNextEvent()をループの中でも呼ばなければならない。呼んだ後ちゃんとHandleの先を更新しないとひどい目に遭う。たいていの場合クラッシュした(あたりまえか)。これがunixから来た、メモリはやりたい放題でもじぇんじぇん気にせずにすんであるだけ使って放ったらかしでもプロセスが終わってしまえば何事も無くシステムは稼働し続けるのに慣れた当時の若者にはとんでもなく苦痛だった。

そもそもなんでMacに来たかと言うと、時間を遡ること二十数年前...

「なんで1台何百万もするワークステーションなんてものを使わなければいけないんだ?」
「だって僕の仕事は自分でプログラムしないといけないんですう」
「98があるだろ、NECの98が。みんなあれをプログラムして使ってるじゃないか」
「だってあれはプログラミングが大変なんですう。512kBの2次元FFTを64kBごとにメモリ領域を切り替えながらプログラムするなんて人間業じゃないですう」
「じゃあこれはどうだ。なんのことはないCPUはお前の「わーくすてーしょん」と同じじゃないか。そのくせ値段は5分の1だろが。これを使えこれを」

で、手に入れたのがMacIIだった。確かにCPUはHPのワークステーション(ビットマップディスプレイ(これも死語やな)を持ってX-windowが動くデスクトップのunixマシンを当時こう呼んだ)と同じモトローラの68020。まあ、これでもいいかと思ったのが運の尽き。

Handleを書くたびにあの課長の顔が今でも思い浮かぶ。彼ももう定年やなあ....


メッセージを送る