시그널
Posts
79 posts[리눅스커널][시그널] 시그널 생성: __send_signal() 커널 함수 분석
누군가 ‘시그널을 생성하는 핵심 함수가 무엇인가?’ 라고 질문을 한다면 __send_signal() 함수라고 대답할 수 있습니다. 그렇습니다. 시그널을 생성하는 핵심 함수는 __send_signal() 입니다. 이제부터 __send_signal() 함수 코드를 분석하겠습니다.[https://elixir.bootlin.com/linux/v4.19.30/source/kernel/signal.c]1 static int __send_signal(int sig, struct siginfo *info, struct task_struct *t,2 int group, int from_ancestor_ns)3 {4 struct sigpending *pending;5 struct sigqueue *q;6 int ov
[리눅스커널][시그널] T32: 시그널 생성 과정 디버깅해보기
이전 포스팅에서 커널이 '시그널'을 어떤 방식으로 처리하는지 살펴봤습니다.이전에 배웠던 내용을 리뷰하는 차원으로 '시그널' 처리 과정을 정리해볼까요? 1. 시그널 생성 시그널을 받은 프로세스의 태스크 디스크립터에 시그널 정보를 써주고 해당 프로세스를 깨운다. 2. 시그널 전달 시그널을 받을 프로세스는 깨어나 시그널을 처리한다. 시그널 처리 과정에 대해 소스 코드를 분석했는데 이번에는 __send_signal() 함수에서 시그널을 생성할 때 바뀌는 시그널 자료구조에 대해서 디버깅해보는 시간을 갖겠습니다. 사실 함수 실행 흐름과 자료구조는 '이와 잇몸'의 관계와 같습니다. 조금 더 구체적으로 말씀드리면 다음과 같겠네요. "함수는 자료구조를 읽고 바꾸기 위해 실행한다." "자료구조
[리눅스커널][시그널] 시그널 전달과 처리는 어떻게 할까?
이번 소절에서 분석할 소스 코드를 보면 리눅스 커널이 배경 작업으로 시그널 처리를 위해 얼마나 정교하게 코드 구현이 됐는지 알 수 있습니다. slow_work_pending 레이블에서 do_work_pending() 함수를 브랜치하는 코드를 이전 소절에서 알아봤습니다. 이번에는 do_work_pending() 함수부터 시그널을 처리하는 handle_signal() 함수까지 살펴봅니다. get_signal() 함수 분석 get_signal() 함수를 분석하기 앞서 do_work_pending() 함수를 보겠습니다.[https://elixir.bootlin.com/linux/v4.19.30/source/arch/arm/kernel/signal.c]1 asmlinkage int2 do_work_pending
[리눅스커널][시그널] 커널에서 시그널을 전달하는 진입점은 어디일까?
시그널 전달 진입점 시그널 생성 과정에서 스케줄러에게 시그널을 받을 프로세스 실행 요청을 했습니다. 리눅스 커널은 언제 시그널을 타겟 프로세스에게 전달할까요?출발점은 두 가지 실행 흐름입니다.1> 시스템 콜 핸들러 실행 마무리 후 ret_fast_syscall 레이블2> 인터럽트 핸들링 후 __irq_usr 레이블 이 동작은 리눅스 커널보다 ARM 프로세스가 많은 관여를 합니다. ret_fast_syscall 레이블 분석 유저 프로세스가 시스템 콜 핸들러 실행을 마치면 ret_fast_syscall 레이블로 복귀합니다. ret_fast_syscall와 slow_work_pending 레이블에서 프로세스에게 시그널이 전달됐는지 점검합니다. 해당 코드 분석을 시작하겠습니다.[https:/


