본문 바로가기
리눅스/일반 운영체제론

동기화[2] - 뮤텍스 / 세마포어 / 스핀락

by [Akashic Records] 개발의선지자 2024. 8. 13.

※ 해당 글은 개인 공부 기록을 남겨놓는 것이 목적임으로 오류가 발생할수 있습니다.

    오류 또는 업데이트된 사항이 있다면 댓글로 알려주시면 감사하겠습니다.

 

 

지난 동기화[1] 포스팅에서 동기화의 개념과 발생 가능한 문제점에 대해 포스팅 하였습니다.

 

이번 포스팅에서는 동기화로 발생가능한 문제점을 해결하기 위해 대표적인 메커니즘인

뮤텍스 , 세마포어 , 스핀락에 대해 정리한다.

 

뮤텍스(Mutex, Mutualv exclusion , 상호 배제)

 

Lock 메커니즘이며, 한 쓰레드만 Lock을 획득하고 임계 영역에 들어갈수 있도록 보장한다. 

이 스레드는 임계 섹션에서 종료될 때만 Lock을 해제합니다.

 

프로그램이 시작되면 시스템에 특정 리소스에 대한 뮤텍스 개체를 생성하도록 요청합니다. 시스템은 고유한 이름이나 ID를 사용하여 뮤텍스 개체를 생성합니다. 프로그램 스레드가 리소스를 사용하려고 할 때마다  생성한 뮤텍스 개체에 대한 Lock을 차지하고 리소스를 활용하며 사용 후에는 Lock을 해제합니다. 그런 다음 다음 프로세스는 Lock을 획득할 수 있습니다.

 

그 동안 프로세스는 Lock을 획득했으며 다른 스레드나 프로세스는 해당 리소스에 액세스할 수 없습니다. 뮤텍스 개체가 이미 잠겨 있는 경우 Lock을 획득하려는 프로세스는 기다려야 하며 뮤텍스 개체가 잠금 해제될 때까지 시스템에 의해 대기열에 추가된다

 

뮤텍스의 동작 원리

lock: 현재의 임계 구역에 들어갈 권한을 얻어온다. 만일 다른 프로세스/스레드가 임계 구역을 수행 중이라면 종료할때까지 대기한다(entry section).
unlock: 현재 임계 구역 사용이 끝남을 알린다.  끄 대기중인 다른 프로세스/스레드가 임계 구역에 진입할 수 있다(exit section)

 

뮤텍스

 

 

세마포어(Semaphore)

 

세마포어는 동시에 리소스에 접근할 수 있는 갯수를 나타내는 카운터로써,  스레드 간에 공유되는 변수로 존재한다.

Signal 메커니즘이며, 다른 스레드는 세마포어를 기다리고 있는 스레드에 신호를 보낼 수 있습니다.

 

세마포어의 종류

counting semaphore 

-

 

binary semaphore

-

 

count 갯수에 따라서 1개이면 binary semaphore, 여러개이면 counting semaphore

binary semaphore는 뮤텍스와 개념적으로 같다.

 

세마포어의 동작 원리

  • 대기: 대기 연산은 인수 A의 값이 양수인 경우 감소합니다. A가 음수이거나 0이면 아무 작업도 수행하지 않는다.

 

  • 프로세스 동기화를 위한 신호: 신호 연산은 인수 S 의 값을 증가

세마포어

스핀락

임게 구역(critical setion)에 진입 불가능할 때 진입이 가능할 때까지 루프를 돌면서 재시도방식으로 구현된 Lock 메커니즘

 

'리눅스 > 일반 운영체제론' 카테고리의 다른 글

동기화[1] - 개념  (0) 2024.08.07