상세 컨텐츠

본문 제목

시스템 콜의 ftrace 분석을 해보자!

CS지식 학습

by Tabris4547 2024. 4. 2. 13:25

본문

728x90

시스템 콜이란?(syscall)

이름에서 유추할 수 있듯이, 시스템에 관련된 동작을 수행하는 신호입니다.

좀 더 정확하게 들어가면, 

app의 요청에 따라서 커널에 접근하기 위한 인터페이스입니다.

파일을 읽거나 쓰기/다른 프로세스의 정보를 알고 싶지만

app단계에서는 권한이 낮기 때문에

더 높은 권한에게 부탁한다고 보시면 편합니다.

2024.03.15 - [CS지식 학습] - 익셉션(Exception)

 

익셉션(Exception)

익셉션이란? sw개발을 하시는 분들이라면 '예외처리'라는 말을 많이 들어보셨을 겁니다. 어떤 코드가 실행이 될 때 발생하는 예외를 어떻게 처리해야하는지, 흔히 try-catch문으로 잡는다 이런 이

door-of-tabris.tistory.com

익셉션 레벨에 대해서 아시는 분들이라면 이해가 편하실 겁니다.

EL0단계에서 EL1에 해당하는 동작을 수행할 수 없습니다.

실행권한이 낮기 때문이죠.

그렇기에 유저프로세스(일반적인 app)은 시스템에 관한 동작을 수행할 수 없습니다.

그렇다고 EL1단계까지 발생하는 동작을 모두 알아야한다거나

EL1단계에서 app을 만든다면 프로그래머입장에서는 

개발난이도가 너무 높습니다.

그럴때에 유저프로세스는 상위단계에

"저 이런 거 하고싶습니다"라고 요청을 해서

시스템과 관련된 동작을 수행한다고 보면 되겠습니다.

 

ftrace로 보자

 

ftrace메세지 예시를 들고왔습니다.

제가 말씀드릴 부분을 각기 다른 색으로 표시했습니다.

 

빨간색

시스템 콜 번호,시스템 핸들러 콜 이름입니다.

시스템 콜 번호 63번(NR 63)

시스템 핸들러 콜 이름은 _arm64_sys_read입니다.

 

 

주황색

 

Time stamp라고 불릅니다.

상단은 시작시간(7760.760695)

하단은 종료시간(7760.760699)

두 시간차이를 빼면 수행작업 시간이 나옵니다.

(0.000004sec)

 

노란색

 

시스템 콜을 수행한 목적을 파악할 수 있습니다.

vfs_read라는 함수를 호출하고 있습니다.

(함수코드는 아래 bootlin스샷 참조)

vfs 파일시스템에 접근하여 파일을 읽는 동작을 수행합니다.

어플리케이션 단계에서 생각해보면, 사용자의 특정 파일을 읽는데 활용이 됩니다.

예를들면 게임프로그램에서 이전 사용자의 정보를 불러와서 순위정보를 체크한다거나

은행 어플에서 사용자의 개인정보를 호출하는데 사용하는 등등

여러가지 사례를 생각할 수 있습니다.

 

파란색

해당 시스템 콜을 수행한 프로세스 정보입니다.

프로세스 명은 rpi_proc_exit입니다.

stack trace정보상 맨 아랫단에 위치하기 때문에

가장 처음에 불러온 프로세스임을 파악할 수 있고

이 프로세스부터 관련 함수를 하나씩 호출한다고 이해하시면 됩니다.

 

vfs_read에 대한 설명(bootlin)

 

참고자료

 

프로그래머스 데브코스 리눅스/커널 전문가 과정

 

728x90

'CS지식 학습' 카테고리의 다른 글

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

관련글 더보기

댓글 영역