SIGACTION

포스트: 4
Tags

Posts

4 posts

[리눅스커널] 시그널: 유저 공간에서 pause() 함수 호출 시 커널 실행 흐름 파악하기

Guillermo Austin Kim|2019년 6월 22일

유저 공간에서 pause() 함수를 호출하면 커널 공간에서 어떤 함수가 실행할까요? 다음 시그널 설정 흐름도에서 가장 하단에 표시된 박스를 확인합시다. [그림 ] 유저 공간에서 pause() 함수 호출 시 실행 흐름도 pause() 함수는 시그널을 기다릴 때 호출합니다. 라즈베리파이에서 다음 명령어를 입력해 pause 명령어에 대한 매뉴얼을 확인합시다. root@raspberrypi:/home/pi# info pausePAUSE(2) Linux Programmer's Manual PAUSE(2)NAME top pause - wait for signal 매뉴얼에서 출력하는 결과와 같이 시그널을 기다리는 역할을 수행합니다

[라즈베리파이] 시그널 - 커널 공간 시그널 함수 분석 - sys_rt_sigaction()

Guillermo Austin Kim|2018년 12월 12일

먼저 sys_rt_sigaction() 함수 코드를 보기 전에 선언부 코드를 확인합시다.[https://elixir.bootlin.com/linux/v4.14.70/source/include/linux/syscalls.h]asmlinkage long sys_rt_sigaction(int, const struct sigaction __user *, struct sigaction __user *, size_t); 함수 선언부 가장 왼쪽에 있는 asmlinkage 지시자는 어셈블리 코드에서 이 함수를 호출한다는 의미입니다. 조금 더 구체적으로 vector_swi 레이블에서 sys_rt_sigaction() 함수로 분기합니다. sys_rt_sigaction() 함수에 전달하는 인자와 속성은

[라즈베리파이] 시그널 - 시그널 관련 시스템 콜 함수 소개

Guillermo Austin Kim|2018년 12월 5일

시그널 관련 시스템 호출 함수는 다음과 같습니다.함수 이름 동작 시스템 콜 핸들러kill 쓰레드 그룹에 시그널을 보냄 sys_killtkill 프로세스에 시그널을 보냄 sys_tkilltgkill 특정 쓰레드 그룹에 있는 프로세스에게 시그널을 보냄 sys_tgkillsigaction 시그널 속성 설정 sys_rt_sigactionsigpending 펜딩된 시그널이 있는지 점검 sys_rt_sigpendingsigprocmask 블록되어 있는 시그널 집합을 수정 sys_rt_sigprocmasksigsuspend 시그널을 기다림 sys_rt_suspendpause 시그널을 수신할 때 까지 기다림 sys_pause 가장 왼쪽

[라즈베리파이] 시그널 - 커널 공간에서 시그널 설정은 어떻게 할까?

Guillermo Austin Kim|2018년 12월 5일

이전 시간에서 유저 프로세스에서 시그널을 설정하는 코드를 살펴봤습니다. 이번 시간에는 커널에서는 시그널을 설정하면 어떤 동작을 하는지 살펴보겠습니다. 유저 프로세스가 시그널 설정을 위해 리눅스 표준 함수를 쓰면 시스템 콜을 발생해서 해당 시스템 콜 핸들러를 실행합니다. sigaddset()와 같이 시그널 자료구조만 변경하는 함수는 시스템 콜을 발생하지 않고 커널에 시그널 설정을 요청하는 sigaction() 함수나 시그널을 기다리는 pause() 와 같은 함수를 호출할 때 시스템 콜을 발생합니다.