본문 바로가기

개인공부/Micom

Spin lock 스핀락 뜻, Critical section 임계 구역 뜻

반응형

스핀락(Spin Lock) 뜻은? 

임계 구역(critical section)에 진입이 불가능한 경우, 진입이 가능할 때까지 루프를 돌면서 재시도하는 방식으로 구현된 락입니다. 락을 획득할 때까지 해당 스레드가 빙빙 돌고 있다는 말입니다.

스핀락은 OS(Operating System)의 스케줄링 지원을 받지 않습니다. 이에 따라 해당 스레드에 대한 문맥 교환이 일어나지 않습니다. 그러므로 스핀락은 임계 구역에 짧은 시간 안에 진입할 수 있는 경우에 문맥 교환을 제거할 수 있어 효율적입니다. 하지만 만약 스핀락이 오랜 시간을 소요한다면 다른 스레드를 실행하지 못하고 대기하게 되는데요, 이 경우 비효율적입니다. 

spin lock with multi-core

좀 풀어서 쓰자면, Spin lock 은 Lock/Unlock 을 busy waiting 방식으로 하는 것 입니다. single core 는 busy waiting 이면 무한루프에 빠지게 됩니다. 스핀락은 2개 이상의 core를 가지를 운영체계에서 내부적으로 임계 영역 문제를 해결하기 위해 수행됩니다.

Spin lock 이 필요한 경우는 예를 들어 아래와 같습니다. core1과 core2는 독립적으로 각각 실행이 되는 상태에서, core 1 에서 core 2로 어떤 데이터를 전달만 하고 끝나는 작업이 수행되어야 할 때(작업시간이 매우 짧은 경우). 이때 스핀락이 필요합니다.

Critical section diagram from wikipedia

Critical Section (임계 구역)

공통 영역을 2 개 이상 병렬하는 프로세스 혹은 프로그램이 사용되는 경우에 이 영역을 말합니다. 서로 위험 영역을 바꾸어 쓰기 때문에 다른 프로세스에 영향을 미칠 가능성이 있습니다. 이를 피하기 위해서는 세마포(semaphore == 신호기)를 이용하여 각 프로세스 간의 동기를 맞춥니다. 

2개 이상의 프로세스를 동기화하는 방식은 2가지로 나뉩니다. 커널 기능을 사용하지 않고 동기화하는 유저 동기화/ 커널로 전환한 뒤 커널 모드로 수행하는 동기화. critical section은 유저 동기화 방식입니다. 유저 동기화 방식은 커널을 사용하지 않으므로 빠르고 가볍습니다.

critical section 을 사용하는 것의 단점으로는 동일 한 프로세스들 사이의 동기화는 가능하지만, 제 3의 프로세스와의 동기화는 불가능하다는 점 입니다.

반응형