동기화 객체의 종류 & 뮤텍스와 세마포어의 차이

송해광·2022년 9월 26일
0

OS

목록 보기
3/8

동기화 객체

동기화 객체 : 커널에서 제공하는 객체로서 쓰레드 사용시 문제되는 자원의 공유시 충돌에 대한 해법을 제시!!

1. 쓰레드 동기화 방법

-> 실행순서의 동기화 ( 쓰레드 실행순서를 정의하고 반드시 따르도록 하는 것 )
-> 메모리 접근에 대한 동기화 ( 동시접근을 철저히 막는 방법 )

2. 동기화 기법 종류

2-1. 유저 모드 동기화

-> 커널 코드가 실행되지 않는 동기화 기법
-> 성능상 이점이 있으나 기능상의 제한
ex) Critical Section 기반 동기화, 인터락 함수 기반 동기화

2-2. 커널 모드 동기화

-> 커널에서 제공하는 동기화 기능을 활용하는 방법
-> 커널 모드로 변경 필요, 성능 저하 대신 다양한 기능 활용 가능
ex) 뮤텍스 기반 동기화, 세마포어 기반 동기화

뮤텍스와 세마포어의 차이

뮤텍스 ( Mutex )

  • 공유된 자원의 데이터를 여러 "쓰레드" 가 접근하는 걸 막는 것!
  • 상호배제라고 하며, Critical Section을 가진 쓰레드의 Running time이 서로 겹치지 않도록 각각 단독으로 실행하게 하는 기술
  • 다중 프로세스들의 공유 리소스 접근을 막기 위해 synchronized 또는 lock을 사용
  • 동기화 제한 시간 설정 가능(기본값 = 무한대) -> Lock에서 UnLock이 안 되면 다른 쓰레드가 접근 못해서 데드락 가능 ( 데드락 방지를 위해 제한 시간 설정 )
  • 뮤텍스 객체를 두 쓰레드가 동시 사용 불가!

세마포어 ( Semaphore )

  • 공유된 자원의 데이터를 여러 "프로세스" 가 접근하는 걸 막는 것!
  • 일반적으로 비교적 긴 시간을 확보하는 리소스에 대해 이용
  • 공유 리소스에 접근 가능한 프로세스의 최대 허용치만큼 사용자가 접근 가능
  • 각 프로세스는 세마포어 값을 확인하고 변경 가능 ( 사용 X 자원 = 즉시 사용 가능, 이미 다른 프로세스에 의해 사용 중 = 일정 시간 대기 )
  • 이진수 ( 0 또는 1 )를 사용하거나 추가 값 가능

차이점

  • 관리 동기화 대상의 개수
  • Semaphore -> Mutex (가능), Mutex -> Semaphore (불가능)
  • Semaphore 소유 불가, Mutex 소유 가능 ( 소유자가 책임 )
  • Semaphore는 소유하지 않는 쓰레드가 해제 가능, Mutex는 소유하고 있는 쓰레드가 해제 가능
  • Semaphore는 시스템 범위에 걸쳐있고, Mutex는 프로세스 범위를 가짐.
  • Semaphore는 파일시스템의 파일 형태로 존재, Mutex는 프로세스가 종료될 때 자동으로 clean up

참고자료 : https://landwhale2.github.io/os/69/

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=brosvaby&logNo=168498270

profile
끝까지 해보고 하는 후회는 반성이 되어 앞을 보게 하지만 끝까지 하지 않고 하는 후회는 미련이 되어 뒤를 보게 한다.

0개의 댓글