[운영체제] 뮤텍스와 세마포어

지니🧸·2023년 4월 7일
0

CS 저장소

목록 보기
8/48
post-custom-banner

🎭 임계구역

임계 구역, Critical section: 여러 프로세스/스레드가 작업을 수행하면서 공유된 자원을 건드리게 될 수 있는데, 프로그램 코드 상에서 공유 자원에 접근하는 부분

  • 임계 구역에 여러 프로세스/스레드가 함부로 접근할 수 없도록 관리하는 방식: 세마포어, 뮤텍스

🎭 뮤텍스

뮤텍스, Mutex: 동시프로그래밍에서 공유 불가능한 자원의 동시사용을 피하기 위한 알고리즘

  • 임계구역을 가진 스레드들의 실행시간이 겹치지 않고 각각 단독으로 실행되도록 함 > 상호배제 (Mutual Exclusion)
  • 한 프로세스에 의해 소유될 수 있는 key를 기반으로 한 상호배제
    • key에 해당하는 어떤 객체가 있으며, 이 객체를 소유한 스레드/프로세스만이 공유자원에 접근 가능
  • 다중 프로세스들의 공유 리소스에 대한 접근을 조율하기 위해 동기화/락 사용
  • 뮤텍스 객체를 두 스레드가 동시 사용할 수 없음

🎭 세마포어

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

  • 공유자원의 상태로 나타낼 수 있는 카운터로 생각하자
    • 사용하고 있는 스레드/프로세스의 수를 공통으로 관리하는 하나의 값을 이용해 상호배제 달성
      • 운영체제/커널의 한 지정된 저장장치 내의 값
    • 일반적으로 비교적 긴 시간을 확보하는 리소스에 대한 이용
  • 공유 자원에 접근할 수 있는 프로세스의 최대 허용치만큼 동시에 사용자가 접근 가능
  • 각 프로세스는 세마포어의 값을 확인하고 변경할 수 있음
  • 자원을 사용하지 않는 상태가 될때 대기하던 프로세스가 즉시 자원 사용
  • 이미 다른 프로세스에 의해 사용중이라는 사실 인지하면 재시도 전에 일정시간 대기
  • 세마포어를 사용하는 프로세스는 그 값을 확인하고 자원을 사용하는 동안에는 그 값을 변경해서 다른 세마포어 사용자들이 대기하도록 해야 함
  • 세마포어는 이진수를 사용하거나 추가적인 값 사용 가능

🎭 뮤텍스 vs. 세마포어

  1. 동기화 대상의 개수:
  • 뮤텍스: 동기화 대상이 딱 1개일 때
  • 세마포어: 동기화 대상이 1개 이상일 때
  1. 뮤텍스는 자원 소유 가능.
  • 세마포어는 자원 소유 불가
  1. 뮤텍스는 뮤텍스를 소유하고 있는 스레드만이 뮤텍스 해제 가능
  • 세마포어는 세마포어를 소유하지 않는 스레드가 세마포어 해제 가능
  1. 세마포어는 시스템 범위에 걸쳐 있고 파일 시스템 상의 파일로 존재
  • 뮤텍스는 프로세스의 범위. 프로세스 종료될때 자동 clean up

🎭 이진세마포어와 뮤텍스의 차이

뮤텍스는 lock을 설정한 프로세스만이 lock을 해제할 수 있음
이진 세마포어는 lock을 설정한 프로세스와 해제하는 프로세스가 서로 다를 수 있음

자원의 소유권을 가질 수 있는지의 차이


profile
우당탕탕
post-custom-banner

0개의 댓글