Arm Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

46107
469
422678


[리눅스커널] Soft IRQ 서비스는 언제 요청하나? 6. 인터럽트 후반부 처리

이번 시간에는 Soft IRQ 서비스를 어떻게 요청하는지 배워 보겠습니다. 우리는 이전 절에서 Soft IRQ를 등록하는 과정을 배웠습니다. 다음 코드와 같이 open_softirq() 함수를 써서 TIMER_SOFTIRQ 타입의 Soft IRQ 서비스를 등록했습니다.

https://elixir.bootlin.com/linux/v4.19.30/source/kernel/time/timer.c 
1 void __init init_timers(void)
2 {
3 init_timer_cpus();
4 open_softirq(TIMER_SOFTIRQ, run_timer_softirq);
5 }

 TIMER_SOFTIRQ 타입의 Soft IRQ 서비스를 등록만 하면 핸들러 함수인 run_timer_softirq() 함수가 호출될까요? 그렇지 않습니다. 따로 Soft IRQ 서비스를 요청해야 합니다. 인터럽트 핸들러를 등록하는 과정보다 약간 복잡합니다.

전체 Soft IRQ 구조에서 Soft IRQ 서비스를 요청하는 흐름도는 다음과 같습니다.

  
[그림 6.11] Soft IRQ 서비스 요청 시 자료구조

위 그림과 같이 __softirq_pending 변수의 비트 필드 순서는 Soft IRQ 벡터에 대응합니다. 즉, __softirq_pending 변수의 두 번째 비트 필드가 1이면 run_timer_softirq 함수가 호출되는 것입니다.

 
* 유튜브 강의 동영상도 있으니 같이 들으시면 좋습니다.



"이 포스팅이 유익하다고 생각되시면 댓글로 응원해주시면 감사하겠습니다.  
혹시 글을 읽고 궁금점이 있으면 댓글로 질문 남겨주세요. 상세한 답글 올려 드리겠습니다!"


인터럽트 후반부(IRQ 스레드/Soft IRQ) 처리

인터럽트 후반부 기법이란?  
IRQ 스레드(threaded IRQ)  
   * IRQ란?   
IRQ 스레드는 어떻게 생성할까?  
IRQ 스레드는 누가 언제 실행할까?  
IRQ 스레드 디버깅 실습  
Soft IRQ 소개  
Soft IRQ 서비스  
Soft IRQ 서비스는 언제 요청할까?  
Soft IRQ 서비스는 누가 언제 처리할까?  
ksoftirqd 스레드  
Soft IRQ 컨텍스트에 대해  
태스크릿  
Soft IRQ 디버깅  


# Reference: For more information on 'Linux Kernel';

디버깅을 통해 배우는 리눅스 커널의 구조와 원리. 1

디버깅을 통해 배우는 리눅스 커널의 구조와 원리. 2


 
repository-[리눅스커널] Soft IRQ 서비스 핸들러의 등록 과정 실습 
http://rousalome.egloos.com/10025116






    핑백

    덧글

    • 감사합니다 2020/04/07 18:04 # 삭제 답글

      리눅스커널의 이해나 로버트러브 리눅스 책보면서 커널 공부하고 있는데 정말 많은 도움이됩니다. 감사합니다. 책이 어서 출간되면 좋겠습니다.
    • AustinKim 2020/04/08 08:27 #

      도움이 됐다니 다행이네요.
      즐거운 하루 되십시오.

      Thanks,
      Austin Kim
    댓글 입력 영역