본문 바로가기
기술면접/운영체제

운영체제 6장 정리 동기화 Race Condition Mutex Lock Semaphore

by illlilillil 2022. 1. 19.

동기화


필요한 이유 - 모든 프로세스들이 컨커런트하게 실행되어야 하기 때문이다. 언제라도 인터럽트되고 다시 실행될 수 있어야 한다.

 

Race Condition (경쟁 상황)이란

두 개 이상의 프로세스가 공통 자원에 병행하게 접근하려고 할 때 생긴다.

 

생산자 소비자 문제 10개가 있다.

한정된 데이터를 임시로 저장해두는 버퍼에 여러 생산자와 소비자가 접근하려고 한다. 생산자는 물건이 만들어지면 해당 버퍼에 저장한다. 그러나 저장할 공간이 없는 문제가 발생할 수 있다. 또한 소비자가 데이터를 소비하려고 할 때 소비할 데이터가 존재하지 않는 문제가 있다.

 

임계 구역 문제

여러 개의 쓰레드,프로세스가 수행되는 시스템에서 공유되는 데이터에 접근할 때 발생하는 문제이다. 임계 구역 문제를 해결해야 경쟁 상황을 피할 수 있게 된다.

 

요구조건

  1. mutual exclusion(상호 배제) -특정 프로세스가 임계 구역에 실행되는 동안은 다른 프로세스의 접근 불가하다.
  2. progress(진행) - 임계 구역이 사용되고 있지 않다면 다른 프로세스의 접근을 허용한다.
  3. bounded waiting(한정된 대기) - 임계 구역 진입 횟수에 한계를 두어 같은 프로세스가 독점하지 않도록 하는 방식입니다. Starvation 문제를 해결하는 aging 방식과 비슷하다.

해결 방법

Mutex Locks

임계 구역 문제를 해결하는 솔루션이다.

mutex_lock()으로 해당 자원을 잠그고 mutex_unlock()으로 자원의 잠금을 푼다.

mutex_lock(mutex); 
    // 공유 자원에 접근 
mutex_unlock(mutex);
   // 해제

Semaphore

  1. 이진 세마포어 - 0,1의 값만 가질 수 있다. 사용 자원을 하나만 사용한다.
  2. Counting semaphore - 제한된 여러 개의 자원에 접근할 수 있습니다.
wait(mutex);
// 들어왔다.
signal(mutex);
// 나왔다.

세마포어는 wait 연산과 signal 연산을 가진다. wait 연산은 자원을 획득하고 signal 연산을 자원을 해제하는 역할을 담당합니다. 초기에 할당받은 자원으로 int value가 할당되고 wait() 함수가 호출될 때마다 세마포어에 가능한 자원이 남아 있을때 세마포어를 감소하고 임계 구역에 접근할 수 있게 된다.

만약 세마포어가 0이 된다면 프로세스가 자원 사용을 끝내고 signal로 사용 자원 갯수를 증가 시킬때까지는 다른 프로세스의 접근이 불가능합니다.

 

Monitor

세마포어는 프로그래머가 직접 동시성 문제를 해결해야 해서 잘못된 사용으로 인한 문제가 발생할 수 있다. 그렇기에 모니터라는 것이 생겼다. 모니터는 동기화 문제를 편리하고 효율적으로 해결한다. 한 번에 하나의 프로세스만 접근할 수 있다. 대기 중인 프로세스는 entry 큐에 대기하며 모니터 안의 공유 데이터는 프로시저를 통해서 접근할 수 있다.

댓글