시냅스

프로세스 동기화 Process Synchronization 본문

운영체제

프로세스 동기화 Process Synchronization

ted k 2022. 4. 28. 20:28

프로세스 동기화 Process Synchronization

출처 : https://en.wikipedia.org/wiki/Synchronization_(computer_science)

Cooperation process

  • 서로 영향을 주는 process
  • thread를 공유하거나, shared memory massage passing
  • 위의 경우 데이터 일관성에 유의해야 한다 => 실행 순서를 보장해야 한다. (Integrity of Data)

producer - consumer problem

출처 : https://www.interviewbit.com/blog/producer-consumer-problem/

while(true)
{
    /* produce an item in next_produced */
    while (count == BUFFER_SIZE)
        ; /* do nothing */
    buffer[in] = next_produced;
    in = (in + 1) % BUFFER_SIZE;
    count++;
}

while(true)
{
    while (count == BUFFER_SIZE)
        ; /* do nothing */
    next_consumed = buffer[out];
    out = (out + 1) % BUFFER_SIZE;
    count--;
    /* consume the item in next_consumed */
}

이 때 count 가 5라는 가정을 하여 병행하게 실행하면 기대값인 6 대신 4, 5, 6이 된다.

register1 = count
register1 = register1 + 1 // count = 6, interrupt
count = register1 // resume, count = 6

register2 = count
register2 = register2 - 1
count = register2 // count = 4

위와 같은 상황에 기인한다.

count 를 6으로 할당한 상황에서 context switch가 일어나서 register2의 코드가 실행되면서,

count 가 4인 상황에서 다시 한 번 resume 되어 count는 기대값인 5 대신 6으로 할당받게 된다.

위와 같은 상황을 우리는 경쟁 상황이라고 한다.

경쟁 상황 Race Condition

  • 여러개의 프로세스(혹은 thread)가 동일한 데이터를 병행할 때 실행 결과가 실행 순서 (context switching)에 따라 달라짐

임계 영역 critical section

  • 다른 프로세스(thread)와 공유하는 코드영역 -> 임계 영역 critical section
  • 동기화의 목적은 하나의 프로세스가 진행될 때 다른 프로세스는 접근하지 않아야 한다.
  • 진입 영역 (entry section) : 임계 영역 진입 허가
  • ciritical section
  • 퇴출 구역 (exit section) : 임계 영역 퇴출 허가
  • 나머지 구역 (reminder section)

임계 영역 문제에 대한 해결안

  • 상호 배제 (mutual exclusion) : 다른 프로세스는 진입하지 않아야 한다.
  • 진행 (progress) : 무한대로 진입 연기될 때 프로세스를 선택해야 한다.
  • 한정된 대기 (Bounded waition) : 기다리는 시간 제한.

동기화를 위한 하드웨어 지원 hardware support for synchronization

  • 원자성 (Atomicity)
  • 더이상 쪼갤 수 없게 만들어 inturrupt가 발생되지 않게 한다.
  • 특정 instruction 을 atomic instruction으로 만든다. e.g. test_and_set, compare_and_swap()
Comments