My Boundary As Much As I Experienced

세마포어(Semaphore) & 뮤텍스(Mutex) 본문

Computer Basics

세마포어(Semaphore) & 뮤텍스(Mutex)

Bumang 2023. 9. 12. 08:08

세마포어 : 멀티프로그래밍 환경에서 공유 자원에 대한 접근을 제한하는 방법

 

공유된 자원에 여러 프로세스가 동시에 접근하면서 문제가 발생할 수 있다.

이때 공유된 자원의 데이터는 한 번에 하나의 프로세스만 접근할 수 있도록 제한을 둬야 한다.

 

이를 위해 나온 것이 바로 '세마포어'

 

임계 구역

여러 프로세스가 데이터를 공유하며 수행될 때, 각 프로세스에서 공유 데이터를 접근하는 프로그램 코드 부분

 

 

 

세마포어 P, V 연산

P : 임계 구역 들어가기 전에 수행 ( 프로세스 진입 여부를 자원의 개수(S)를 통해 결정)

V : 임계 구역에서 나올 때 수행 ( 자원 반납 알림, 대기 중인 프로세스를 깨우는 신호 )

// P(S);
procedure P(S)   --> 최초 S값은 1임
    while S=0 do wait  --> S가 0면 1이 될때까지 기다려야 함
    S := S-1   --> S를 0로 만들어 다른 프로세스가 들어 오지 못하도록 함
end P

// --- 임계 구역 ---

// V(S);
procedure V(S) --> 현재상태는 S가 0임
    S := S+1   --> S를 1로 원위치시켜 해제하는 과정
end V

 

(사용하냐 안 하냐를 나타내는 것이니 0과 1로만 표현 가능)

 

1. 먼저 들어간 프로세스가 들어가기 전에 입장권한을 0으로 만든다.

2. 나중에 들어갈 프로세스가 입장권한이 0이니 대기한다.

3. 먼저 들어간 프로세스가 나올 때 입장권한을 또 1로 만든다.

4. 나중에 들어갈 프로세스가 다시 입장권한을 0으로 만들고 들어간다.

5. 계속...

 

 


뮤텍스 : 임계 구역을 가진 스레드들의 실행시간이 서로 겹치지 않고 각각 단독으로 실행되게 하는 기술

상호 배제(Mutual Exclusion)의 약자임

해당 접근을 조율하기 위해 lock과 unlock을 사용한다.

  • lock : 현재 임계 구역에 들어갈 권한을 얻어옴 ( 만약 다른 프로세스/스레드가 임계 구역 수행 중이면 종료할 때까지 대기 )
  • unlock : 현재 임계 구역을 모두 사용했음을 알림. ( 대기 중인 다른 프로세스/스레드가 임계 구역에 진입할 수 있음 )

 

뮤텍스는 상태가 0, 1로 이진 세마포어로 부르기도 함

 

'Computer Basics' 카테고리의 다른 글

페이지 교체 알고리즘  (0) 2023.10.05
페이징 & 세그멘테이션  (0) 2023.10.05
경쟁 상태(Race Condition)  (0) 2023.09.12
동기식 (Synchronous) / 비동기식 (Asynchronous) 이란?  (0) 2023.09.05
데드락(Deadlock)  (0) 2023.09.05