본문 바로가기
Operating System

동기화(Synchronization)

by Doromi 2019. 4. 17.
728x90
반응형

프로세스 동기화란?

프로세스들이 공유 자원을 사용할 때 일련의 규칙을 지키도록 하는 것

상호 협력하는 다수의 프로세스들이 공유 자원 혹은 데이터를 사용하는 경우,
경쟁 상태(Race Condition)으로 인해 그 공유 자원을 신뢰할 수 없게 된다.

경쟁 조건이란?

여러 프로세스가 공유 데이터를 동시에 접근할 때 공유 데이터에 대한 접근 순서에 따라 
실행 결과가 달라지는 상황

 

임계 구역(Critical section)
둘 이상의 프로세스 혹은 쓰레드가 공유하는 자원이지만 동시에 둘 이상의 프로세스가 
접근 할 수는 없고 특정 시간에 오직 하나의 프로세스만 접근 가능한 코드 영역

EX) 은행 계좌
은행 계좌는 입금과 출금 동기화가 올바로 이루어져야 은행 시스템을 신뢰할 수 있다.

입금 프로세스가 처리되고 있는 중간에 문맥 교환 (Context Switching)이 발생하여
출금 프로세스가 처리되면 안된다.

따라서 출금 과 입금하는 부분이 임계 구역이 되어야 한다.

EX) 생산자 - 소비자 문제(Producer-Consumer Problem) = 유한 버퍼 문제
생산자가 아이템을 생산하여 버퍼에 담고, 소비자가 버퍼에 있는 아이템을 꺼내서 소비한다.
이때 버퍼에 동시 진입이 가능하다면 데이터의 변화가 따로 발생할 수 있으므로 

버퍼는 임계 구역이 되어야 한다.

 

 EX) 식사하는 철학자
철학자는 식사를 하기 위해서 양쪽 손에 포크를 모두 집어야 한다.

 

식사하는 철학자

 어떤 철학자가 양쪽의 포크를 잡고 식사 중이라면 어떤 철학자는 식사를 할 수 없다.
이때, 포크가 임계 구역이 되어야 한다.

 

 

따라서,,,,경쟁 상태가 일어나지 않게 하기 위해선
다른 쓰레드가 이미 작업 중인 경우 작업이 끝날 때까지 기다릴 수 있도록 지원해야 한다.


 


 

뮤텍스(Mutex) 과 세마포어

뮤텍스란?

Mutual Exclusion(상호 배제) 라고도 한다.

임계구역을 가진 쓰레드들의 실행 시간을 서로 겹치지 않게 단독으로 실행하게 하는 기술
프로세스들의 공유 리소스에 대한 접근을 조율하기 위해 Locking / UnLocking 을 사용
뮤텍스 객체를 두 쓰레드가 동시에 사용할 수 없다.

EX) 공용 화장실
음식점에서 손님이 화장실을 가기위해 열쇠를 가져간다. 그 다음 손님이 화장실에 가려면
앞 손님이 열쇠를 반납해야 갈 수 있다. 이렇게 열쇠가 있는 경우에만 공유자원(화장실)에 접근 가능
이게 바로 뮤텍스이다. Lock에 대한 소유권이 있다. 열쇠를 획득한 사람만 반납 가능.

세마포어란?
프로세스간의 시그널을 주고받기 위해 사용되는 정수 값, 리소스의 상태를 나타내는 카운터
세마포어의 값에 따라 운영체제는 프로세스가 즉시 자원을 사용할 지,
자원이 다른 프로세스에 의해 사용 중인걸 알게 될 경우에 일정 시간을 기다린다.
프로세스가 자원을 사용하는 동안에는 세마포어 값을 변경함으로써 다른 프로세스들이 기다리게 한다.

EX) 병실의 의자 갯수
병실에 방문객용 의자가 5개 있다. 간호사는 이 병실에 방문자가 5명만 들어갈 수 있도록 허용하고,
나머지 방문객들은 밖에서 대기하도록 한다. Counter갯수만큼 공유자원(병실)에 접근 할 수 있다.

 


뮤텍스와 세마포어의 차이점

  1. 세마포어는 뮤텍스가 될 수 있지만, 뮤텍스는 세마포어가 될 수 없다.
    뮤텍스는 상태가 1,0 두개 뿐인 binary Semaphore

  2. 세마포어는 소유할 수 없는 반면, 뮤텍스는 소유가 가능하며 소유주가 이에 대한 책임을 진다.
    (뮤텍스의 경우 상태가 두개 뿐인 lock이므로 lock을 가질 수 있다.)

  3. 뮤텍스의 경우 뮤텍스를 소유하고 있는 쓰레드가 이 뮤텍스를 해제할 수 있다.
    하지만 세마포어의 경우 이러한 세마포어를 소유하지 않는 쓰레드가 세마포어를 해제할 수 있다.

  4. 세마포어는 시스템 범위에 걸쳐있고 파일시스템상의 파일 형태로 존재한다.
    반면, 뮤텍스는 프로세스 범위를 가지며 프로세스가 종료될 때 자동으로 clean up된다.

"

뮤텍스는 동기화 대상이 하나일 때 사용하고,
세마포어는 동기화 대상이 하나 이상일 때 사용한다"

 

 

728x90
반응형

'Operating System' 카테고리의 다른 글

Process VS Thread  (0) 2024.04.01
운영 체제  (0) 2019.05.03
데드락  (0) 2019.04.17
쓰레드(Threads)  (0) 2019.04.17
프로세스 생애주기, 스케쥴링  (0) 2019.04.17