경쟁 상태란
경쟁 상태는 상호배제를 하지 않았을때 나타나는 현상으로 여러 프로세스들이 동시에
공유 데이터(임계 영역)로 접근시 공유 데이터를 실행하는 순서에 따라 결과값이 달라질 수도 있는 상황을 말한다.
즉, 데이터의 일관성을 해치게 되고 사용자 의도와 다른 결과값을 받을 수도 있다.
상황을 통해 예를들면 다음과 같다.
- 상황
친구와 같이 카페를 갔는데 친구놈이 깜빡하고 지갑을 안갖고왔다. 그리고 일단 나는 카드에 만원이 있어서 내 카드로 결제하고 친구놈은 나한테 계좌이체로 돈을 보내주기로 했다. - 대화
나 : 커피하나에 3천원인데 너꺼까지 계산해서 6천원 썼다~~ 3천원 보내라ㅎㅎ
친구 : ㅇㅋㅇㅋ 아까 입금함.
(정상적인 결과)
위 상황을 살펴봤을때 정상적으로 입출금이 이뤄졌다면 내 카드에 7000원이 남아 있어야한다.
즉, "10000 - 6000 -> 4000 + 3000 혹은 10000 + 3000 -> 13000 - 6000" 으로 계산이 돼야 하는것이다.
위의 상태는 공유자원 10000원에 대해 입출금을 하는 프로세스들이 하나씩 접근하여 프로세스 실행결과를
공유자원(임계자원)에 정상적으로 반영시킨 결과이다.
(비정상 - 경쟁상태 일어난 결과)
하지만 경쟁상태가 일어나게 되면 공유자원의 결과값은 13000원이나 4000원 처럼 달라질 수도 있다.
예를들어 "10000 - 6000 -> 10000 + 3000 혹은 10000 + 3000 -> 10000 - 6000" 으로 계산되는 것이다.
즉, 프로세스들이 동시에 접근함에 따라 하나의 프로세스 실행결과를 다 반영하기전에 다른 프로세스 실행결과를
공유자원(임계자원)에 반영해 버리는 것이다.
정리하면 경쟁상태가 일어나게되면 공유자원에 있는 데이터에 대한 결과값을 보장 할 수 없다.
임계 영역이란
여러 프로세스가 공유 데이터로 접근하는 프로그램상의 코드 부분을 말한다.
임계영역에 프로세스들이 동시에 접근하게 되면 공유 데이터의 실행 결과값이 달라질 수도 있다.
즉, 경쟁 상태가 발생할 수 있기 때문에 임계영역 접근시 어떤 프로세스가 임계영역을 실행하고 있을때
다른 프로세스는 접근하지 못하도록 상호배제를 해줘야 한다.
또한 임계영역에서 어떤 프로세스가 실행되고 있을때 그 프로세스는 작업을 최대한 빨리하고 대기중인 다른 프로세스에게 양보를 해줘야 한다.
참고 자료
교착상태와 해결방안 https://record-developer.tistory.com/53
뮤텍스와 세마포어 https://record-developer.tistory.com/56
'OS(운영체제) > 프로세스' 카테고리의 다른 글
[운영체제] 프로세스 - 사용자 수준의 스레드와 커널 수준의 스레드의 차이? (0) | 2022.02.02 |
---|---|
[운영체제] 프로세스 - 프로세스 혹은 스레드 동기화란? (0) | 2022.01.24 |
[운영체제] 프로세스 - 컨텍스트 스위칭이란? (0) | 2022.01.11 |
[운영체제] 프로세스 - 뮤텍스와 세마포어 차이 (0) | 2021.12.13 |
[운영체제] 프로세스 - 교착상태와 해결방안 (0) | 2021.12.09 |