[리눅스커널] 프로세스: 유저 프로그램 실행 흐름 추적하기
By Guillermo Austin Kim | 2019년 7월 14일 |
리눅스 시스템에서는 빌트인으로 제공하는 프로그램이 있습니다. 이를 명령어 형태로 쓰고 있는데 이 프로그램은 실행할 때 프로세스 포멧으로 구동합니다. ftrace 로그로 각 프로그램(프로세스)이 어떻게 생성, 실행 및 종료하는지 확인합시다. ftrace 로그 설정하기ftrace 로그 설정 코드는 다음과 같습니다.1 "echo 1 > /sys/kernel/debug/tracing/events/sched/sched_process_exec/enable"2 "echo 1 > /sys/kernel/debug/tracing/events/sched/sched_process_exit/enable"3 "echo 1 > /sys/kernel/debug/tracing/events/sched/sched_proc
[리눅스커널] 메모리관리: 가상 주소를 물리 주소로 직접 변환해보기
By Guillermo Austin Kim | 2019년 7월 25일 |
지금까지 가상 주소를 물리 주소로 변환하는 원리를 배웠습니다. 이어서 이번에는 실제 가상 주소를 물리 주소로 변환하는 과정을 살펴보겠습니다. 다음 그림을 같이 보겠습니다. [그림 14.21] 가상 주소를 물리 주소로 변환하는 예시 위 그림에서 페이지 테이블 관련 시스템 정보는 다음과 같습니다.변환 테이블 시작 주소: 0x8000_4000가상 주소: 0x807A_0A8C 먼저 변환 테이블 시작 주소는 0x8000_4000입니다. 그리고 변환하려는 가상 주소의 [31:20]은 16 진수로 807입니다. 다음 계산식으로 레벨1 페이지 테이블 엔트리 주소를 계산할 수 있습니다.0x8000_4000 + ((0x807A_0A83 >> 20) << 2)0x8000_4000 + ((0
[라즈베리파이] 시그널 - 시그널 핸들러 실행 및 커널 복귀 과정
By Guillermo Austin Kim | 2018년 11월 17일 |
signal은 특정 프로세스에게 어떤 메시지를 전달할 수 있는 가장 기본적인 수단입니다.signal은 다른 (user-level) 프로세스로부터 직접적으로 받거나 혹은 (주로 문제가 될 만한 동작으로인해) 커널로부터 받을 수 있습니다. 이러한 signal은 kernel-mode에서 처리가 되는데 주로 시스템 콜이나 인터럽트 처리 등을 마치고 user-mode로 돌아오기 직전에 해당 프로세스에게 전달된 signal이 있는지 검사하여 실행됩니다.(SMP 커널에서는 user-mode에서 실행 중인 프로세스가 signal을 처리해야 하면 강제로 scheduling하도록 IPI를 보내서 kernel-mode로 들어오게 만들기도 합니다.) signal을 받은 프로세스의 기본적인 반응은 거의 대부분 해당 프로세스의
[리눅스커널] 인터럽트: ftrace와 커널 로그로 인터럽트 컨텍스트 확인해보기
By Guillermo Austin Kim | 2020년 3월 2일 |
이번 절에서는 ftrace 로그를 분석하면서 커널이 인터럽트를 어떻게 처리하는지 알아봅시다. 리눅스 커널에서 커널 동작을 가장 정밀하게 담고 있는 로그는 뭘까요? 아마 많은 리눅스 전문가들은 ftrace라고 대답할 겁니다. ftrace는 리눅스 커널에서 제공하는 가장 강력한 디버그 로그입니다. 리눅스 커널의 공식 트레이서이기도 합니다. 여러분도 ftrace 로그를 자주 활용해서 리눅스 커널을 익히기를 바랍니다. ftrace로 인터럽트를 처리하는 인터럽트 핸들러 함수에 필터를 걸고 콜 스택 로그를 받아 보겠습니다. 인터럽트 동작을 확인하기 위한 ftrace 설정 ftrace로 인터럽트의 동작 방식을 분석하기 전에 ftrace를 설정하는 방법을 소개합니다. 먼저 다음 명령어를 입력해 봅시다. #!/