とあるPDP11/40のレジスタにまつわる議論
UNIX 6thではr6, r7のみをユーザ・カーネルで二重化していた気がするけど、PDP11の物量的にはレジスタ8個 x 2あるらしい。Tくんがそんなこと言ってた
2012-04-01 19:59:54あれれ1セットだよーん RT @superhoge: PDP11の16bitsレジスタの数、ユーザ・カーネル用に2セットあるから、計16個かな?
2012-04-01 20:00:40あれ、1セットでしたっけ。どうも誤って覚えていたようです RT @magoroku15 あれれ1セットだよーん RT @superhoge: PDP11の16bitsレジスタの数、ユーザ・カーネル用に2セットあるから、計16個かな?
2012-04-01 20:02:07PDP11/40 Handbookの2.3.1 General Registersを見るとr6(sp)だけUser, Kernelで二重化されているように見える。これ実際に切り替えて使ってるんだっけ?割り込み・トラップを再確認しないと思いだせん
2012-04-01 20:12:33これは、物理的な資源は1個なんだけど、MMUをサポートしている場合はKernelすタックに割り込み時のspをHWが退避するから2個あるように使えるって意味だと思う. 今度naoさんにw11での実装を聞いてみたい。 @superhoge
2012-04-01 20:20:55なるほど、そういう意味ですか。割り込み時にPCはソフトで退避していたはずですが、spは退避していなかったので2setあるのだと思っていました @magoroku15
2012-04-01 20:23:11@superhoge PDP-11/70あたりは高速化のためにレジスタを2セット持ってるのでそのへんの話ですかね。ソフトウェアとは別に。
2012-04-01 20:24:34メモφ(゚Д゚) RT @magoroku15: これは、物理的な資源は1個なんだけど、MMUをサポートしている場合はKernelすタックに割り込み時のspをHWが退避するから2個あるように使えるって意味だと思う. 今度naoさんにw11での実装を聞いてみたい@superhoge
2012-04-01 20:25:50@xylnao11 それかもしれません。確かT君はsimhのソース中に2setあるのを見たとか言っていたので、40以降の話だったのかもしれません
2012-04-01 20:27:05simhのソース発見。あー、確かにpdp11_cpu.cを見るとint32 REGFILE[6][2]で2setあるな。R0-5までが2set用意されている
2012-04-01 20:31:56いや、なんか釈然としない。自分の理解も何か欠けてるきがしてきた。 @superhoge なるほど、そういう意味ですか。割り込み時にPCはソフトで退避していたはずですが、spは退避していなかったので2setあるのだと思っていました
2012-04-01 20:37:50んー、REGFILE[][1]は、registerの数が16個あるPDP11シリーズでのみ使ってるっぽいな
2012-04-01 20:38:41pdp11_cpu.cはstack pointerが4つ宣言されていて、for kernel, supervisor, unused, userとなっている。このうちPDP11/40はどれを持ちうる?
2012-04-01 20:41:36私も少し混乱してきました。HWがspを退避するにしても、退避用のレジスタがあるはずで、それだったらuser, kernelでspを2set持ったほうが処理が楽そうな気はします。 @magoroku15 いや、なんか釈然としない。自分の理解も何か欠けてるきがしてきた。
2012-04-01 20:43:15