CS/운영체제
스핀락, 뮤텍스, 세마포어
D_Helloper
2023. 3. 19. 18:48
프로세스 동기화
💡 여러 개의 프로세스가 동시에 실행될 때, 서로가 영향을 주지 않도록 프로세스 간의 상호작용을 조절하는 것을 프로세스 동기화라고 함
- 여러 프로세스가 서로 협력해 공유 자원을 사용하는 상황에서 경쟁(race condition)이 발생하면 공유 자원의 신뢰성이떨어짐
Critical Section(임계 영역)
- 공유 데이터를 접근하는 코드 부분을 의미
- 하나의 프로세스만 사용할 수 있는 구역
- 공유되는 자원에서 문제가 발생하지 않도록 독점 보장
- Mutual Exclusion(상호 배제)
- Progress(진행)
- Bounded Waiting(한정 대기)
스핀락(Spinlock)
- 특정한 자료구조를 획득(lock), 또는 해제(unlock) 함으로써 공유 데이터에 대한 접근 권한을 관리하는 방식
- 권한을 획득하기 전까지 CPU는 Busy waiting 상태로 대기하고 있다가 접근 권한을 얻으면 내부 코드를 수행하고 unlock 진행
- 상태가 lock, unlock 둘 뿐이라 하나의 컴포넌트만 접근 가능
- 운영체제의 스케줄링 지원을 받지 않기 때문에 해당 스레드에 대한 Context Switch가 일어나지 않으므로, Critical Secion에 짧은 시간 안에 진입할 수 있는 경우에 효율적.
- 오랜 시간 작업을 유지하게 되는 경우에는 비 효율적

뮤텍스(Mutex)
- 일종의 Locking 매커니즘을 가지고 Lock을 가지고 있을 때에만 공유 데이터에 접근이 가능
- Lcok에 대한 소유권의 개념을 두고, Lock을 가진 사람이 쓰고 되돌려 놓는 방식
- 스핀락과의 차이점은 Busy waiting 이 아닌 sleep 상태로 전환되고, 큐 같은 곳에 넣어 놨다가 차례가 되면 wakeup 시켜 권한을 획득할 수 있도록 동작
- 시스템 전반의 성능에 영향을 주고 싶지 않고 길게 처리해야 하는 작업인 쓰레드와 같은 경우에 주로 사용


세마포어(Semaphore)
- 뮤텍스와 유사한 동기화 기법으로, 공유 자원에 대한 접근을 제어하기 위해 사용 됨
- 뮤텍스와 달리, 여러 개의 프로세스가 동시에 세마포어를 획득할 수 있음
- 카운트가 존재하여 해당 카운트가 점차 줄어들어 0이 되면 그때부터 새로운 프로세스의 접근을 막는 방식으로 동작
- 꼭 Unlock을 Lock한 객체가 진행하지 않아도 됨.
