カーネルロック関数の動作詳細

  • kernel_flag
    • Linuxカーネルのロックのためのフラグ
  • task_struct中のメンバlock_depth
    • Linuxカーネルロックのネスト数
  • lock_kernel()関数
    • カーネル資源をロックする。
                if(current->lock_depth++ >= 0) spin_lock(&kernel_flag);
      
  • unlock_kernel()関数
    • カーネル資源のロックを解除する。
                if(--current->lock_depth <= 0) spin_unlock(&kernel_flag);
      
  • release_kernel_lock()関数
    • スケジューラを呼び出しCPUを放棄する時に、 一時的にカーネルロックを解除する。
                if(current->lock_depth >= 0) spin_unlock(&kernel_flag);
      
  • reacquire_kernel_lock()関数
    • 再スケジューリング後、再びカーネルロックを行う。 カーネルロック状態をrelease_kernel_lock()関数呼び出し 以前の状態に戻す。
                if(current->lock_depth >= 0) spin_lock(&kernel_flag);
      

(NIS)HirokazuTakahashi
2000年12月09日 (土) 23時55分06秒 JST
1