BKL(Big Kernel Lock)

  • 커널 버전 2.0에서 SMP가 소개됨
  • BKL은 giant-lock, big-lock 또는 kernel-lock이라고 알려졌었다.
  • 2.0 커널에서는 한 번에 하나의 스레드만이 커널 모드에서 동작하기 위해 lock을 획득하여야 커널 모드로 진입이 되었고, 나머지 CPU는 lock을 획득하기 위해 대기하였다.
  • 성능 및 리얼 타임 application에 대한 latency 이슈로 BKL은 spin-lock, mutex, RCU등으로 대체되기 시작함.
  • 리눅스 초창기에 SMP를 위해 구현된 BKL은 커널 2.6에서 일부 VFS와 몇개의 file system에만 남아있고 거의 대부분 제거되었다.
  • 2011년 커널 2.6.39에서 마지막 BKL 구현이 제거되었다.

BKL Functions

  • lock_kernel(): Acquires the BKL
  • unlock_kernel(): Releases the BKL
  • kernel_locked(): Returns nonzero if the lock is held and zero otherwise (UP always returns nonzero)

Synchronization

  • BKL은 CPU가 동시에 커널에  진입을 하는 것을 막아 동기화 문제를 해결한다.

bkl

댓글 남기기