Arm Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

35111
637
415411


[리눅스커널] 프로세스: exit() 함수로 프로세스가 종료되는 과정 및 ftrace 로그 분석 4. 프로세스(Process) 관리

이전 절에서 유저 프로세스에게 종료 시그널을 전달했을 때 유저 프로세스가 소멸되는 흐름을 살펴봤습니다. 그런데 유저 프로세스는 '종료' 시그널을 받아 소멸될 수 있지만 프로세스가 POSIX exit 시스템 콜을 호출해서 스스로 종료할 수도 있습니다. 

유저 공간에서 어떤 함수를 호출하면 리눅스 커널에서 어떤 함수 흐름으로 코드가 실행되는지 전체 그림을 그리면서 파악하는 것이 중요합니다.

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




#프로세스

프로세스 소개 
프로세스 확인하기  
프로세스는 어떻게 생성할까?  
유저 레벨 프로세스 실행 실습  
커널 스레드  
커널 내부 프로세스의 생성 과정   
프로세스의 종료 과정 분석  
태스크 디스크립터(task_struct 구조체)  
스레드 정보: thread_info 구조체  
프로세스의 태스크 디스크립터에 접근하는 매크로 함수  
프로세스 디버깅  
   * glibc의 fork() 함수를 gdb로 디버깅하기  

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

Thanks,
Austin Kim(austindh.kim@gmail.com)

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

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

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



repository
http://rousalome.egloos.com/10024841

    핑백

    덧글

    • 최재국 2020/07/07 21:04 # 삭제 답글

      위에서 armv7 프로세서는 파이프라인을 적용한 아키텍처라서 실제 호출되는 코드의 주소보다 +0x04바이트 오프셋을 출력한다는 것입니다. 라고 나와있는데
      그럼 ftrace로 찍힌 오프셋은 기준이 디코딩때인건가요?
    • AustinKim 2020/07/12 17:50 #

      ftrace는 아키텍처와 무관하게 작동하는 리눅스 커널의 트레이싱 피쳐입니다.
      커널 로그에서도 실제 주소보다 +4만큼의 주소를 출력하는데, ftrace로 마찬가지로 이 정보를 출력합니다.
    • 2020/07/12 17:50 # 답글 비공개

      비공개 덧글입니다.
    • 속좁은 눈의여왕 2021/08/11 01:39 # 답글

      안녕하세요.

      책 167쪽에 보면 sys_exit_group() 함수를 어셈블리코드에서 찾는 부분이 있는데, 여기서 궁금한 점이 있습니다.

      __wake_up_parent() 함수로부터 0x0 떨어진 것이 실제로는 (0x0-0x4)만큼 떨어졌다는 의미이고, 책 기준으로 보면 (0x801213e4 - 0x4) = (0x801213e0) 이 됩니다.
      그 함수를 보면 do_group_exit()가 나오는데, 이 부분이 호출된다는 의미가 곧 sys_exit_group()이 호출된다는 의미라서 시스템 콜이 호출됨을 알 수 있다고 이해했습니다.

      (일단 이게 맞는지 모르겠네요.. ㅎ)

      궁금한건 __wake_up_parent+0x0/0x30 이 곧 sys_exit_group+0x1c/0x1c 라고 적어주셨는데, 그러면 sys_exit_group으로부터 (0x1c - 0x4)만큼 떨어진 곳, 즉 (0x801213c4 + 0x1c - 0x4) = (0x801213dc) 가 나오는데 실제로는 0x801213e0 값이 나와야하지 않나요?

      제가 커널은 처음이라 계산을 정확히 한건지 몰라서 문의드립니다.

      p.s. 책 진짜 너무 좋은 것 같아요~ 저같은 초보로 그냥 따라하면 에러없이 잘 되네요 ㅎㅎ
    • AustinKim 2021/08/11 04:58 #

      ftrace 메시지에서 보이는 모든 주소에서 0x4만큼 뺀 주소가 실제 실행되는 주소라고 보시면 됩니다.
      다른 주소를 찾아 보시면 이 내용을 확인할 수 있습니다.

      감사합니다.
    • 속좁은 눈의여왕 2021/08/13 23:04 #

      아하!! 0x1c를 적어주신게 0x4를 안뺐을 때의 실제 계산을 적어주신거였군요!
      이해했습니다!! ㅎㅎ

      답변 감사합니다!
    댓글 입력 영역