Race Condition
태그 :
- 개념
- Multi-processing 시스템 환경에서 특정 자원에 대하여 여러 프로세스 가동 시에 자원(Resource)을 획득하려고 경쟁하는 상황 유닉스는 시분할 정책으로 프로세스에게 자원을 할당하므로 동시에 같은 자원을 두 개 이상의 프로세스가 경쟁적으로 사용하려는 상황이 발생함
I. 한정된 자원을 획득하려 프로세스가 경합하는 현상, 경쟁조건의 개요
가. 경쟁조건의 정의
- Multi-processing 시스템 환경에서 특정 자원에 대하여 여러 프로세스 가동 시에 자원(Resource)을 획득하려고 경쟁하는 상황
- 유닉스는 시분할 정책으로 프로세스에게 자원을 할당하므로 동시에 같은 자원을 두 개 이상의 프로세스가 경쟁적으로 사용하려는 상황이 발생함
나. 경쟁조건의 발생원인
- 시스템의 중요 자원의 integrity를 보증하기 위하여 중요 자원을 access 하는 경우에 자원을 locking하고, 사용 후에 release 시킴
- 한 프로세스가 자원을 lock하고 있는 경우에, 이 자원을 얻으려는 다른 프로세스들의 wait 해야 함.
- 자원을 lock한 프로세스가내부적인 문제로 release가 길어지는 경우에 프로세스 대기 행렬이 길어지고, 교착상태(deadlock)의 발생가능성이 커지고, 시스템의 performance에 심각한 영향을 줌
II. 다중처리기 시스템과 단일처리기 시스템에서의 경쟁조건
가. 단일처리기 시스템에서 경쟁조건이 일어나는 시나리오
- 단일 처리기 시스템에서도 시분할(Time Sharing)을 통하여 여러 프로세스들이 동시에 실행
- 즉, time slice를 통하여 multi-processing으로 처리되는 시스템 환경에서 프로세스간의 자원의 lock을 통한 점유와대기가 발생됨
- 단일처리기 시스템에서의 경쟁조건이 일어나는 시나리오
- 특정 프로세스가 자원을 lock하고 sleep이나 I/O wait등으로 빠지는 경우에 다른 프로세스들이 무한 대기에 빠질 가능성이 있음
- 대기중인 프로세스 중에서 sleep & wait 등을 통하여 다음에 자원을 lock할 수 있는 기회가 생김(경쟁이 발생함)
- 상호 배타 방식의 종류
나. 다중처리기 시스템에서 경쟁 조건이 일어나는 시나리오
1) 다중처리기 시스템의 구성
- multi-processor 구성으로 여러 processor(CPU)에서 동시에 여러 프로세스가 실행됨
- 어느 processor에서 실행되는지 관계없이 시스템 자원에 대한 lock과 release는 단일처리기 시스템 보다 훨씬 많은 경쟁조건이 발생됨
2) 다중처리기 시스템에서의 경쟁 조건이 일어나는 시나리오
- 특정 CPU에서 실행되는 프로세스 D가 특정자원을 lock하면, 실행되는 CPU에 관계없이 다른 프로세스들은 wait해야 함
- 결국 여러 CPU 상에서 실행되는 많은 프로세스간에 경쟁이 발생함
III. 다중처리기 시스템과 단일처리기 시스템에서의 경쟁 조건의 해결방안
가. 단일처리기 시스템에서 경쟁조건의 해결방안
- 단일 처리기 시스템에서는 자원의 독점과 무한대기를 방지하기 위하여 세마포어를 사용함
- 공유 메모리 혹은 공유 파일의 사용시 다른 프로세스가 사용하지 못하도록 배제하는 상호배제(mutual exclusion)의 최소화
- 최소 임계영역(Critical Section)의 access를 통하여, 한 프로세스가 한 자원을 오랜 시간 동안 독점하지 못하게 함
나. 다중처리기 시스템에서 경쟁 조건의 해결방안
- 다중처리기 시스템에서는 위의 단일처리기 시스템에서의 경쟁조건 해결방안을 기본적으로 사용함
- spinlock timeout 개념을 사용하여, 특정 프로세스가 특정자원을 lock하고 일정시간(60초) 동안 release하지 않는 경우에 spinlock timeout을 통하여 문제를 해결함
- 위의 경우에 극단적으로는 system panic을 call하여 lock을 release하지 않은 프로세스나 CPU에 대한 자세한 조사를 통하여, 자원의 독점이 발생되는 현상을 수정할 수 있음
IV. Race Condition 억제 방법 및 예방방법
가. Race Condition 억제 방법
- 임시 파일을 만들지 않음
- Race Condition은 프로세스가 실행 중 임시파일을 쓰는 경우에 발생 메모리에서 모든 작업을 수행하고 임시파일을 사용 않으면 Race Condition은 발생하지 않음
- 자원에 대한 경쟁상황을 만들지 않으며 각자 할당된 메모리를 사용하게 함
- Create와 Open을 확실히 구분하여 사용함
- Race Condition은 두 시스템 사이의 콜 사이에 정상적으로 처리될 것이란 생각 때문에 발생
- 즉, 파일이 존재하지 않는 경우에만 파일을 생성하도록 프로그래밍 하여야 함
- Symbolic Link의 사용 주의
- 수시로 링크 정보를 검사하여 비정상적인 링크를 제거함
- 슈퍼유저 소유의 중요한 파일에 대한 링크는 원천적으로 사용하지 못하게 통제
나. Race Condition에 대한 예방 방법
1) 유닉스의 버그에 대한 분석 필요
- Race Condition은 결국 유닉스의 버그로써 발생원인에 대한 이해가 중요함
- 유닉스 관리자는 보안 지침에 따라 보안 취약점에 대해 정기 점검을 실시
- 개발자의 유닉스 버그에 대한 이해도 강조 및 교육 실시가 중요함
2) 충분한 자원 산정: 임시파일 사용을 가능한 억제하게 충분한 메모리 자원 확보
3) 정기 보안 점검 및 취약성 분석 강화: 취약성 Tool을 이용하여 심볼릭 링크, 임시파일에 대한 사전점검 강화시킴
V. 시스템 성능향상을 위한 경쟁 조건의 해결의 trade off 및 고려사항
가. 경쟁조건 해결의 trade off
- 경쟁 조건의 해결을 위하여 특정 프로세스가 특정자원을 무한정 또는 일정시간 이상 독점할 수 없게 구현하지만, 이는 자원에 대한 잦은 lock과 release의 반복으로 프로세스가 충분하게 시스템 자원을 사용하지 못하고, 지속적인 wait-lock이 반복되어 오히려 전체적인 시스템 성능이 떨어질 수 있음
- 자원에 대한 획득-lock-release-wait 등의 상호관계를 고려한 적정선의 자원 독점 사용 시간과 강제종료 조건을 적절하게 배합해야 함
나. 고려사항
- 경쟁 조건을 통하여 여러 프로세스간에 deadlock이 발생할 수 있음
- 한 프로세스의 자원 독점이 길어지면 길어질수록, deadlock의 발생 가능성이 더욱 커지게 됨