[운영체제] 공유자원과 임계영역

Wuchang·2023년 7월 12일
0

운영체제

목록 보기
5/9

공유자원

  • 공유자원이란, 시스템 안에서 각 프로세스, 스레드가 함께 접근할 수 있는 모니터, 프린터, 메모리, 파일, 데이터 등의 자원이라 변수를 의미한다.
  • 이 공유자원을 두개 이상의 프로세스나 스레드가 동시에 읽거나 쓰는 상황을 '경쟁상태' 라고 한다 -> 동시접근을 시도할 때 접근의 타이밍이나 순서 등이 결괏값에 영향을 줄수 있는 상태
    두개의 프로세스가 동시에 접근하여 타이밍이 서로 꼬여 정상 결괏값은 300 인데 200이 출력되는 모습니다.

임계영역

  • 임계영역이란, 둘 이상의 프로세스, 스레드가 공유 자원에 접근할 때 순서 등의 이유로 결과가 달라지는 코드 영역을 뜻함
  • 임계 영역을 해결하기 위한 방법은 크게 뮤텍스, 세마포어, 모니터 세가지가 있으며, 이 방법 모두 상호배제, 한정대기, 융통성이란 조건을 만족한다.
    • 한정대기: 특정 프로세스가 영원히 임계 영역에 들어가지 못하면 안 된다.
    • 융통성: 한 프로세스가 다른 프로세스의 일을 방해해서는 안된다.
    • 상호배제: 한 프로세스가 임계영역에 들어갔을 때 다른 프로세스는 들어갈 수 없다.

뮤텍스

뮤텍스는 프로세스나 스레드가 공유 자원을 lock()을 통해 잠금 설정하고 사용한 후에는 unlock()을 통해 잠금해제하는 객체이다. 잠금이 설정되면 다른 프로세스나 스레드는 잠긴 코드 영역에 접근할 수 없고, 해제는 그와 반대이다. 또한 뮤텍스는 잠금 또는 잠금 해제라는 상태만을 가진다.

세마포어

세마포어는 일반화된 뮤텍스로, 간단한 정수 값과 두가지 함수(wait(), sigmal())로 공유자원에 대한 접근을 처리한다.
wait()는 자신의 차례가 올 떄까지 기다리는 함수이며, signal()은 다음 프로세스로 순서를 넘겨주는 함수이다.
세마포어는 바이너리 세마포어, 카운팅 세마포어로 구분할 수 있다.

  • 바이너리 세마포어: 0, 1 두가지의 값만 가질 수 있는 세마포어. 구현의 유사성으로 뮤텍스는 바이너리 세마포어라고도 할 수 있지만, 뮤텍스는 '잠금' 기반으로 상호배제가 일어나는 '잠금 매커니즘'이고, 세마포어는 신호를 기반으로 상호배제가 일어나는 '신호 메커니즘' 이라는 차이가 있다.
  • 카운팅 세마포어: 여러개의 값을 가질 수 있는 세마포어이며, 여러 자원에 대한 접근을 제어하는 데 사용된다.
profile
우창의 개발일지🐈

0개의 댓글