(운영체제) 경쟁상태(race condition)

경쟁상태 (Race Condition)
둘 이상의 입력이나 조작이 동시에 일어나 의도하지 않은 결과를 가져오는 경우를 말합니다.
- 파일 또는 변수와 같은 공유 자원을 접근하는 하나 또는 그 이상의 프로세스들의 다중 접근이 제대로 제어되지 않은 것을 말합니다.
프로세스들 끼리 하나의 자원을 갖기 위해 싸우는 것, 하나의 자원을 동시에 요청

교착상태 (DeadLock)
프로세스들이 더 이상 진행을 못하고 영구적으로 블록되어 있는 상태로, 시스템 자원에 대한 경쟁 도중에 발생할 수도 있고 프로세스간의 통신 과정에서도 발생할 수 있습니다.
두 개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리고 있기 때문에 결과적으로는 아무것도 완료되지 못하는 상태를 말합니다.
- A프로세스가 A자원을 점유하고 B프로세스가 B자원을 점유한 상태에서 A프로세스의 다음 작업으로 B자원이 필요하고 B프로세스의 다음 자원으로 A자원이 필요할 경우, 서로의 작업이 끝나기만을 기다리며 아무것도 실행되지 않는 상태라고 할 수 있습니다.
- 경쟁상태도 교착상태(DeadLock)의 종류 중 하나입니다.

교착상태 조건
상호배제 (Mutual Exclusion) : 한 순간에 한 프로세스만이 자원을 사용할 수 있다. 즉, 한 프로세스에 의해 점유된 자원을 다른 프로세스들이 접근할 수 없다.
점유대기 (Hold and Wait) : 이미 자원을 보유한 프로세스가 다른 자원을 요청하며 기다리고 있다.
- 비선점 (No preemption) : 프로세스에 의해 점유된 자원을 다른 프로세스가 강제적으로 빼앗을 수 없다.
환형대기 (Circular Wait) : 프로세스간에 닫힌 연결이 존재할 경우입니다. 블록된 프로세스가 자원을 점유하고 있는데 이 자원을 다른 프로세스가 원하며 대기하고 있는 상태입니다.

교착상태를 발생시킨다고해서 이 조건들이 잘못된 조건은 아닙니다.
예를 들면, 상호배제는 수행 결과의 일관성과 데이터베이스의 무결성을 위해 반드시 필요합니다. 
선점 또한 임의대로 수행되어서는 안됩니다. 특히, 데이터 자원이 연관되어 있는 경우 선점은 롤백 복구 기법의 지원이 있어야만 가능합니다.
- 프로세스가 다시 재수행 될 수 있도록 프로세스의 상태와 사용하던 자원의 상태를 안정적인 이전의 상태로 복원할 수 있어야 함을 의미.

댓글

이 블로그의 인기 게시물

(ElasticSearch) 결과에서 순서 정렬

(네트워크)폴링방식 vs 롱 폴링방식

(18장) WebSocekt과 STOMP를 사용하여 메시징하기