본문 바로가기
운영체제 OS

[운영체제] 스핀락 / 뮤텍스 / 세마포어

by 까망 하르방 2024. 11. 11.
반응형

동기화 관리 필요성

멀티 코어 시스템에서는 여러 프로세스가

동시 실행하여 성능 향상 시킬 수 있다.

 

하나의 공유 자원을
여러 프로세스가 동시에 사용하면 문제가 발생할 수 있다.
ex) 다른 한 개가 읽는 중간에 다른 하나가 값을 바꾸어 오류가 발생할 수 있다.

 

 

크리티컬 섹션

'임계 영역(= Critical Section)' 으로 프로세스 동시 접근하는데
문제가 발생하지 않도록
한 번에 하나의 프로세스만 이용하도록 하는 것이다.
즉, 점유 하는 동안 다른 프로세스 접근을 제한한다.


스핀 락 (Spin Lock)

임계구역(critical section)에 진입 불가능할 때

진입 가능할 때까지 루프(Loop) 돌며 재시도하는 방식 (Busy Waiting)

 

Lock 걸려있다고

바로 Context Switching 하지 않고

기다려주는 것인데

Context Switching에 사용되는 비용을 줄일 수 있다.

오랫동안 풀리지 않는다면 오히려 CPU 효율을 떨어뜨릴 수 있다.


뮤텍스

크리티컬 섹션이 하나의 프로세스 내

스레드 사이에서만 동기화 가능하다면

뮤텍스는 여러 프로세스의 스레드 사이에서 동기화 가능하다.

 

스핀락처럼 계속 기다리지 않고 Sleep 상태로 들어갔다

Wakeup 되면 다시 권한 획득 시도

성능에 영향을 주고 싶지 않고 길게 처리해야하는 작업에 주로 사용

 

 

세마포어

지정된 수만큼 스레드가 동시에 실행 허용

세마포어는 음수가 아닌 정수 값으로 스레드 간 공유되는 변수

 

 

Q) 뮤텍스 vs 세마포어

• 세마포어는 뮤텍스가 될 수 있지만, 뮤텍스는 세마포어가 될 수 없다.

• 세마포어는 소유할 수 없지만, 뮤텍스는 소유할 수 있고 소유자가 책임 진다.

• 세마포어는 하나 이상 동기화 할 수 있지만, 뮤텍스는 1개만 동기화 된다.

반응형

댓글