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

  • 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()関数
    • 再スケジューリング後、再びカーネルロックを行い、システムコール 処理、ページフォルト処理を継続する。
                if(current->lock_depth >= 0) spin_lock(&kernel_flag);
      

(NIS)HirokazuTakahashi
2000年06月11日 (日) 22時29分57秒 JST
1