Lions' 本読み (82)

気になったので sleep の呼び出し元を確認してみた。

  • sched 手続き (proc#0)
    • 優先度 PSWP (-100) なので signal 関係ナシ
  • exec 手続き (システムコール)
    • 優先度 EXPRI (-1) なので signal 関係ナシ
  • wait 手続き (システムコール)
    • 優先度 PWAIT (40) なので signal 許容
  • ptrace 手続き (システムコール)
    • 優先度 IPCPRI (-1) なので signal 関係ナシ
  • getblk 手続き
    • 優先度 PRIBIO (-50) なので signal 関係ナシ
  • iowait 手続き
    • 優先度 PRIBIO (-50) なので signal 関係ナシ
  • mapalloc 手続き
    • 優先度 PSWP (-100) なので signal 関係ナシ
  • swap 手続き
    • 優先度 PSWP (-100) なので signal 関係ナシ
  • physio 手続き
    • 優先度 PRIBIO (-50) なので signal 関係ナシ
  • sslep 手続き (システムコール)
    • 優先度 PSLEP (90) なので signal 許容
  • alloc 手続き
    • 優先度 PINOD (-90) なので signal 関係ナシ
  • free 手続き
    • 優先度 PINOD (-90) なので signal 関係ナシ
  • ialloc 手続き
    • 優先度 PINOD (-90) なので signal 関係ナシ
  • iget 手続き
    • 優先度 PINOD (-90) なので signal 関係ナシ
  • readp 手続き
    • 優先度 PPIPE (1) なので signal 許容
  • writep 手続き
    • 優先度 PPIPE (1) なので signal 許容
  • plock 手続き
    • 優先度 PPIPE (1) なので signal 許容
  • wflushtty 手続き
    • 優先度 TTOPRI (20) なので signal 許容
  • canon 手続き
    • 優先度 TTIPRI (10) なので signal 許容
  • ttwrite 手続き
    • 優先度 TTOPRI (20) なので signal 許容
  • pcopen 手続き
    • 優先度 PCIPRI (30) なので signal 許容
  • pcread 手続き
    • 優先度 PCIPRI (30) なので signal 許容
  • pcoutput 手続き
    • 優先度 PCOPRI (40) なので signal 許容
  • lpoutput 手続き
    • 優先度 LPPRI (10) なので signal 許容

あら? なんかナチュラル感満点になってきたぞ。

man 7 signal によると

以下な記述があります。

Interruption of System Calls and Library Functions by Signal Handlers
If a signal handler is invoked while a system call or library function call is blocked, then either:

* the call is automatically restarted after the signal handler returns; or

* the call fails with the error EINTR.

デバイスドライバなレイヤで動作がアレな場合に起こりうる、ような記述があります。上記で言えば pc* とかは紙テープ云々、らしいので相当アレ。

psig 手続き核心

以下なソレを掘削したいんですが。

4051    if((p=u.u_signal[n]) != 0) {
4052            u.u_error = 0;
4053            if(n != SIGINS && n != SIGTRC)
4054                    u.u_signal[n] = 0;
4055            n = u.u_arg[R6] - 4;
4056            grow(n);
4057            suword(n+2, u.u_ar0[RPS]);
4058            suword(n, u.u_ar0[R7]);
4059            u.u_ar0[R6] = n;
4060            u.u_ar0[RPS] =& ~TBIT;
4061            u.u_ar0[R7] = p;
4062            return;
4063    }

psig 手続きを呼び出すのは trap 手続き (2693) あるいは clock 手続き (3725) なのですがここからの戻りってどうなるんだったか。

メモ

テキスト 342p あたりを再確認のこと。あと

  • rtt の副作用
  • grow 手続き
  • suword 手続き
  • 362p の記述

など確認。明日も朝練。今日はこれから別件対応。