Guillermo Austin Kim
Posts
998 posts[리눅스커널] 스핀락 플러그인 함수: spin_lock_irq()/spin_unlock_irq()
리눅스 커널 코드를 조금만 분석하면 spin_lock() 함수뿐만 아니라 spin_lock_irq() 함수를 써서 임계 영역을 보호하는 코드를 많이 볼 수 있습니다. 이렇게 커널은 스핀락 기능을 확장한 플러그인 형태 스핀락 함수들을 제공합니다. 이번 소절에서는 spin_lock() 함수 기능을 확장한 스핀락 플러그인 함수를 소개합니다. spin_lock_irq()/spin_unlock_irq() 먼저 spin_lock_irq()/spin_unlock_irq() 함수를 리눅스 커널에서 지원하는 이유를 알아보고 세부 코드를 분석하겠습니다. spin_lock_irq()/spin_unlock_irq() 함수가 생겨난 이유는 무엇일까? spin_lock_irq()/spin_unlock_irq() 함수 코드
[리눅스커널] 시그널 전달: get_signal() 함수 분석
get_signal() 함수는 시그널 처리 과정의 핵심 역할이며 다음과 같은 처리를 합니다. 펜딩된 시그널 정보 가져오기 ftrace 메세지 출력 시그널 핸들러 설정 유무 파악 스레드 그룹 종료 이어서 get_signal() 함수를 분석합시다. [https://github.com/raspberrypi/linux/blob/rpi-4.19.y/kernel/signal.c]1 int get_signal(struct ksignal *ksig)2 {3 struct sighand_struct *sighand = current->sighand;4 struct signal_struct *signal = current->signal;5 int signr;...6 for (;;) {7 struct k_
[리눅스커널] 시그널 전달: do_work_pending()/do_signal() 함수 분석
이번 소절에서는 다음 함수 분석으로 프로세스가 자신에게 전달된 시그널을 처리하는 과정을 살펴보겠습니다. do_work_pending() do_signal() do_work_pending() 함수 분석do_work_pending() 함수 코드는 다음과 같습니다. [https://github.com/raspberrypi/linux/blob/rpi-4.19.y/arch/arm/kernel/signal.c]1 asmlinkage int2 do_work_pending(struct pt_regs *regs, unsigned int thread_flags, int syscall)3 {4 trace_hardirqs_off();5 do {6 if (likely(thread_flags & _TIF_NEED_RE
[리눅스커널] 바닐라 리눅스 커널 빌드(컴파일)해보기
이번 시간에는 바닐라 리눅스 커널 소스를 내려 받고 빌드해보는 시간을 갖겠습니다. 바닐라 리눅스 커널 빌드하기 리눅스 커널을 빌드하려면 먼저 커널 코드를 먼저 내려받야 합니다. 이를 위해 다음 명령어를 입력해볼까요? git clone 다음은 터미널에서 리눅스 커널 소스를 내려 받는 과정을 보여줍니다.austindh.kim:~/src/torvalds_kernel$ git clone into 'linux'...remote: Sending approximately 1.22 GiB ...remote: Counting objects: 8354, doneremote: Finding sources: 100% (3097/3097)remote: Total 6872242 (delta 5804269), reused
[리눅스커널] 프로세스는 언제 시그널을 받을까? __irq_usr 레이블 코드 분석
프로세스가 자신에게 시그널이 전달됐는지 확인하는 다른 지점은 __irq_usr 레이블입니다.유저 공간에서 코드를 실행 중 인터럽트가 발생하면 __irq_usr 레이블을 실행합니다. 이번 소절에서는 __irq_usr 레이블 소스 분석을 통해 프로세스가 시그널을 받는 과정을 살펴보겠습니다. 유저 공간에서 코드 실행 중 인터럽트가 발생했을 때 __irq_usr 이란 인터럽트 벡터를 실행합니다. 이 동작은 다음과 같은 ftrace 로그로 확인할 수 있습니다.01 chromium-browse-1322 [000] d.h. 1519.742814: irq_handler_entry: irq=86 name=mmc102 chromium-browse-1322 [000] d.h. 519.742815: bcm2835_



