스핀락
Posts
24 posts[라즈베리파이] 동기화 - 인터럽트 발생으로 레이스 컨디션 발생
이번에는 인터럽트 발생으로 Race가 발생하는 경우를 알아보겠습니다. 그동안 어떤 함수도 인터럽트가 발생하면 실행을 멈추고 인터럽트 벡터로 프로그램 카운터를 이동하고 인터럽트 핸들러와 서브 루틴을 실행합니다. 그런데 인터럽트 발생하기 전에 실행을 멈춘 함수가 인터럽트가 발생해서 다시 실행할 수 있습니다. 이를 확인하기 위해 다음 패치 코드를 입력합시다.diff --git a/mm/slub.c b/mm/slub.c--- a/mm/slub.c+++ b/mm/slub.c@@ -3740,10 +3740,42 @@ static int __init setup_slub_min_objects(char *str) __setup("slub_min_objects=", setup_slub_min_objects); 1 +ex
[라즈베리파이] 커널동기화 - 임계영역(Critical Section)이란
리눅스 커널이나 운영체제에서 임계영역(Critical Section)이나 커널 동기화를 설명할 때 화장실을 예를 많이 듭니다. 하나밖에 없는 화장실 문에 있는 자물쇠를 잠그고 용무를 보는 상황입니다. 위 상황을 리눅스 커널 동기화 과정과 빗대서 생각해 봅시다. 첫 번째, 자물쇠는 화장실 문에 있는 잠금장치입니다. 누구나 화장실에 들어갈 때 화장실 문을 잠급니다. 화장실에 들어갈 때 먼저 화장실 문에 있는 자물쇠가 잠겨 있나 확인하는 습관입니다. 화장실 잠금장치는 여러 가지 종류가 있듯 리눅스 커널에도 스핀락, 뮤텍스 기법에 따라 자물쇠 잠금 방법이 다릅니다. 두 번째, 화장실에서 용무는 딱 한 사람만 볼 수 있습니다. 화장실에서 두 사람이 동시에 들어갈 수 없습니다. 유일하게 한 사람이 일을 보는 순
mutex lock vs spinlock ( 재현 상황 )
특정 함수나 콜스택 동작에서 lock을 두 번 획득하려고 했을 때 mutex lock과 spinlock 재현 상황은 아주 달라요. busy-waiting이라는 말을 들어보셨나요? spinlock은 lock을 획득하기 전까지 사채업자 같이 계속 특정 루프를 돌면서 계속 기다려요.ticket spinlock의 멤버 중에 owner와 next값이 있잖아요. owner가 next와 같으면 spinlock을 획득할 수 있는 조건이거든요.그 조건을 만족할 때 까지 계속 기다리죠. 계속 기다린다는 건 뭘 뜻할까요? 혹시나 spinlock_irq 함수를 호출하면요?preemption이 동작하지 않고 IRQ도 trigger되지 않게 되거든요. 대부분의 경우 spinlock 동작에 문제가 생기면 Watchdog Rese
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
![[웹툰단행본] 『통제구역관리부』 1권 후기 : 이상한 변칙과 기이한 일들이 일어나는 공간에 대하여](https://img.zoomtrend.com/2026/06/09/1780996474-SE-5eda86fa-0d63-4afd-b8dd-b801879fed52.jpg)


![[CV] [Comi] 'あかね噺'(아카네 이야기) 22권. 아카네의 첫 전력 승부](https://img.zoomtrend.com/2026/06/08/1780982081-EC9D8CEC9585EC9D98EBA6ACEB93ACEC9CBCEBA19C.jpg)