이름에서 유추할 수 있듯이, 시스템에 관련된 동작을 수행하는 신호입니다.
좀 더 정확하게 들어가면,
app의 요청에 따라서 커널에 접근하기 위한 인터페이스입니다.
파일을 읽거나 쓰기/다른 프로세스의 정보를 알고 싶지만
app단계에서는 권한이 낮기 때문에
더 높은 권한에게 부탁한다고 보시면 편합니다.
2024.03.15 - [CS지식 학습] - 익셉션(Exception)
익셉션 레벨에 대해서 아시는 분들이라면 이해가 편하실 겁니다.
EL0단계에서 EL1에 해당하는 동작을 수행할 수 없습니다.
실행권한이 낮기 때문이죠.
그렇기에 유저프로세스(일반적인 app)은 시스템에 관한 동작을 수행할 수 없습니다.
그렇다고 EL1단계까지 발생하는 동작을 모두 알아야한다거나
EL1단계에서 app을 만든다면 프로그래머입장에서는
개발난이도가 너무 높습니다.
그럴때에 유저프로세스는 상위단계에
"저 이런 거 하고싶습니다"라고 요청을 해서
시스템과 관련된 동작을 수행한다고 보면 되겠습니다.
ftrace메세지 예시를 들고왔습니다.
제가 말씀드릴 부분을 각기 다른 색으로 표시했습니다.
시스템 콜 번호,시스템 핸들러 콜 이름입니다.
시스템 콜 번호 63번(NR 63)
시스템 핸들러 콜 이름은 _arm64_sys_read입니다.
Time stamp라고 불릅니다.
상단은 시작시간(7760.760695)
하단은 종료시간(7760.760699)
두 시간차이를 빼면 수행작업 시간이 나옵니다.
(0.000004sec)
시스템 콜을 수행한 목적을 파악할 수 있습니다.
vfs_read라는 함수를 호출하고 있습니다.
(함수코드는 아래 bootlin스샷 참조)
vfs 파일시스템에 접근하여 파일을 읽는 동작을 수행합니다.
어플리케이션 단계에서 생각해보면, 사용자의 특정 파일을 읽는데 활용이 됩니다.
예를들면 게임프로그램에서 이전 사용자의 정보를 불러와서 순위정보를 체크한다거나
은행 어플에서 사용자의 개인정보를 호출하는데 사용하는 등등
여러가지 사례를 생각할 수 있습니다.
해당 시스템 콜을 수행한 프로세스 정보입니다.
프로세스 명은 rpi_proc_exit입니다.
stack trace정보상 맨 아랫단에 위치하기 때문에
가장 처음에 불러온 프로세스임을 파악할 수 있고
이 프로세스부터 관련 함수를 하나씩 호출한다고 이해하시면 됩니다.
프로그래머스 데브코스 리눅스/커널 전문가 과정
GIC (0) | 2024.04.18 |
---|---|
스택카나리(Stack canary) (0) | 2024.04.10 |
익셉션(Exception) (0) | 2024.03.15 |
인터럽트 (1) | 2024.03.13 |
Memory Mapped IO (0) | 2024.03.12 |
댓글 영역