Linux Kernel(4.19) Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

138199
1107
135866


mutex lock vs spinlock ( 재현 상황 ) 9. 커널 동기화(spinlock/mutex)


특정 함수나 콜스택 동작에서 lock을 두 번 획득하려고 했을 때 mutex lock과 spinlock 재현 상황은 아주 달라요.

busy-waiting이라는 말을 들어보셨나요? spinlock은 lock을 획득하기 전까지 사채업자 같이 계속 특정 루프를 돌면서 계속 기다려요.
ticket spinlock의 멤버 중에 owner와 next값이 있잖아요. owner가 next와 같으면 spinlock을 획득할 수 있는 조건이거든요.
그 조건을 만족할 때 까지 계속 기다리죠.

계속 기다린다는 건 뭘 뜻할까요? 혹시나 spinlock_irq 함수를 호출하면요?
preemption이 동작하지 않고 IRQ도 trigger되지 않게 되거든요.

대부분의 경우 spinlock 동작에 문제가 생기면 Watchdog Reset으로 시스템은 리셋되는 운명을 맞이하게 되요.

반대로 mutex lock은 어떤 동작일까요? mutex lock도 lock을 획득하기 전까지 계속 busy-wait을 할까요?
그렇지 않아요. mutex lock이 lock을 획득하지 못하면 struct mutex.wait_list에 등록하고 잠들어버려요.

그리고 mutex lock이 해제될 때 mutex lock을 해제하는 프로세스에서 mutex lock이 lock을 획득하지 못해 잠든 프로세스를 깨우거든요.
spinlock과는 다르게 mutex lock에 문제가 생기면 보통 키보드 동작이 안되거나 모바일인 경우 터치 동작이 안되듯 락업으로 문제가 재현되는 경우가 많아요.



"혹시 궁금한 점이 있으면 댓글로 질문 남겨주세요. 아는 한 성실히 답변 올려드리겠습니다!" 

Thanks,
Austin Kim(austindh.kim@gmail.com)

#Reference(커널 동기화)
커널 동기화 기본 개념 소개
레이스 발생 동작 확인
커널 동기화 기법 소개
스핀락
뮤텍스란
커널 동기화 디버깅


핑백

덧글

댓글 입력 영역