SSブログ

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個、ということですな。


以上。

nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。