리눅스커널
Posts
154 posts[리눅스커널] 인터럽트 후반부 처리: IRQ 스레드를 깨우는 코드 분석
IRQ 스레드는 누가 언제 실행할까? 이번 절에서는 IRQ 스레드가 어떤 과정으로 실행하는지 살펴보겠습니다. IRQ 스레드는 크게 다음 단계로 실행합니다.1. 인터럽트 핸들러에서 IRQ_WAKE_THREAD 반환2. IRQ 스레드 깨움3. IRQ 스레드 핸들러 실행 IRQ 스레드를 실행하는 출발점은 인터럽트 핸들러가 IRQ_WAKE_THREAD 를 반환하는 시점입니다. 이 부분부터 IRQ 스레드를 어떤 과정으로 깨우는지 세부 동작을 점검하겠습니다. IRQ 스레드를 깨우는 코드 분석 인터럽트가 발생하면 인터럽트 핸들러가 실행됩니다. 이 인터럽트 핸들러가 IRQ 스레드 실행의 출발점입니다. 인터럽트 핸들러에서 IRQ_WAKE_THREAD를 반환하면 해당 IRQ 스레드를 깨웁니다. 예를 들어 92번 “m
[리눅스커널][SoftIRQ] Soft IRQ 서비스란
Soft IRQ를 설명하면서 낯선 용어를 설명했는데, 이제부터 그 의미를 하나하나씩 살펴 보겠습니다. Soft IRQ 서비스란 용어를 소개합니다. Soft IRQ 서비스를 빨리 이해하려면 코드를 먼저 봐야 합니다. Soft IRQ 서비스는 아래 enum으로 정의한 코드와 같습니다.[include/linux/interrupt.h]enum{ HI_SOFTIRQ=0, TIMER_SOFTIRQ, NET_TX_SOFTIRQ, NET_RX_SOFTIRQ, BLOCK_SOFTIRQ, IRQ_POLL_SOFTIRQ, TASKLET_SOFTIRQ, SCHED_SOFTIRQ, HRTIMER_SOFTIRQ, RCU_SOFTIRQ, NR_SOFTIRQS}; const char * const softirq_to_name[
[리눅스커널][시스템콜] ftrace로 시스템 콜 실행 확인하기
시스템 콜 관련 코드를 분석하다 보면 다음과 같은 의문이 생기지 않나요? 평소 시스템 콜은 얼마나 자주 발생할까?시스템 콜 번호는 어떻게 확인할 수 있을까? 이 의문에 대한 답은 ftrace 로그에서 찾을 수 있습니다. 시스템 콜을 ftrace 로 디버깅을 할 수 있기 때문입니다. 이를 위해 ftrace를 다음과 같이 설정합니다.1 "echo 1 > /sys/kernel/debug/tracing/events/sched/sched_switch/enable"2 "echo 1 > /sys/kernel/debug/tracing/events/raw_syscalls/enable"3 "echo 1 > /sys/kernel/debug/tracing/events/irq/irq_handler_entry/e
[리눅스커널][시스템콜] SYSCALL_DEFINEx 매크로로 시스템콜 핸들러 선언
시스템 콜 관련 리눅스 커널 코드를 분석하려고 할 때 만나는 걸림돌은 어느 소스 코드를 봐야할 지 모르겠다는 것입니다. 시스템콜 핸들러 함수는 구현부를 찾기 어렵습니다. 한 가지 예를 들어 봅시다.리눅스 저수준 함수인 write() 와 read() 함수에 대한 시스템 콜 핸들러 함수는 sys_read()와 sys_read() 라고 합니다. 아무리 소스 코드에서 sys_read()와 sys_read() 함수를 검색해도 코드 위치를 찾기 어렵습니다. 그 이유는 시스템 콜 핸들러 함수는 리눅스 커널에서 제공하는 SYSCALL_DEFINE1과 같은 매크로 함수로 선언되어 있기 때문입니다. 시스템 콜 핸들러는 처리하는 인자 갯수에 따라 다음과 같이 선언합니다.SYSCALL_DEFINEx(시스템콜 번호, 1번째


