반응형
250x250
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Cloud
- 프로그래밍
- 블록체인
- GeorgiaTech
- 암호화폐
- 퀀트
- 개발자
- 파이썬
- TOEFL
- backtrader
- 클라우드
- AUTOSAR
- 실시간시스템
- probability
- 비트코인
- toefl writing
- 아마존 웹 서비스
- 자동매매
- realtimesystem
- 임베디드
- 백트레이더
- AWS
- it
- can
- python
- 확률
- 오토사
- 토플
- 자동차sw
- 토플 라이팅
Archives
- Today
- Total
Leo's Garage
RTS 환경 하에 Mutex, Semaphore 그리고 Spinlock 비교 본문
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; // Unlock728x90
반응형
'Study > Real Time Systems' 카테고리의 다른 글
| Priority-Driven Scheduling of Periodic Tasks (Dynamic Priority) - 2 (1) | 2025.06.08 |
|---|---|
| Priority-Driven Scheduling of Periodic Tasks (Dynamic Priority) - 1 (1) | 2025.06.08 |
| Scheduler라는 개념은 왜 필요한가? (0) | 2025.05.12 |
| Reference Model (0) | 2025.04.20 |
| Monolithic Design Approach (0) | 2025.04.19 |