임베디드 스터디 - 커널 타이머
임베디드 스터디 - 커널 타이머
jiffies / HZ
- 커널은 시간을
jiffies라는 단위로 관리함 HZ: 1초당 타이머 인터럽트 횟수 (보통 100, 250, 1000)jiffies: 부팅 이후 발생한 타이머 인터럽트 누적 횟수
1
2
3
4
HZ = 1000 → 1ms마다 jiffies 1 증가
경과 시간(초) = jiffies / HZ
100ms 후 = jiffies + (HZ / 10)
HZ=1000이면 jiffies 최소 단위는 1ms
hrtimer (High-Resolution Timer)
jiffies기반 타이머의 최소 단위는 1 jiffy → 정밀도 부족hrtimer는jiffies에 의존하지 않고 하드웨어 클럭을 직접 참조- 1ns 단위까지 정밀도 제공
1
2
jiffies 타이머 : 1 jiffy 단위 (HZ=1000이면 1ms)
hrtimer : 나노초(ns) 단위
지연 함수
1
2
3
udelay(100); // 100 마이크로초 대기
mdelay(10); // 10 밀리초 대기
msleep(100); // 100 밀리초 대기
udelay/mdelay: Busy Wait — CPU를 점유한 채로 대기- 인터럽트 컨텍스트에서 사용 가능
- 짧은 대기(수µs~수ms)에 적합
msleep: SLEEP — CPU를 양보하고 대기- 인터럽트 컨텍스트에서 사용 불가
- 긴 대기(수ms 이상)에 적합
비교 요약
| 방식 | 인터럽트 컨텍스트 | 적합한 상황 | |
|---|---|---|---|
udelay/mdelay | Busy Wait | ✅ | 짧은 대기 |
msleep | SLEEP | ❌ | 긴 대기 |
jiffies 타이머 | 인터럽트 기반 | ✅ | ms 단위 |
hrtimer | 하드웨어 클럭 | ✅ | ns 단위 정밀도 |
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.