반응형
250x250
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

Leo's Garage

RTS 환경 하에 Mutex, Semaphore 그리고 Spinlock 비교 본문

Study/Real Time Systems

RTS 환경 하에 Mutex, Semaphore 그리고 Spinlock 비교

LeoBehindK 2025. 4. 22. 22:55
728x90
반응형

 

구분 Mutex Semaphore SpinLock
역할 상호 배제 (Mutual Exclusion) 자원 개수 제한 + 동기화 빠른 상호 배제 (Busy-wait)
대기 방식 Sleep
(Block, Context Switch 발생)
Sleep
(Block, Context Switch 발생)
CPU 점유
(Spin, Context Switch 없음)
멀티코어 적합성  코어 간 경쟁 발생 시 지연시간 증가 제한된 자원 관리 시 유용 멀티코어에서 짧은 보호구역에 적합
실시간성 우선순위 역전(Priority Inversion) 위험 지연 발생 가능, 예측성 낮음 짧고 결정적인 시간 내 Lock/Unlock
사용 예시 장시간 접근 필요 자원
(ex. 설정 데이터)
Buffer, Queue, Rate Control 인터럽트 핸들러, 짧은 크리티컬 섹션
우선순위 역전 대응 Priority Inheritance 필요 메커니즘 없음 없음 (짧은 시간 내 종료 전제)

 

Mutex

◆ 단점:

  • Sleep 기반이라 Latency 발생
  • 높은 우선순위 Task가 낮은 우선순위 Task 때문에 대기 시, Priority Inversion 문제 발생 
  • Core간 Mutex 공유 시 Cache Coherency 이슈 

Priority Inheritance Protocol(PIP), Priority Ceiling Protocol(PCP) 적용 필수

가능하면, Core Local Mutex로 사용

// Pseudo Code (Priority Inheritance 적용 전제)
mutex_lock(mutex);      // Block 발생 가능성
critical_section();
mutex_unlock(mutex);

 

Semaphore 

◆ 단점:

  • 일반적으로 동기화 목적보다는 자원 카운팅에 사용
  • Block/Sleep으로 인한 지연 --> Hard RTS 부적합
  • 비결정적 동작

Soft RTS, 또는 Periodic Task간 Buffer 관리

ex) Producer-Consumer Pattern, 제한된 Peripheral 자원 접근

wait(semaphore);     // Block 발생 가능
use_shared_resource();
signal(semaphore);

 

Spinlock

◇ 장점:

  • Lock이 필요할 때 즉시 반응, Sleep 없음
  • 멀티코어 환경에서 코어간 빠른 동기화 가능
  • Context Switching 없음 --> Deterministic Behavior (결정적 동작)
  • 주로 커널, ISR, 짧은 Critical Section에서 사용

◆ 단점:

  • 긴 작업에 사용 시 CPU 낭비
  • 싱글코어 환경에서는 비효율적 (멀티 코어 가정 시 OK)
while (test_and_set(lock)) {
    // Spin: 짧게 대기 (CPU 소모)
}

critical_section();

lock = 0;   // Unlock
728x90
반응형