본문 바로가기
전공/운영체제

Ch05. 프로세스 동기화_02)공유 자원과 임계구역

by 임 낭 만 2023. 4. 18.

<쉽게 배우는 운영체제> 교재를 참고하였습니다.

공유 자원과 임계구역 : 여러 프로세스가 한정된 자원을 가지고 프로세스가 공동으로 작업할 때 발생할 수 있는 문제가 있음

공유 자원의 접근

공유 자원 (shared resource)

  • 여러 프로세스가 공동으로 이용하는 변수, 메모리, 파일 등을 말함
  • 공동으로 이용되기 때문에 누가 언제 데이터를 읽거나 쓰느냐에 따라 그 결과가 달라질 수 있음
  • 이 때문에 원치 않는 문제 발생하기도 함

경쟁 조건

  • 2개 이상의 프로세스가 공유 자원을 병행적으로 읽거나 쓰는 상황
  • 경쟁 조건이 발생하면 공유 자원 접근 순서에 따라 실행 결과가 달라질 수 있음

공유 자원의 접근 예

공유 자원의 접근

  • [그림 5-10]은 두 프로세스가 공유 자원인 전역 변수를 이용해 작업을 하는 예시임.
  • 프로세스 P1은 예금 10만원 확인 후 10만원 입금, 동시에 P2도 예금 10만원 확인 후 5만원 입금
  • 프로세스 P2는 10만원에 5만원을 더해 15만원을 저장한 후 작업을 마침
  • 예금은 원래 10만원에 P1이 입금한 10만원과 P2가 입금한 5만원을 합해서 25만원이 되어야함
  • 그런데 5만원이 부족함. 정상적인 상황은 P1이 작업을 마친 후 P2가 예금 20만원을 확인 후 5만원을 입금해야 함
  • 그러나, 두 프로세스가 예금 10만원을 동시에 읽은 후 다른 프로세스 작업을 무시하고 입금을 시도해(덮어쓰기) 총액이 정확하지 않음
  • 이와 같이 2개 이상 프로세스가 공유자원을 병행적으로 읽거나 쓰는 상황을 "race condition:경쟁조건" 이 발생했다고 함(동시성 문제).
  • 경쟁조건이 발생하면 [그림5-10]처럼 공유자원 접근 순서에 따라 실행 결과가 달라질 수 있음

임계 구역

임계 구역

  • 공유 자원 접근 순서에 따라 실행 결과가 달라지는 프로그램의 영역
  • 임계구역에서는 프로세스들이 동시에 작업하면 안 됨
  • 어떤 프로세스가 임계구역에 들어가면 다른 프로세스는 임계구역 밖에서 기다려야 하며 임계구역의 프로세스가 나와야 들어갈 수 있음
  • 즉, 예금을 임계구역으로 지정하면 문제가 발생하지 않음. 프로세스 P1이 먼저 실행 되어 작업을 마친 후 프로세스 P2가 실행된다면 총액 25만원이 될 것임

가스레인지와 믹서


생산자-소비자 문제

임계 구역

: critical section에 관련된 전통적인 문제로 생산자-소비자 문제(producer-consumer problem)이 있음

  • 생산자-소비자 문제에서 생산자 프로세스와 소비자 프로세스는 서로 독립적으로 작업을 함
  • 생산자는 말 그대로 계속 물건을 생산해서 버퍼에 넣고[input(buf)], 소비자는 계속해서 버퍼에서 물건을 가져옴[out(buf)]
  • 작업을 계속하기 위해 원형 버퍼를 사용하며, 버퍼가 비어 있는지 가득 찼는지 확인하기 위해 전역변수 sum을 사용함
  • sum에는 현재 버퍼에 있는 상품의 숫자가 저장됨
  • [그림5-12]에서 생산자-소비자 문제의 코드와 상태를 보여줌

코드 및 실행 순서에 따른 결과

  • 생산자는 수를 증가시켜가며 물건을 채우고 소비자는 생산자를 쫓아가며 물건을 소비

생산자-소비자 문제
실행 순서에 따른 결과 차이

  • 현재 버퍼는 1에서 3까지 차 있고 sum값은 3임
  • 생산자 코드와 소비자 코드가 동시에 실행되면 문제가 발생
  • 생산자와 소비자가 전역변수 sum에 접근하는 타이밍을 서로 맞추지 않았기 때문임
  • 즉, sum이 바로 critical section이며 race condition이 발생하는 것임
  • 생산자가 buf에 물건을 하나 추가함, 그러나 sum을 아직 안 바꾸었음, 현재 sum은 3
  • 소비자가 buf에서 물건을 하나 소비함, sum을 2로 바꾸어야 하는데 아직 바꾸지 않음, 현재 sum은 3
  • 이 상태에서 sum = sum + 1과 sum = sum – 1; 이 동시에 실행되면 문제가 발생함
  • 생산자와 소비자가 독립적이기 때문에 상대방이 sum을 바꾸려는 것을 알지 못하고, 현재 상태인 sum=3을 읽고 작업을 함
  • 만약 sum = sum + 1이 먼저 실행되면 4가 되고, sum = sum - 1을 하면 sum은 2가 됨, 왜냐하면 2번에서의 sum은(소비자 관점) 4가 아니라 3이기 때문임
  • 만약 sum = sum - 1이 먼저 실행되면 2가 되고, sum = sum + 1이 실행되면 4가 됨, 1번에서의 sum은(생산자 관점) 3이기 때문이다.
  • 이렇게 이 때의 실행 순서에 따라 값이 변하는 현상이 발생함

임계구역 해결 조건

상호 배제 (mutual exclusion)

  • 한 프로세스가 임계구역에 들어가면 다른 프로세스는 임계구역에 들어갈 수 없는 것

한정 대기 (bounded waiting)

  • 상호 배제 때문에 기다리게 되는 프로세스가 무한 대기하지 않아야 함. 즉, 특정 프로세스가 임계구역에 진입하지 못하면 안 됨

진행의 융통성 (process flexibility)

  • 한 프로세스가 다른 프로세스의 진행을 방해해서는 안 된다는 것
  • 임계구역에 프로세스가 없다면 어떠한 프로세스라도 들어가서 자원을 활용할 수 있음
  • 즉, 두 프로세스가 자원을 번갈아 쓴다고 가정할 때 한 쪽에서 자원을 안 쓰고 있다면, 다른 한 쪽 프로세스가 자원을 쓰고 싶어도 자신의 순서가 아니라고 기다리는 것은 효율적이지 못함

댓글