본문 바로가기

CS(Computer Science)

CS Study : 11주차 - 프로세스 동기화

프로세스 동기화

  • 프로세스 동기화는 두 개 이상의 프로세스가 공유된 데이터에 동시 접근하면 데이터 중복이 발생할 수 있기 때문에
    데이터 일관성을 유지하기 위한 매커니즘이다.

 

Race Condition(경쟁 상태)

  • 여러 프로세스들이 동시에 데이터에 접근하는 상황에서, 어떤 순서로 데이터에 접근하느냐에 따라 결과 값이
    달라질 수 있는 상황을 말한다.
  • 대표적으로 세 경우에서 경쟁 상태가 발생할 수 있다.

1. 커널 모드로 인터럽트가 발생하는 경우

Load를 한 후에 인터럽트가 발생하면 인터럽트의 결과는 발생하지 않고 count++만 반영됨

  • 커널 모드의 수행이 끝나지 전에는 인터럽트를 받지 않도록 하는 방법으로 문제를 해결할 수있다.

 

2. 프로세스가 시스템 콜을 호출해서 커널 모드로 수행 중인데 문맥 교환이 발생하는 경우

  • 두 프로세스의 주소 공간에선느 데이터를 공유하지 않지만, 시스템 콜을 수행하는 동안에는 둘 다 커널 주소 공간에 
    데이터를 접근한다. 커널 주소 공간에서 작업을 수행하는 도중에 CPU를  빼앗으면 경쟁 상태가 발생한다.
  • 커널 모드를 수행 중일 땐 CPU가 선점되지 않도록 하고, 커널 모드에서 유저 모드로 돌아갈 때 선점 되도록 함으로써
    해결할 수 있다.

 

3. 멀티 프로세서에서 공유 메모리 내의 커널 데이터에 접근하는 경우

  • 커널 내부에 있는 각 공유 데이터에 접근할 때마다 그 데이터에 대해서만 Lock / Unlock을 하는 방식으로 해결
    가능하다.

 

Critical Section(임계 구역)

  • 코드 상에서 경쟁 상태가 발생할 수 있는 특정 부분을 말한다. 즉, 공유 데이터를 접근하는 코드 부분
  • 임계 구역으로 인해 발생하는 문제들을 해결하기 위해서는 다음 조건들을 만족해야 한다.
    1. Mutual Exclusion(상호 배제)
      • 이미 한 프로세스가 임계 구역에서 작업 중이면 다른 모든 프로세스는 임계 구역에 진입하면 안된다.
    2. Progress(진행)
      • 임계 구역에서 작업중인 프로세스가 없다면, 임계 구역에 진입하고자 하는 프로세스가 존쟁하는 경우
        진입할 수 있어야 한다.
    3. Bounded Waiting(한정 대기)
      • 프로세스가 임계 구역에 들어가기 위해 요청한 후 부터 그 요청이 허용될 때까지 다른 프로세스들이
        임계 구역에 들어가는 횟수가 제한이 있어야 한다.
        즉, 임계 구역에 진입하려는 프로세스가 무한정 기다려서는 안된다.

 

Semaphores

  • 세마포어(Semaphore)는 Busy Waiting이 필요 없는 동기화 도구이며, 여러 프로세스나 스레드가 임계 구역에
    진입할 수 있는 Signaling 매커니즘이다.

  • S는 사용 가능한 자원의 개수를 의미하며 프로세스의 자원이 모두 사용 중이면 wait하는 방식이다.
  • 자원의 여유가 생가면 S--를 통해 자원을 획득하고, 모두 사용했다면 S++를 통해 반납한다.

 

Monitor

  • Monitor(모니터)는 동시 수행 중인 프로세스 사이에서 추상 데이터의 안전한 공유를 보장하기 위한 High-Level 동기화
    구조이다.
  • 공유 데이터에 접근하기 위해서는 모니터의 내부 절차를 통해서만 접근할 수 있도록 한다.

  • 내부에 프로세스가 들어가 있어서 진입을 하지 못한 프로세스들은 모니터 큐에서 기다린다.
  • 프로세스가 모니터 내에서 기다릴 수 있게 하도록 조건 변수가 사용된다.
  • 조건 변수는 오직 wait과 signal 연산만 사용될 수 있다.