본문 바로가기

General/OS & CS

[OS] 세마포(Semaphore)와 뮤텍스(Mutex)


세마포(Semaphore)와 뮤텍스(Mutex)

1. 서론

동기화란 작업들 사이의 수행 시기를 맞추는 것이다. 사건이 동시에 일어나거나, 일정한 간격을 두고 일어나도록 시간의 간격을 조정하는 것을 이른다. 즉, 프로세스의 실행을 시간에 따라 순차적으로 처리하는 것을 말한다.

동기화와 관련된 개념에는 세마포(Semaphore)와 뮤텍스(Mutual Exclusion)가 있다.

 

2. 본론


가. 세마포어(Semaphore)란?

1) 메모리 공간을 공유, 파일들을 공유 액세스하기 위한, 두 가지 정도의 목적을 위해 사용

2) 운영체계의 자원을 경쟁적으로 사용하는 다중프로세스에서 행동 조정 또는 동기화시키는 기술

3) 프로세스 간 데이터를 동기화 하고 보호하려는 목적

4) 한정된 수의 사용자만을 지원할 수 있는 공유 자원에 대한 접근을 통제하는데 유용


나. 세마포어의 작동원리

1) 세마포어는 운영체계 또는 커널의 한 지정된 저장장치 내 값이다.

2) 값의 변경은 P와 V라는 명령에 의해서 이루어진다.

3) 프로세스가 Critical section에 들어가면 P는 세마포의 값을 감소시킨다.

4) 프로세스가 작업수행 후 Critical section에서 나오면 V가 세마포 값을 증가시킨다.

5) 프로세스는 확인되는 값에 따라 자원을 활용, 또는 일정시간을 대기한다.


다. 임계구역(Critical Section)이란?

1) 데이터(Data)에 대한 접근(Access)를 제어한다.

2) 쓰래드(Thred)들 간에 글로벌 데이터를 공유하고자할 때 유용하게 쓰이는 방법이다.

3) Critical section안에서만 데이터 접근이 가능, 한 번에 하나의 프로세스만 들어갈 수 있다.


라. 뮤텍스(Mutex-상호배제)란?

1) 상호간에 비동기적으로 작동하는 쓰래드․프로세스간에 '통신'을 위한 한 방법이다.

2) 다수 쓰래드․프로세스가 공유 리소스에 대한 접근을 리소스를 "locking" 과 "unlocking"을 통해 조율하게된다.

3) Mutex가 설정되어 있는 경우 다른 쓰래드는 Mutex가 해제될 때까지 기다려야만 한다.

4) A쓰래드가 수행되고 B쓰래드가 수행되어야 할 때, A쓰래드가 작업하는 내용을 다른 쓰래드가 참조 변경할 수 없도록 Lock해 두었다가 작업이 끝나면 Unlock을 해 B쓰래드가 그 값을 읽어사용 할 수 있도록 해준다.


마. 뮤텍스와 임계구역(Critical section)의 차이점

1) Critical Section은 좀 더 빠른 처리를 요하는 경우 사용한다.

2) Critical Section은 공유하려는 자원이 프로세스들의 사이를 넘을 수 없는 경우 유용하다. 
   
(단지 쓰레드 사이에서 공유하는 경우, 사용하기에 유용)

3) Mutex는 Lock된 값에 대해 Unlock이 되지 않으면 다른 쓰래드, 프로세스가 접근하지 못한다.

 

3. 결론

세마포는 동기화할 때 임계구역과 연계해 쓰래드간 데이터, 자원을 공유하고자 할 때 유용한 방법으로 사용되고, 뮤텍스는 비동시성으로 일어나는 작업수행간에 작업시 사용하는 데이터, 자원값에대해 다른 쓰래드가 참조/변경할 수 없도록 보호하는 것이다.

 

 

=출처=

http://stone.backrush.com/sunfaq/ljs017.html

http://artwook.tistory.com/entry/뮤텍스mutex와-세마포어semaphore란



2009년 3-1 운영체제 보고서