Arm Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

8179
1390
307630


[리눅스커널] 프로세스: thread_info 구조체 - cpu 필드에 대한 상세 분석 4. 프로세스(Process) 관리

thread_info 구조체의 cpu 필드는 프로세스가 실행 중인 CPU 번호를 저장합니다. 그러면 현재 코드가 어떤 CPU에서 구동 중인지 알려면 어떤 함수를 써야 할까요? 커널에서 제공하는 smp_processor_id() 함수를 호출하면 됩니다. 

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




#프로세스

프로세스 소개 
프로세스 확인하기  
프로세스는 어떻게 생성할까?  
유저 레벨 프로세스 실행 실습  
커널 스레드  
커널 내부 프로세스의 생성 과정   
프로세스의 종료 과정 분석  
   * 프로세스 종료 흐름 파악    
   * do_exit() 함수 분석   
   * do_task_dead() 함수 분석   
   * do_task_dead() 함수를 호출하고 난 후의 동작    
태스크 디스크립터(task_struct 구조체)  
   * 프로세스를 식별하는 필드   
   * 프로세스 상태 저장   
   * 프로세스 간의 관계   
   * 프로세스 연결 리스트   
   * 프로세스 실행 시각 정보   
스레드 정보: thread_info 구조체  
   * thread_info 구조체란?   
   * thread_info 구조체 분석    
   * thread_info 구조체의 주소 위치는 어디일까?  
   * 컨텍스트 정보 상세 분석    
      ** 인터럽트 컨텍스트 실행 정보 저장  
      ** Soft IRQ 컨텍스트 실행 정보 저장  
      ** 선점 스케줄링 여부 확인    
   * cpu 필드에 대한 상세 분석   
   * thread_info 구조체 초기화 코드 분석   
프로세스의 태스크 디스크립터에 접근하는 매크로 함수  
   * current 매크로란?   
   * current_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/10025056



핑백

덧글

  • 2020/04/28 02:28 # 삭제 답글 비공개

    비공개 덧글입니다.
  • AustinKim 2020/04/28 10:16 #

    1. 이 책을 읽을 수 있는지 ...

    * C 언어만 이해하면 '디버깅을 통해 배우는 리눅스 커널의 구조와 원리'이란 책을 읽고 이해할 수 있도록 구성해서 무리는 없을 것 같습니다.

    * 시스템 프로그래밍을 하시다가 커널이 어떻게 동작하는지 궁금하실 시점에 이 책을 보시면 더 좋을 것 같습니다.
    어떤 주제에 대해 등떠 밀려서 공부하는 것보다 뭔가 알고 싶단 호기심이 있을 때 더 빨리 배울 수 있거든요.

    2. 안드로이드 커널에 대해서..

    * 안드로이드 커널은 리눅스 커널의 소스 코드를 가져다가 안드로이드 구조에 맞게 커스터마이즈한 커널입니다.
    라즈베이 파이의 리눅스 커널과 우분투의 커널도 마찬가지입니다. 리눅스 커널 소스를 라즈베리 파이, 우분투에 맞게 커스터마이즈한 거죠.

    다음 공식으로 이해하면 무방합니다.
    * 안드로이드 커널 = 리눅스 커널 + 안드로이드에 맞게 구현된 리눅스 드라이버

    3. GDB를 사용하는지

    * 리눅스 개발자들은 GDB를 많이 사용합니다.

    4. 실력 있는 리눅스 개발자분들은 윈도 커널 관련해서도 공부를 하면 금방 적응

    * 리눅스 커널의 고수들은 윈도 커널을 접하면 쉽게 적응할 가능성이 매우 높습니다.
    프로세스나 인터럽트에 대한 동작은 운영체제마다 구현 방식은 다르나 기본 동작 원리는 비슷한 경우가 많기 때문입니다.

    (그런데 리눅스 커널의 고수들 중에 윈도 커널을 배우려는 분은 사실 상 거의 없습니다.
    요즘 운영체제의 대세가 리눅스로 넘어온지 오래라, 리눅스 프로젝트에서도 할 일이 많이 때문이죠.)

    5. ,window nt, max os, ios 커널은 어떻게 분석

    * 위에 언급된 운영체제는 소스 코드가 오픈돼 있지 않습니다.
    따라서 마이크로소프트나 애플의 커널 개발자 이외의 일반인은 위에 언급된 커널을 소스 코드 레벨로 분석할 수 없습니다.

    충분히 답을 드렸는지 모르겠네요. 즐거운 하루 보내시고 더 궁금하신 점이 있으면 댓글을 주시면 됩니다.

    Thanks,
    Austin Kim
  • AustinKim 2020/04/28 10:17 # 답글

    1. 이 책을 읽을 수 있는지 ...

    * C 언어만 이해하면 '디버깅을 통해 배우는 리눅스 커널의 구조와 원리'이란 책을 읽고 이해할 수 있도록 구성해서 무리는 없을 것 같습니다.

    * 시스템 프로그래밍을 하시다가 커널이 어떻게 동작하는지 궁금하실 시점에 이 책을 보시면 더 좋을 것 같습니다.
    어떤 주제에 대해 등떠 밀려서 공부하는 것보다 뭔가 알고 싶단 호기심이 있을 때 더 빨리 배울 수 있거든요.

    2. 안드로이드 커널에 대해서..

    * 안드로이드 커널은 리눅스 커널의 소스 코드를 가져다가 안드로이드 구조에 맞게 커스터마이즈한 커널입니다.
    라즈베이 파이의 리눅스 커널과 우분투의 커널도 마찬가지입니다. 리눅스 커널 소스를 라즈베리 파이, 우분투에 맞게 커스터마이즈한 거죠.

    다음 공식으로 이해하면 무방합니다.
    * 안드로이드 커널 = 리눅스 커널 + 안드로이드에 맞게 구현된 리눅스 드라이버

    3. GDB를 사용하는지

    * 리눅스 개발자들은 GDB를 많이 사용합니다.

    4. 실력 있는 리눅스 개발자분들은 윈도 커널 관련해서도 공부를 하면 금방 적응

    * 리눅스 커널의 고수들은 윈도 커널을 접하면 쉽게 적응할 가능성이 매우 높습니다.
    프로세스나 인터럽트에 대한 동작은 운영체제마다 구현 방식은 다르나 기본 동작 원리는 비슷한 경우가 많기 때문입니다.

    (그런데 리눅스 커널의 고수들 중에 윈도 커널을 배우려는 분은 사실 상 거의 없습니다.
    요즘 운영체제의 대세가 리눅스로 넘어온지 오래라, 리눅스 프로젝트에서도 할 일이 많이 때문이죠.)

    5. ,window nt, max os, ios 커널은 어떻게 분석

    * 위에 언급된 운영체제는 소스 코드가 오픈돼 있지 않습니다.
    따라서 마이크로소프트나 애플의 커널 개발자 이외의 일반인은 위에 언급된 커널을 소스 코드 레벨로 분석할 수 없습니다.

    충분히 답을 드렸는지 모르겠네요. 즐거운 하루 보내시고 더 궁금하신 점이 있으면 댓글을 주시면 됩니다.

    Thanks,
    Austin Kim
댓글 입력 영역