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 필요의 경우 | 반드시 뮤텍스 |