※ 해당 글은 개인 공부 기록을 남겨놓는 것이 목적임으로 오류가 발생할수 있습니다.
오류 또는 업데이트된 사항이 있다면 댓글로 알려주시면 감사하겠습니다.
지난 동기화[1] 포스팅에서 동기화의 개념과 발생 가능한 문제점에 대해 포스팅 하였습니다.
이번 포스팅에서는 동기화로 발생가능한 문제점을 해결하기 위해 대표적인 메커니즘인
뮤텍스 , 세마포어 , 스핀락에 대해 정리한다.
뮤텍스(Mutex, Mutualv exclusion , 상호 배제)
Lock 메커니즘이며, 한 쓰레드만 Lock을 획득하고 임계 영역에 들어갈수 있도록 보장한다.
이 스레드는 임계 섹션에서 종료될 때만 Lock을 해제합니다.
프로그램이 시작되면 시스템에 특정 리소스에 대한 뮤텍스 개체를 생성하도록 요청합니다. 시스템은 고유한 이름이나 ID를 사용하여 뮤텍스 개체를 생성합니다. 프로그램 스레드가 리소스를 사용하려고 할 때마다 생성한 뮤텍스 개체에 대한 Lock을 차지하고 리소스를 활용하며 사용 후에는 Lock을 해제합니다. 그런 다음 다음 프로세스는 Lock을 획득할 수 있습니다.
그 동안 프로세스는 Lock을 획득했으며 다른 스레드나 프로세스는 해당 리소스에 액세스할 수 없습니다. 뮤텍스 개체가 이미 잠겨 있는 경우 Lock을 획득하려는 프로세스는 기다려야 하며 뮤텍스 개체가 잠금 해제될 때까지 시스템에 의해 대기열에 추가된다
뮤텍스의 동작 원리
세마포어(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 |
---|