-
728x90
프로세스는 독립적으로 운영할 수도 있지만 공유된 자원으로 공동 작업을 할 수도 있다. 이 때, 같은 자원을 다른 프로세스 간에 공유하는 것이기 때문에 문제가 발생할 수 있다.
1. 공유 자원의 접근
공유 자원(shared resource)
이란 프로세스가 공동으로 이용하는 변수, 메모리, 파일 등을 말한다. 자원을 공유하기 때문에 어떤 프로세스가 먼저 데이터를 읽고 쓰는가에 따라 결과가 달라질 수 있다. 그렇기 때문에 프로세스들의 공유 자원 접근 순서를 정하는 것이 중요하다.2개 이상의 프로세스가 공유 자원을 병행적으로 읽거나 쓰는 상황을
경쟁 조건(race condition)
이 발생했다고 한다. 경쟁 조건이 발생하면 공유 자원 접근 순서에 따라 실행 결과가 달라질 수 있다.2. 임계구역
경쟁 조건이 발생함에 따라 실행 결과가 달라지는 프로그램의 영역을
임계구역(critical section)
이라고 한다.critical
, 앞으로의 상황에 영향을 미칠 수 있다는 점에서 대단히 중요한 영역이라는 뜻으로, 프로세스 실행 중에는 공유해서는 안 되는 자원이다.임계구역으로 지정된 영역은 2개 이상의 프로세스가 동시에 자원을 이용할 수 없다. 순서를 정해서 1개의 프로세스씩 이용해야 한다.
3. 생산자-소비자 문제
조건
- 생산자 프로세스와 소비자 프로세는 서로 독립적으로 작업
- 생산자는 계속 물건을 버퍼에 넣고 소비자는 계속 버퍼에서 물건을 가져옴
- 지속적인 작업을 위해 버퍼는
원형 버퍼(circular buffer)
를 사용 - 현재 버퍼에 있는 상품의 총 개수를 전역 변수
sum
에 저장
문제점
생산자는 버퍼에 상품을 넣고 소비자는 그걸 소비한다. 얼핏 생각하면 별 문제가 없을 것 같지만 다음과 같은 상황이라면 문제가 발생한다.
- 현재 버퍼에는 물건이 3개 저장되어 있다. sum의 값은 3이다.
- 생산자가 물건 하나를 buf 4에 저장했다. 아직 sum은 4로 바꾸지 못했다.
- 소비자가 물건 하나를 소비했다. 아직 sum은 2로 바꾸지 못했다.
- 이 상태에서 생산자의
sum = sum + 1
과 소비자의sum = sum - 1
이 거의 동시에 실행된다. 생산자와 소비자가 독립적이기 때문에 상대방이 sum을 바꾸려 하는 것을 모르고 현재 상태인sum = 3
을 읽어서 작업한다. - sum의 값은 그대로 3이 되어야 하나 작업이 끝나는 순서에 따라 2 또는 4가 된다.
왜 이런 문제가 발생했을까? 생산자와 소비자가 전역 변수 sum에 접근하는 타이밍을 서로 맞추지 않았기 때문이다.
4. 임계구역 해결 조건
임계구역을 해결하기 위해서는 다음의 3가지 조건을 만족해야 한다.
상호 배제(mutual exclusion)
2개 이상의 프로세스가 임계구역에 동시에 들어갈 수 없다.
한정 대기(bounded waiting)
어떤 프로세스도 무한 대기(infinite postpone)하지 않아야 한다. 특정 프로세스가 임계구역에 진입하지 못 하면 안 된다.
진행의 융통성(progress flexibility)
한 프로세스가 다른 프로세스의 진행을 방해해서는 안 된다.
728x90'운영체제' 카테고리의 다른 글
18. 교착 상태 (0) 2021.09.22 17. 임계구역 해결 방법 (0) 2021.09.22 15. 프로세스 간 통신 (0) 2021.09.22 14. 인터럽트 처리 (0) 2021.09.22 13. 스케줄링 알고리즘 (0) 2021.09.22 댓글