とあるPDP11/40のレジスタにまつわる議論

とあるエイプリルフールの夜に、ふいに始まったPDP11/40のレジスタにまつわる議論をまとめておきます。 twitter上でもこのようなやり取りをしながら昔のUNIX, PDP11について読み解いていっているのが見せられたら面白いと思い、まとめました。 最近古いUNIXの勉強をしている人が増えているように感じています。そのような人たちの参考になれば。
4
takahiro(John Smith) @superhoge

PDP11の16bitsレジスタの数、ユーザ・カーネル用に2セットあるから、計16個かな?

2012-04-01 19:58:40
takahiro(John Smith) @superhoge

UNIX 6thではr6, r7のみをユーザ・カーネルで二重化していた気がするけど、PDP11の物量的にはレジスタ8個 x 2あるらしい。Tくんがそんなこと言ってた

2012-04-01 19:59:54
takahiro(John Smith) @superhoge

レジスタに言及しているツイートを見てそんなことを思い出した

2012-04-01 20:00:20
八丁堀マゴロク亭 @magoroku15

あれれ1セットだよーん RT @superhoge: PDP11の16bitsレジスタの数、ユーザ・カーネル用に2セットあるから、計16個かな?

2012-04-01 20:00:40
手ぎつねの人(射影前) @_handyfox

わぁいレジスタ あかりレジスタ大好き

2012-04-01 20:01:39
takahiro(John Smith) @superhoge

あれ、1セットでしたっけ。どうも誤って覚えていたようです RT @magoroku15 あれれ1セットだよーん RT @superhoge: PDP11の16bitsレジスタの数、ユーザ・カーネル用に2セットあるから、計16個かな?

2012-04-01 20:02:07
takahiro(John Smith) @superhoge

というわけで、間違ったことを書いてしまったかも

2012-04-01 20:02:22
takahiro(John Smith) @superhoge

PDP11/40 Handbookの2.3.1 General Registersを見るとr6(sp)だけUser, Kernelで二重化されているように見える。これ実際に切り替えて使ってるんだっけ?割り込み・トラップを再確認しないと思いだせん

2012-04-01 20:12:33
takahiro(John Smith) @superhoge

いかんなぁ。色々忘れているぞ

2012-04-01 20:18:54
八丁堀マゴロク亭 @magoroku15

これは、物理的な資源は1個なんだけど、MMUをサポートしている場合はKernelすタックに割り込み時のspをHWが退避するから2個あるように使えるって意味だと思う. 今度naoさんにw11での実装を聞いてみたい。 @superhoge

2012-04-01 20:20:55
takahiro(John Smith) @superhoge

なるほど、そういう意味ですか。割り込み時にPCはソフトで退避していたはずですが、spは退避していなかったので2setあるのだと思っていました @magoroku15

2012-04-01 20:23:11
満鉄附属地エリカちゃん @xylnao11

@superhoge PDP-11/70あたりは高速化のためにレジスタを2セット持ってるのでそのへんの話ですかね。ソフトウェアとは別に。

2012-04-01 20:24:34
手ぎつねの人(射影前) @_handyfox

メモφ(゚Д゚) RT @magoroku15: これは、物理的な資源は1個なんだけど、MMUをサポートしている場合はKernelすタックに割り込み時のspをHWが退避するから2個あるように使えるって意味だと思う. 今度naoさんにw11での実装を聞いてみたい@superhoge

2012-04-01 20:25:50
takahiro(John Smith) @superhoge

@xylnao11 それかもしれません。確かT君はsimhのソース中に2setあるのを見たとか言っていたので、40以降の話だったのかもしれません

2012-04-01 20:27:05
takahiro(John Smith) @superhoge

simhのソースは手元にあったかな……会社のマシン内だったかな……

2012-04-01 20:27:45
takahiro(John Smith) @superhoge

simhのソース発見。あー、確かにpdp11_cpu.cを見るとint32 REGFILE[6][2]で2setあるな。R0-5までが2set用意されている

2012-04-01 20:31:56
takahiro(John Smith) @superhoge

ただこれがハードを反映させて2setあるのかどうかは、もう少し見てみないとよくわからん

2012-04-01 20:33:50
八丁堀マゴロク亭 @magoroku15

いや、なんか釈然としない。自分の理解も何か欠けてるきがしてきた。 @superhoge なるほど、そういう意味ですか。割り込み時にPCはソフトで退避していたはずですが、spは退避していなかったので2setあるのだと思っていました

2012-04-01 20:37:50
takahiro(John Smith) @superhoge

んー、REGFILE[][1]は、registerの数が16個あるPDP11シリーズでのみ使ってるっぽいな

2012-04-01 20:38:41
takahiro(John Smith) @superhoge

まぁそれはR0-5の話で、とりあえずの問題はsp(r6)だ

2012-04-01 20:40:33
takahiro(John Smith) @superhoge

pdp11_cpu.cはstack pointerが4つ宣言されていて、for kernel, supervisor, unused, userとなっている。このうちPDP11/40はどれを持ちうる?

2012-04-01 20:41:36
takahiro(John Smith) @superhoge

私も少し混乱してきました。HWがspを退避するにしても、退避用のレジスタがあるはずで、それだったらuser, kernelでspを2set持ったほうが処理が楽そうな気はします。 @magoroku15 いや、なんか釈然としない。自分の理解も何か欠けてるきがしてきた。

2012-04-01 20:43:15
takahiro(John Smith) @superhoge

simhのソースでPDP11/40に対応した部分だけを抽出するにはどうしたらいいのかな

2012-04-01 20:44:02
takahiro(John Smith) @superhoge

こういうとき開発用のマシンでないのがもどかしい

2012-04-01 20:47:21
takahiro(John Smith) @superhoge

回路図見れれば一番確実なのだが

2012-04-01 20:49:10