스케줄러 분석

EEEFFEE·2023년 12월 6일

raspberrypi4-kernel

목록 보기
4/12

23.12.06 최초 작성

1. do_exit()

  • /kernel/exit.c
    • profile_task_exit() : 태스크 디스크립터에 종료할 것을 알림
    • exit_signals() : 익셉션 핸들러를 호출
    • perf_event_exit_task() : 해당 태스크 종료 시 작동하는 이벤트
    • exit_notify() : 고아 프로세스 처리
    • do_task_dead() : __schedule() 호출

  • profile_task_exit() 에서 태스크 디스크립터에 종료할 것을 알림
  • exit_signal()에서 익셉션 핸들러 호출
  • exit_notify()
  • do_task_dead()에서 __schedule() 호출

2. __schedule()

  • /kernel/sched/core.c
    • smp_processor_id() : smp_processor_id() : 현재 프로세스가 실행 중인 cpu번호 가져 옴, 이를 바탕으로 clock을 구동 함
    • update_rq_clock() : 타이머 핸들러를 호출 해 cpu의 시간을 일정 시간만큼 증가시킴
    • prev = rq->curr을 통해 해당 프로세스가 선점 상태인지 검사하고 선점상태가 아니면 signal pending을 검사해 TASK_RUNNING상태로 설정
    • pick_next_task() : 스케줄러의 정책을 검사해 다음 프로세스 결정

  • prev = rq->curr을 통해 프로세스 상태 확인
  • pick_next_task() 호출

3. scheduler_tick()

  • /kernel/sched/core.c
    • smp_processor_id() : 현재 프로세스가 실행 중인 cpu번호 가져 옴, 이를 바탕으로 clock을 구동 함
    • update_rq_clock() : 타이머 핸들러를 호출 해 cpu의 시간을 일정 시간만큼 증가시킴
    • perf_event_task_tick() : tick발생 시 이벤트 호출
  • update_rq_clock()호출 시 익셉션 핸들러 호출

0개의 댓글