** 본 게시물은 광운대학교 컴퓨터공학과 김태석 교수님의 시스템 프로그래밍 강의를 참고하여 만들어졌습니다. **
* 목차
- Race Condition이란?
- Critical Section이란?
- Semaphore란?
ㄴ semaphore의 두 가지 연산
ㄴ semaphore case
- 결론
- Race Condition이란?
경쟁 상태(Race Condtion)이란 공유 자원에 대해 여러 개의 프로세스가 동시에 접근을 시도할 때 접근의 타이밍이나 순서 등이 결과값에 영향을 줄 수 있는 상태를 말한다. 동시에 접근할 때 자료의 일관성을 해치는 결과가 나타날 수 있다. 이를 방지하기 위해서는 프로세스 협력 기법이 필요하다.
ㄴ 입출금 예제를 통해, 자료의 일관성에 대해 설명하겠다.
잔고가 105달러일 때, 서로 다른 ATM에서 동시에 남편이 100달러, 아내가 50달러를 출금 했다고 생각해보자.
그럴 경우, 일관성이 유지되는 경우와 아닌 경우로 나뉠 수 있다.
=> 일관성이 유지되는 경우 : 잔고에 남편 또는 아내 중 한 명만이 접근할 수 있도록 한다.
이 경우, 한 명이 잔고에 접근 -> 잔고 업데이트 -> 대기 중인 또 다른 한 명이 잔고 접근 -> 잔고 업데이트의 과정으로 이루어질 수 있다.
// 공유 자원에 접근을 제한하는 것이 일관성 유지되도록 한다.
=> 일관성이 유지되지 않는 경우 : 잔고에 접근 제한을 두지 않는다면, 잔고에는 100달러만 있는데도 불구하고, 남편과 아내가 각각 100달러, 50달러를 모두 뽑아가는 불상사가 일어난다.
//공유 자원에 접근을 제한하지 않는다면, 위와 같은 문제점 발생
- Critical Section이란?
공유 자원에 접근하는 구역(코드)를 말한다.
공유 자원은 동시에 하나의 process 이상 접근하면 안된다.
entry section // 입장 구역
critical section // 공유 자원
exit section // 퇴장 구역
만약, critical section을 사용하고 있는 프로세스가 있다면, 나머지 다른 프로세스들은 critical section을 들어오지 않고,
entry section에서 대기한다.
critical section을 사용하던 프로세스가 exit section을 통해 나가게 되면, 그제서야 다른 process가 critical section으로 들어올 수 있다.
- Semaphore란?
java 코드는 http://asuraiv.blogspot.com/2017/11/java-2.html 를 참고하시면 좋을 듯합니다.
- 결론
공유 자원(shared resource)를 Critical Section으로 정의하고, 이를 Semaphore를 통해 관리한다.
그리하여, 여러 process가 공유 자원에 동시에 접근하는 것을 막는다.
< 참고 자료 >
Race Condition : https://ko.wikipedia.org/wiki/%EA%B2%BD%EC%9F%81_%EC%83%81%ED%83%9C
입출금 문제 : https://ko.wikipedia.org/wiki/%EC%9E%85%EC%B6%9C%EA%B8%88_%EB%AC%B8%EC%A0%9C
임계 구역 : https://ko.wikipedia.org/wiki/%EC%9E%84%EA%B3%84_%EA%B5%AC%EC%97%AD
** 제가 잘못 작성한 내용이나 설명을 이렇게 바꾸면 좋겠다 등등 댓글에 달아주시면 감사하겠습니다 **
** 질문은 언제나 환영입니다!!!! **