Linux Kernel(4.19) Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

8200
629
98815


[리눅스커널] 시간관리: 커널 타이머 실행 전체 흐름도 알아보기 7장. 타이머관리

커널에서 동적 타이머 처리 과정을 이해하려면 Soft IRQ 전체 실행 흐름 과정을 알아야 합니다.
다음 그림을 같이 볼까요?  
 
[그림 8.5] 커널 타이머 전체 실행 흐름도

위 그림에서 [1]~[4] 숫자가 보일 것입니다. 각 숫자는 Soft IRQ 전체 흐름도에서 동적 타이머를 처리하는 단계를 의미합니다. 동적 타이머 처리 과정을 알아볼까요?

1단계: TIMER_SOFTIRQ 아이디로 Soft IRQ 서비스 요청

타이머 인터럽트가 발생하면 [1]번 화살표 흐름으로 인터럽트 벡터부터 run_local_timer() 함수까지 실행합니다.  

    run_local_timer() 함수에서 TIMER_SOFTIRQ 아이디로 Soft IRQ 서비스 요청을 
     합니다. 

콜스택을 유심히 보면 __irq_svc가 보이니 이 함수는 인터럽트 컨택스트에서 실행한다는 사실을 알 수 있습니다.

2단계: Soft IRQ 컨택스트 시작

인터럽트 처리를 마무리한 다음 irq_exit() 함수를 호출합니다. irq_exit() 함수는 Soft IRQ 서비스 실행의 출발점입니다.  

3단계: Soft IRQ 서비스 요청 점검

irq_exit() 함수에서 Soft IRQ 서비스 요청 여부를 확인합니다. 이미 1 단계에서 TIMER_SOFTIRQ 아이디로 Soft IRQ 서비스 요청을 했습니다. 따라서 invoke_softirq() 함수는 __do_softirq() 함수를 호출합니다. 

    __do_softirq() 함수에서 Soft IRQ TIMER_SOFTIRQ 서비스의 핸들러인 
    run_timer_softirq() 함수를 호출합니다.

4단계: 등록된 동적 타이머 실행
__run_timers() 함수를 호출해 per-cpu 타입 변수인 timers_base 전역 변수에 접근해 만료될 동적 타이머들을 로딩합니다. 타이머 해시 테이블에 등록된 struct timer_list 주소를 로딩해 동적 타이머 핸들러 함수를 호출합니다.

커널 타이머는 Soft IRQ 서비스 중 하나로 처리하므로 Soft IRQ 처리 흐름에 대해 잘 알아야 합니다. Soft IRQ 서비스 전체 흐름도는 6.6절에서 상세히 다룹니다. 


이제부터 위 그림에서 살펴본 단계별로 세부 코드를 분석하겠습니다.

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

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



핑백

덧글

댓글 입력 영역