인프런 커뮤니티 질문&답변

임현강님의 프로필 이미지
임현강

작성한 질문수

운영체제 공룡책 강의

12. 동기화 문제의 해결책: Chapter 6. Synchronization Tools (Part 2)

turn에 접근할 때 인터럽트가 발생한다면?

작성

·

188

0

안녕하세요 교수님, Race Condition 관련하여 질문을 드리고 싶습니다.

Peterson2에서 AtomicBoolean을 사용하여 Race Condition을 해결하고 항상 0이라는 결과가 출력되는 것을 확인하였습니다.

그런데.. busy waiting을 위한 조건문에는 turn에 대한 검사도 들어가있지 않습니까?

turn은 AtomicBoolean과 다르게 그냥 일반적인 int입니다.

만약 이 turn에 대한 할당 작업이 기계어 레벨에서 수행되는 중에 interrupt가 발생하면 또다시 Race Condition이 발생할 수도 있는 것 아닌가 하는 생각이 듭니다.

하지만 결과는 당연히 강의에서 교수님이 보여주신대로 count는 항상 0을 유지하겠지요.

어째서 int turn이 Race Condition을 발생시키지 않을 수 있는 것인지가 궁금합니다.

 

감사합니다!

답변 2

0

임현강님의 프로필 이미지
임현강
질문자

항상 감사드립니다 교수님!

0

주니온님의 프로필 이미지
주니온
지식공유자

제가 질문 상황을 정확히 이해하기 어렵지만, 일반론으로 답변을 드리겠습니다.

 

먼저, count 변수가 공유 변수라면 이 변수에 대한 접근에서 race condition이 발생합니다. 

따라서 상호 배제를 통해 "동시에" critical section에 진입하는 것을 막아야 합니다.

그리고 turn을 통해서 "동기화"하는 것은 critical section 내부에서 일어난다고 보면

이미 turn 변수에 대해서는 race condition이 발생하지 않는다고 할 수 있겠죠?

따라서, Peterson 알고리즘을 통해 wait(), signal()을 구현하는 것은

H/W, S/W 인터럽트와는 무관하게 여러 프로세스가 "동시에" 하나의 자원을 공유하면서 "동기화"를 할 수 있는 기법이 될 수 있습니다.

임현강님의 프로필 이미지
임현강

작성한 질문수

질문하기