스핀락 (Spin Lock)

I. 동기화 기법, 스핀락의 개념

가. 스핀락의 개념

  • 프로세스가 사용하려는 lock을 타 프로세스 사용 시 명령어 루프를 실행하며 대기하는 locking 매커니즘

나. 스핀락의 특징

SMP 시스템– SMP 시스템 위한 락으로 단일 프로세스에서는 사용 안함
Busy Waiting– 바쁜 대기의 한 종류의 동기화 기법
Spinning– 공유 자원에 대해 두 개 이상의 프로세스가 권한 획득 과정 현상
짧은 크리티컬 섹션에 유용– 문맥교환 소요비용을 줄이는 대신 루프를 돌며 진입가능 여부 체크
  • 오랜시간 크리티컬섹션 사용 시 비효율적(무한대기로 인한 기아)
  • SMP (Symmetric MultiProcessing) 여러 프로세서가 메모리 공유

 

II. 스핀락의 동작원리 및 구현 기법

가. 스핀락의 절차기반 동작 원리

절차도설명
– spin_lock 매크로이용 스핀락 획득, spin_unlock 해제
– 캐리 플래그를 1로 설정하여 0될때까지 spin
– 스핀락이 오랜 시간 소요 시 다른 스레드 실행불가

나. 스핀락의 구현 기법

프로세스구현 기법기법 설명
UP
기반
– Lock() spinlock– preemption 만 disable
– 단순 lock 카운터 증가
SMP
기반
– Lock-Holder Preemption– Critical Section Preemption불가
– CS 미진입 Spin 시 선점 가능
– Ticket 기반 spinlock– 공정한 lock 획득 순서 부여
– Cache Bouncing 문제 제거
  • Cache Bouncing: cache coherent 기능에 의해 두 개 이상의 CPU가 lock 획득 위해 strex 명령 반복, 성능 저하 현상

 

III. 스핀락 기반 효율적 동기화 보완 기법

동기화 상황동기화 기법
– 락(lock) 부담이 적어야 하는 경우스핀락(Spin Lock)
– 락(lock) 사용 시간이 짧은 경우스핀락(Spin Lock)
– 락(lock) 사용 시간이 긴 경우뮤텍스(Mutex)
– 인터럽트(interrupt) 컨텍스트에서 락(lock)을 사용하는 경우반드시 스핀락
– 락 보유 시 sleep 필요의 경우반드시 뮤텍스

 

콘텐츠 사용 시 출처 표기 부탁 드리고, 궁금한 점이나 의견은 댓글 남겨주세요^^