본문 바로가기

Computer Science

운영체제 - 동기화 이슈

 

 

 

 

동기화란?

   - 작업들 사이에 실행 시기를 맞추는 것을 의미합니다.

 

 

 

 

동기화가 필요한 이유?

   - 다중 스레드를 사용할때, 스레드의 작업 도중에 다른 스레드의 작업 상황을 확인하지 않습니다.

   - 이 때문에 여러 스레드가 동일한 데이터에 접근 하는 경우 다른 스레드의 작업이 개입되는 경우가 생깁니다.

   - 이러한 경우 의도하는 대로 결과가 나오지 않기 때문에, 동기화를 사용하여 작업의 순서를 지정해주어야 합니다.

 

   Ex)

멀티스레드 사용시 원하는 결과와 동기화 이슈로 생기는 오류

 

   - 위와같이 Thread A를 진행중에 Thread B가 개입하여 문제가 생길 수 있습니다.

   - 이 때문에 동기화를 통해 Thread A가 끝난 뒤, Thread B가 동작하게 설정해야 합니다.

 

 

 

 

Mutual exclusion (상호 배제)

   - 공유 변수 영역에 대한 동시 접근을 막는 방법입니다.

   - 한 스레드가 공유 변수에 접근하여 작업하는 동안, 다른 스레드가 공유변수를 접근할 수 없게 합니다.

   - 이를 공유 영역을 잠금(lock) 한다고 합니다.

   - 이러한 공유 변수를 임계자원(critical resource), 또는 임계 영역(critical section)이라고 합니다.

 

 

 

 

교착상태(DeadLock : 데드락)와 기아상태(Starvation)

   데드락

      - 두개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다려 끝없이 대기하는 상태입니다.

      - 공유되는 자원이 여러개일때, 서로 필요한 자원을 가진 채 순환상태로 대기하며 발생합니다.

      - 여러 프로세스가 동일한 자원 점유를 요청할 때 발생합니다.

 

   기아상태

      - 특정 프로세스의 우선순위가 낮아 원하는 자원을 계속 할당받지 못하는 상태입니다.

       - 여러 프로세스가 부족한 자원을 점유하기 위해 경쟁할 때 발생합니다.

 

 

 

 

 

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

   - 임계영역에 대한 접근을 막기 위한 locking 메커니즘입니다.

   - 뮤텍스

      - 임계영역에 하나의 스레드만 접근이 가능합니다.

      - 잠금(lock)과 해제(unlock)를 사용하여 구현합니다. 

   - 세마포어  : 임계영역에 n개의 스레드만 접근이 가능합니다.

      - 키(key)의 개수를 만들어 임계영역 접근 시 키를 분배합니다.

      - 임계영역에서 나올 때 키를 회수합니다.