최초 프로세스 생성 분석

EEEFFEE·2023년 12월 6일

raspberrypi4-kernel

목록 보기
3/12
post-thumbnail

23.12.06 최초 작성

1. init 프로세스 생성 과정

1.1 메모리 영역 확보

  • init/main.c

    • kernel_start() : 커널을 시작하는 함수, setup_arch() 호출
  • arch/arm64/kernel/setup.c

    • setup_arch() : arm코어 설정하는 함수, 메모리를 초기화 하는 기능 수행

kernel_start()에서 setup_arch() 호출

setup_arch()에서 메모리 초기화

1.2 프로세스 최초 생성 과정 (initd)

  • init/main.c

    1. kernel_start() : 커널을 시작하는 함수, arch_call_rest_init() 호출

    2. arch_call_rest_init() : rest_init() 함수 호출

    3. rest_init() : kernel_thread() 함수를 호출 해 initd 프로세스 생성

    4. cpu_startup_entry() : 익셉션을 유발해 el0에서 exec() 호출

  1. /kernel/fork.c

    • kernel_thread() : kernel_clone_args에 넘겨받은 인자를 저장하고 kernel_clone() 함수 호출

    • kernel_clone() : copy_process() 호출 해 프로세스를 복사, trace_sched_process_fork()호출 해 익셉션 처리, wake_up_new_task()를 통해 생성한 프로세스 깨움

  • rest_init()kernel_thread()를 통해 initd 프로세스를 생성하는 부분
  • kernel_thread()에서 kernel_clone()함수 호출
  • copy_process(), trace_sched_process_fork(), wake_up_new_task() 호출

0개의 댓글