SPIN_LOCK
Posts
4 posts[라즈베리파이] 동기화 - 스핀락(spinlock): spin_lock_irq() 소개
이해를 돕기 위해 다시 화장실을 예를 들겠습니다. 어떤 영업 사원이 있다고 가정하겠습니다. 영업 사원은 언제 전화를 받는 것이 회사 규칙입니다. 그런데 이 영업 사원은 화장실에 들어갈 때 전화를 안 받아도 된다고 회사와 약속을 했습니다. 화장실에서 중요한 용무를 봐야 하기 때문입니다. 그 조건으로 화장실 문에 들어갈 때는 비행기 모드로 바꾸고 화장실에서 나올 때는 반드시 비행기 모드를 풀어야 합니다. 여기서 전화를 인터럽트 그리고 화장실 문에 들어간 상태를 임계 영역이라고 바꿔서 생각해봅시다. 이 영업 사원은 화장실에서 용무를 볼 때 전화가 오지 않으니 방해을 안 받습니다. 스핀락을 얻어 임계 영역을 실행 중에 인터럽트를 실행을 막는 상태입니다. 임계영역이 다음과 같은 코드 흐름일 때 임계 영역에서
[라즈베리파이] 동기화 - 스핀락(spinlock): 두 번째 스핀락 해제 시 동작(2)
스핀락을 해제할 때 spin_unlock() 함수를 호출하며 이 때 스핀락 인스턴스 owner 값을 +1만큼 증감한다고 배웠습니다. 이제 [2] 번 프로세스가 임계 영역 실행을 마치고 스핀락을 해제했습니다. spin_unlock() 함수를 실행하니 스핀락 인스턴스 중 owner를 +1만큼 증감해서 0x3이 됐습니다. [3]번 프로세스는 스핀락 인스턴스를 계속 읽으면서 스핀락 인스턴스 owner 값이 0x3이 되기를 기다리고 있었습니다. 그런데 스핀락 인스턴스 owner 값이 0x3이니 스핀락을 획득하고 무한 루프를 빠져나갑니다. 스핀락 기본 동작과 함께 누군가 스핀락을 획득했을 때 스핀락 동작에 대해서 알아봤습니다. 코드 분석으로 다음과 같은 중요 포인트를 알 수 있습니다.1.스핀락은 코드 구현도가
[라즈베리파이] 동기화 - 스핀락(spinlock): spin_lock() 함수 분석
스핀락을 획득할 때 쓰는 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() 함수와 마찬가지로
spin_lock() vs spin_lock_irq() vs spin_lock_irqsave() - 분석
자 그 동안 궁금해왔던 아래 API들의 차이점에 대해서 알아보는 시간을 갖도록 하겠습니다.spin_lock(), spin_lock_irq(), spin_lock_irqsave() 리눅스 커널 책에서 마르고 닳도록 설명을 많이 하고 있는데요. 직접 소스를 열어서 분석하는게 가장 좋은 리눅스 커널을 마스터하는 길인 것 같아요. 소스 코드가 오픈되어 있잖아요. 1> spin_lock()아래 순서로 실제 구현부는 __raw_spin_lock() 함수 라는 걸 알 수 있어요. spin_lock -> raw_spin_lock -> __raw_spin_lockstatic inline void spin_lock(spinlock_t *lock){ raw_spin_lock(&lock->rlo

![[CV] [Comi] 'ファイブスター物語'(더 파이브 스타 스토리즈) 19권. 연재분에서 벌어지는 '검성 대 검성'](https://img.zoomtrend.com/2026/06/06/1780766083-ECB2ABEB93B1EC9EA5EB8DB0ECBD94EC8AA4.jpg)


