PDP-11のtrap命令とUNIX V6のシステムコール
UNIX V6のシステムコールは、アセンブラのsys疑似命令を使って実装されている。
sys命令はUNIX V6のアセンブラの実装であって、PDP-11の命令には存在しない。
sys は PDP-11の trap 命令にマッピングされている。
実際にどういう風に展開されるかは、、、調べてないが、
まあ、要は trap 命令を使って、CPUにトラップ処理させる。割り込みと同じ。
(ちなみに、pdp11のgccにもsys命令はあるが、これはtrapの名前を置き換えただけ)
このtrap命令のアセンブラは、
trap 001
のように数字を指定できる。
実際には、この数字はオペーコードの下位8ビットにマッピンされる。
マシンコード的には、
trap 0000 --> 104400 (8進)
trap 0001 --> 104401 (8進)
...
trap 0377 --> 104777 (8進)
になる。
しかし、UNIX V6では、下位6ビット分しか使っていない。
■参照:ken/trap.c の trap()
・・・
case 6+USER: /* sys call */
u.u_error = 0;
ps =& ~EBIT;
callp = &sysent[fuiword(pc-2)&077];
・・・
つまり、システムコールの上限は64個、ということですな。
以上。
2014-10-18 21:47
nice!(0)
コメント(0)
トラックバック(0)
コメント 0