포스트

임베디드 스터디 - 커널 타이머

임베디드 스터디 - 커널 타이머

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 → 정밀도 부족
  • hrtimerjiffies에 의존하지 않고 하드웨어 클럭을 직접 참조
    • 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/mdelayBusy Wait짧은 대기
msleepSLEEP긴 대기
jiffies 타이머인터럽트 기반ms 단위
hrtimer하드웨어 클럭ns 단위 정밀도
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.