23.11.30 최초 작성
시그널 생성
시그널을 받을 프로세스의 태스크 디스크립터에 시그널을 받을 것이란 정보 저장하고 프로세스를 깨움
시그널 받을 프로세스의 thread_info 구조체의 flags필드에 _TIF_SIGPENDING플래그 포함
wake_up_process()함수 호출해서 시그널 받을 프로세스 깨움
/source/kernel/signal.c
send_signal() : 예외 처리 후 __send_signal() 호출__send_signal() : 태스크 디스크립터의 pending필드에 시그널과 관련된 정보 갱신하고 trace_signal_generate()에서 프로세스를 깨움시그널 수신
thread_info구조체의 flags 필드에 _TIF_SIGPENDING플래그가 포함됐는지 체크/source/arch/arm64/kernel/entry-common.c
el0_svc() : 시스템 콜 핸들러 실행이 마무리된 후 exit_to_user_mode() 호출
exit_to_user_mode() : prepare_exit_to_user_mode()호출
prepare_exit_to_user_mode() : thread_info의 flag필드에 _TIF_SIGPENDING이 설정됐는지 확인
설정됐으면 do_notify_resume()호출
/source/arch/arm64/kernel/signal.c
do_notify_resume() : thread_info의 flag필드에 _TF_NEED_RESCHED 설정됐으면 schedule()호출
아니면 do_signal()호출
do_signal() : 전달받은 시그널에 시그널 핸들러가 설정됐으면 실행, 아니면 시그널 종류에 따른 루틴 실행