세마포어
  • 병행처리를 위한 프로세스 동기화 기법
  • 운영체제의 자원을 경쟁적으로 사용하는 다중 프로세스에서, 행동을 조정하거나 동기화하는 기술
  • 다익스트라가 제안
  • 세마포어는 Busy-waiting을 피한다.

세마포어를 이용한 상호배제(Mutual Exclusion)

                    <세마포어 함수 정의>

  • semWait 연산 : 세마포어 값을 확인한다. 세마포어 값을 확인해서 0이면, semWait를 호출한 프로세스를 세마포어 큐에 넣고 블록상태로 전이시킨다.
          만약 세마포어 값이 1이면, 값을 0으로 변경시키고 프로세스는 
          계속 수행된다.
  • semSignal 연산 : 블록되어 있는 프로세스가 존재하는지 확인한다. 만일 블록되어 있는 프로세스가 존재하면 그 프로세스를 깨운다. 반면 블록되어 있는 프로세스가 존재하지 않으면 세마포어 값을 1로 설정한다.

    
            < 세마포어를 이용한 상호배제 >

강성 세마포어 & 약성 세마포어
  • 강성 세마포어 : 큐에 연결된 프로세스들을 깨울 때 선입선출(FIFO) 정책을 사용하는 세마포어.
  • 약성 세마포어 : 큐에 연결된 프로세스들을 깨울 때 순서를 특별히 명시하지 않은 세마포어.


세마포어의 유형
  • Binary Semaphore 
            목적 : 상호배제, 프로세스 동기화
            세마포어 변수: 0 or 1
  • Count Semaphore(general semaphore) 
            목적 : 초기에 동시에 진행가능한 프로세스 개수 정의 가능
            세마포어 변수 : 0,1,2 ....



세마포어와 Mutex의 차이
  • mutex는 객체를 얻거나 반납할 때 사용하는 프로그래밍 플래그이다. 사용하려는 데이터가 공유될 수 없거나 또는 연산이 동시에 수행될 수 없는 경우, mutex가 설정되고 접근/연산을 시도한 프로세스들은 블록된다. 데이터에 대한 접근이 더 이상 필요 없거나 또는 연산이 완료되면 mutex의 락은 해제된다.
  • mutex와 이진 세마포어의 핵심 차이는 mutex의 경우 락을 설정한(값을 0으로 설정한) 프로세스만이 락을 해제할 수 있다. 반면, 이진 세마포어의 경우 락을 설정한 프로세스와 해제하는 프로세스가 서로 다를 수 있다.




'운영체제' 카테고리의 다른 글

캐시 메모리(Cache Memory)  (0) 2018.08.28
교착상태(Deadlock)  (0) 2018.08.28
병행성과 상호배제&상호배제 알고리즘  (0) 2018.08.26
Thread  (0) 2018.08.24
Context Switch (문맥 교환)  (0) 2018.08.23

+ Recent posts