Skip to main content
- 커널 버전 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가 동시에 커널에 진입을 하는 것을 막아 동기화 문제를 해결한다.