-
반응형
커널에서는 전역적인 system timer(jiffies counter)를 가지고 있다. 이 timer를 이해하기 위해서는 Kernel HZ(jiffies per second)와 jiffies에 대한 이야기를 해야 한다. HZ란 1초에 동일한 주기를 반복하는 횟수이다. jiffies란 시스템 내의 전역적인 변수로써 초당 HZ값만큼 숫자가 증가하게 된다.
즉, 시스템에서는 HZ 값만큼 1초에 인터럽트가 호출(정확함을 위해 타이머 하드웨어로 부터 인터럽트 호출)되고 jiffies의 값이 그 인터럽트를 통하여 증가하게 된다.자 아래의 간단한 예제를 보면 HZ의 값(초당 반복 횟수)이 1000이라고 가정하고 현재 jiffies가 400이라 할 때 , jiffies의 값이 1400이 되면 1초가 지났음을 알 수 있다.
참고로 HZ의 값은 시스템 아키텍쳐 종속적인 부분(하드웨어) 이라 우리가 원하는 값으로 맘대로 변경할수는 없고, 아키텍쳐에서 지원되는 값으로 kernel config를 통해 설정 할 수 있다.
make menuconfig
'/' 누르고 HZ로 검색하면 설정 찾기를 하면 편리하게 설정을 찾아서 수정할 수 있다.
HZ의 값이 클 수록 1초 이하의 시간을 정교하게 컨트롤 할 때 유리하다. HZ가 1000일 때, 1/HZ는 0.001초가 되지만 HZ가 250일 때는 1/HZ는 0.004초가 되기 때문이다.(커널 세계에서는 1초는 무지무지 긴 시간이기 때문에 1초 이하의 컨트롤은 중요한 사항이다). 하지만 HZ가 높을 수록 그만큼 jiffies를 위한 인터럽트가 자주 호출되기 때문에 시스템 부하가 더 생길 수 있는 단점이 있다.
jiffies값은 timer와 인터럽트등과 같이 정해진 주기에 일련의 작업을 할 수 있게 도와준다.
kernel timer, delayed workqueue
간단 예제. 5초 뒤의 값을 저장하고 싶다면?
unsigned long delayed = jiffies + (5*HZ)
local timer interrupts(jiffies)
반응형