스핀락을 해제할 때 spin_unlock() 함수를 호출하며 이 때 스핀락 인스턴스 owner 값을 +1만큼 증감한다고 배웠습니다.

이제 [2] 번 프로세스가 임계 영역 실행을 마치고 스핀락을 해제했습니다. spin_unlock() 함수를 실행하니 스핀락 인스턴스 중 owner를 +1만큼 증감해서 0x3이 됐습니다.
[3]번 프로세스는 스핀락 인스턴스를 계속 읽으면서 스핀락 인스턴스 owner 값이 0x3이 되기를 기다리고 있었습니다. 그런데 스핀락 인스턴스 owner 값이 0x3이니 스핀락을 획득하고 무한 루프를 빠져나갑니다.
스핀락 기본 동작과 함께 누군가 스핀락을 획득했을 때 스핀락 동작에 대해서 알아봤습니다. 코드 분석으로 다음과 같은 중요 포인트를 알 수 있습니다.
1. 스핀락은 코드 구현도가 아주 간단합니다. 스핀락 코드 구현부는 어셈블리 코드 기준으로 매우 짧은 루틴입니다.
2. 스핀락을 획득하지 못하면 계속 기다립니다.
이 점으로 임계 영역을 스핀락을 걸어서 보호할 때 코드 실행 시간이 짧아야 합니다. 왜나면 다른 프로세스들이 스핀락 획득을 못 하면 계속 기다리기 때문입니다.
#Reference 시스템 콜
Reference(프로세스)
Reference(워크큐)
워크큐(Workqueue) Overview
최근 덧글