세마포어 & 뮤텍스

다혜·2022년 3월 23일
0

Computer Science

목록 보기
3/4
post-thumbnail
post-custom-banner

✅ 임계구역

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

  • 공유된 자원에 여러 프로세스 or 스레드가 동시에 접근하면서 문제가 발생할 수 있다.
  • 한 프로세스가 임계 구역을 수행할 때는 다른 프로세스가 접근하지 못하도록 해야한다.
  • 이를 위한 대표적인 방식으로 세마포어와 뮤텍스가 있다.



✅ 세마포어

✔ 공유 자원에 여러 프로세스 or 스레드가 접근하는 것을 제한하는 방법.
현재 공유 자원의 상태를 나타내는 카운터 변수를 사용한다.
✔ 이 변수는 운영체제 또는 커널에 값으로 저장된다.

세마포어는 칸이 여러 개인 화장실로 비유된다. 사용 가능한 화장실 수 (카운터 변수)가 있고, 누군가 들어가면 카운터 변수에서 1을 뺀다. 나올 때는 1을 더해준다.

  • 세마포어는 카운터 변수에 0혹은 1과 같은 이진수 외에 더 큰 값을 가질 수 있다.
  • 따라서 꼭 한개의 프로세스만이 자원을 점유하지는 않는다.
  • 카운터 변수의 값을 조정하여 접근 가능한 프로세스 갯수를 통제할 수 있다.

🔄 세마포어 P, V 연산

  • S : P와 V 연산만으로 접근 가능한 세마포어 변수. 공유 자원의 갯수를 의미.
  • P : 임계 구역에 들어가기 전에 수행.
  • V : 임계 구역에서 나올 때 수행.



✅ 뮤텍스

✔ 상호 배제(Mutual Exclusion)를 뜻하는 말.
✔ 임계 구역을 가지는 스레드들의 실행시간이 겹치지 않고 단독으로 실행되게 하는 기술.
LockUnlock 개념을 사용하며 이진 세마포어와 같은 개념.

뮤텍스는 칸이 하나뿐인 화장실로 비유된다. 열쇠가 있으면 화장실을 사용 가능하다는 뜻이고 열쇠를 이용해 화장실에 들어갈 수 있다. 열쇠가 없으면 대기해야한다.

  • 자원을 점유한 대상이 Lock을 할 수 있는 권한을 가지고, 자원을 점유하기 시작할 때 LOck을 건다.
  • 다른 대상들은 Unlock 상태가 될 때까지 기다린다.

🔄 뮤텍스 알고리즘

  1. 데커 알고리즘
  2. 피터슨 알고리즘
  3. 베이커리 알고리즘



❓ 차이점

✔ 세마포어는 공유 자원에 세마포어의 변수만큼의 프로세스 or 스레드가 접근 가능.
✔ 뮤텍스는 오직 1개의 프로세스 or 스레드가 접근 가능.

✔ 세마포어는 현재 공유 자원을 사용 중인 대상 외에 다른 프로세스 or 스레드도 잠금 상태 해제 가능.
✔ 뮤텍스는 Lock을 가진 변수만이 Unlock 가능.

✔ 뮤텍스는 동기화 대상이 1개일 때 사용, 세마포어는 동기화 대상이 1개 이상일 때 사용.







💛 참고 :
https://velog.io/@logandev/%EC%84%B8%EB%A7%88%ED%8F%AC%EC%96%B4%EC%99%80-%EB%AE%A4%ED%85%8D%EC%8A%A4-%EC%B0%A8%EC%9D%B4

profile
봉식이를 위한 개발을 하고 싶오
post-custom-banner

0개의 댓글