Arm Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

1048
469
422440


[라즈베리파이] 동기화 - 스핀락(spinlock): spin_lock() 함수 분석 9. 커널 동기화(spinlock/mutex)

스핀락을 획득할 때 쓰는 spin_lock()와 함수의 선언부를 봅시다.
static __always_inline void spin_lock(spinlock_t *lock);

입력 인자는 포인터 타입 lock 변수이며 spinlock_t 구조체입니다. lock이란 변수가 가르키는 메모리 공간에 스핀락 인스턴스가 있는 겁니다.

 함수 선언부가 void이니 반환 값은 없습니다. __always_inline 매크로로 선언했으니 커널 함수 내에서 자주 호출되는 함수임을 알 수 있습니다.

다음은 스핀락을 해제할 때 쓰는 spin_unlock()와 함수의 선언부를 봅시다.
static __always_inline void spin_unlock(spinlock_t *lock);

spin_lock() 함수와 마찬가지로, 입력 인자는 포인터 타입 lock 변수이며 spinlock_t 구조체입니다. 함수 선언부가 void이니 반환 값은 없습니다. 

 
* 유튜브 강의 동영상도 있으니 같이 들으면 좋습니다.




"혹시 궁금한 점이 있으면 댓글로 질문 남겨주세요. 아는 한 성실히 답변 올려드리겠습니다!" 

Thanks,
Austin Kim(austindh.kim@gmail.com)

#Reference(커널 동기화)
커널 동기화 기본 개념 소개
레이스 발생 동작 확인
커널 동기화 기법 소개
스핀락
뮤텍스란
커널 동기화 디버깅


# Reference: For more information on 'Linux Kernel';

디버깅을 통해 배우는 리눅스 커널의 구조와 원리. 1

디버깅을 통해 배우는 리눅스 커널의 구조와 원리. 2


Thanks,
Austin Kim


repository:
http://rousalome.egloos.com/10025741







핑백

덧글

  • 조용한 에스키모 2020/11/25 16:18 # 답글

    안녕하세요. 책 2개다 사서 아주 잘보고 있습니다! 질문이 있을때 마다 바로바로 해야 되는데 아무래도 책을 한번더 봐야할 것 같습니다. 한번에 소화될 내용들도 아니고 ㅎㅎ

    계속 드는 의문인데 함수를 감싸고 구현부도 없이 이름만 바뀌고하는 이유를 알 수 있을까요? 초보자에게 설명해봤자 의미가 없는 질문일수는 있는데 계속 궁금해서 여쭤보고 싶네요 ㅎㅎ
  • AustinKim 2020/11/25 16:48 #

    먼저, 책을 진지하게 읽어주셔서 감사합니다.
    아래와 같이 질문을 주셨는데요;

    * '함수를 감싸고 구현부도 없이 이름만 바뀌고하는 이유를 알 수 있을까요?'

    조금 더 구체적인 예시를 들어주시면 확인 후 답을 드릴 수 있을 것 같습니다.
    감사합니다.
  • AustinKim 2020/11/25 16:47 # 답글

    ...
  • 조용한 에스키모 2020/11/25 17:14 # 답글

    넵, 좀전에 보던거 하나 예시로 드리면
    spin_lock()이 구현부 없이 raw_spin_lock()을 감싸고, raw_spin_lock()이 _raw_spin_lock()으로 치환되고 실제 구현되는 부분은 __raw_spin__lock에 있는데 이런 경우가 여러번 보니 계속 궁금해지네요 ㅎㅎ
    언더바가 들어가면 커널 함수라고 배웠던것 같은데 언더바 하나일 때 둘일때도 어떤 룰이 있을까요?
  • AustinKim 2020/11/25 17:21 #

    언더바가 하나나 둘인 경우도, 마찬가지로 커널 내부 코어 함수에서 호출됩니다.
  • 조용한 에스키모 2020/11/25 17:16 # 답글

    아... 그리고 C코드로도 표현이 되는데 굳이 arch_spin_lock 구현부를 어셈블리어로 작성한 것은 스핀락을 빨리 처리하려고 한건가요?
  • AustinKim 2020/11/25 17:21 #

    어셈블리 명령어로 코드를 구성하면, 말씀하신대로 더 빠른 속도로 코드가 수행됩니다.
    참고로, arch_ 라는 접두사가 붙은 함수들은 아키텍처(arm, arm64, x86, riscv)에 의존적인 동작을 수행합니다.
댓글 입력 영역