Linux Kernel(4.19) Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

10200
629
98817


[리눅스커널] 시간관리: timer_after()/timer_before() 함수 소개 7장. 타이머관리

리눅스 커널 내부 코드나 디바이스 드라이버에서 time_after()와 time_before() 함수를 써서 실행 시간과 타이밍을 제어합니다.
보통 함수 처리 시간 체크
실행 시간의 데드라인을 점검

먼저 time_after() time_before() 함수 구현부를 살펴보겠습니다

time_after()와 time_before() 함수 구현부
time_after()와 time_before() 함수 구현부를 보겠습니다.
[https://github.com/raspberrypi/linux/blob/rpi-4.19.y/include/linux/jiffies.h]
1 #define time_after(a,b) \
2 (typecheck(unsigned long, a) && \
3  typecheck(unsigned long, b) && \
4  ((long)((b) - (a)) < 0))
5 #define time_before(a,b) time_after(b,a)

time_before() 함수 구현부를 보면 인자를 서로 바꾼 다음 time_after() 함수를 호출합니다. 

먼저 time_after() 함수를 분석합시다.

1번째 줄 코드를 보면 첫 번째 인자로 a, 두 번째로 b를 받습니다.
2~3번째 줄에서 입력 인자가 정수 타입인지 점검하고, 4번째 줄에서 b에서 a를 빼고 난 결과를 반환합니다.

만약 a가 1000이고 b가 1100이면 어떤 결괏값일까요?
100 = (1100 - 1000) = (b - a)

결괏값이 100이니 0보다 작지 않습니다. 따라서 FALSE을 반환합니다.  a가 b보다 크면 TRUE, 아니면 FALSE을 반환합니다. 

     time_after(a,b) 는  b가 a보다 큰지 체크하는 함수입니다.

반대로 time_before() 함수는 a가 b보다 크면 TRUE, 아니면 FALSE를 반환합니다.

    time_before(a,b) 는  b가 a보다 작은지 체크하는 함수입니다.
 
그러면 이제 time_after(a, b)와 time_before(a,b) 함수에 어떤 인자를 전달할까요? 보통
a에는 현재 시각 정보, b에는 비교하려는 시간 정보를 입력합니다. 둘다 HZ 기준 시간 정보입니다. 다음 소절에서는 time_after()/time_before() 함수를 써서 시간 흐름을 제어하는 예제 코드를 살펴보겠습니다.

#커널 시간관리 목차
커널 타이머 관리 주요 개념 소개
jiffies란
커널 타이머 제어
동적 타이머 초기화
동적 타이머 등록하기
동적 타이머는 누가 언제 실행하나?
라즈베리파이 커널 타이머 실습 및 로그 분석

"혹시 궁금점이 있으면 댓글로 질문 남겨주세요. 아는 한 성실히 답글 올려드리겠습니다!"




핑백

덧글

댓글 입력 영역