マスク可能な割り込み

CLI と STI という命令は「マスク可能な外部割り込み」に対する命令との事。これって linux-0.01 の hd.c の中の rw_abs_hd() 手続きを例にすると基本的には

  • lock_buffer() で b_lock 属性が lock された状態になる
  • add_request() でリクエストをキューイング
  • wait_on_buffer() でロック解除を待つ
    • マスク可能な割り込みは無視

ちなみに

	set_trap_gate(0x2E,&hd_interrupt);

で 0x2E に設定される割り込みは NMI って事で良いよね。てかプログラムされてるからソフトウェア割り込みだよね。

続き

だとして、wait_on_buffer() でのビジーループはいつ止まるか、というと例えば sys_setup() から呼ばれた rw_abs_hd() 手続きからリクエストが kick off されたのであれば do_hd には read_intr() 手続きが格納されるはずなので、その中の unlock_buffer() 手続きにて b_lock 属性が unlock された状態になる、と。

ええと

sleep_on と wake_up の対も理解が微妙ッス。たしか sleep_on() 手続きのひらをやり残しているんだよなぁ。。
とりあえず、task_struct に関する理解が必要だと思っているのですが、ここで一旦 task_struct なデータ構造について掘削する形を取った方が良いのかどうか。