728x90

1 공유자원의 접근

공유 자원(shared resource)은 여러 프로세스가 공동으로 이용하는 변수, 메모리, 파일 등을 말한다. 공유 자원은 공동으로 이용되기 때문에 누가 어떻게 데이터를 읽거나 쓰느냐에 따라 결과가 달라질 수 있다. 

 

예를 들어 프로세스 p1과 p2가 전역 변수 예금을 읽는다. 둘 다 1000원을 읽었다. 

그 후 p1이 500원을 더한 후 저장했고 p2가 뒤이어 500원을 뺀 후 저장한다. 

결과값은 1000원이 저장돼야 하지만, p2가 더 나중에 저장했으므로 500원이 저장된다.

 

이처럼 2개 이상의 프로세스가 공유 자원을 병행적으로 읽거나 쓰는 상황을 Race Condition이 발생했다고 한다.

 

2 임계구역

공유 자원 접근 순서에 따라 실행 결과가 달라지는 프로그램의 영역을 임계 구역(Critical Section)이라고 한다.

 

3 생산자-소비자 문제

임계구역 관련 유명한 문제로 생산자 소비자 문제가 있다.

생산자는 계속 물건을 생산해서 버퍼에 넣고, 소비자는 계속 버퍼에서 물건을 가져온다.

버퍼의 크기 확인을 위해 sum이라는 전역 변수를 사용한다.

이때 생산자와 소비자가 동시에 실행되면 문제가 발생한다.

 

생산자가 물건 하나를 버퍼 4에 저장했다. sum을 4로 바꿔야 하나 아직 바꾸지 않았다.

소비자가 물건 하나를 가져갔다. sum을 2로 바꿔야 하나 아직 바꾸지 못했다.

이 상태에서 sum 변경을 동시에 실행하면 문제가 생긴다. 생산자가 4를 늘린 후 소비자가 2로 줄이면 2가 저장되고

반대의 경우 sum에 4가 저장된다.

 

이처럼 임계구역은 한번에 하나의 프로세스만 사용해야 한다.

 

4 임계구역 해결 조건

임계구역 문제 해결하는 조건으로 아래 3가지가 있다.

1) 상호 배제 (Mutual Exclusion) : 한 프로세스가 임계구역에 들어가면 다른 프로세스는 임계구역에 들어갈 수 없다.

2) 한정 대기(bounded waiting) : 어떤 프로세스도 무한 대기 하지 않아야 한다.

3) 진행의 융통성(progress flexibility) : 한 프로세스가 다른 프로세스의 진행을 막아선 안 된다.

 

728x90

+ Recent posts