• 카테고리

    질문 & 답변
  • 세부 분야

    시스템

  • 해결 여부

    미해결

flag, turn 변수의 원자성이 Peterson's problem의 Mutual exclusion을 충족시키는 이유를 모르겠습니다.

21.10.27 14:19 작성 조회수 121

0

좋은 강의 잘 보고 있습니다. 감사드립니다.

이번 강의의 중요한 부분인듯 한데 제가 이해를 잘 못하는 부분이 있어서 이렇게 질문드립니다. 

flag 변수와 turn 변수의 원자성이 Peterson's problem의 Mutual exclusion 조건을 충족시키는 이유가 구체적으로 무엇인가요?

제가 조사한 바로는 기계어 레벨에서 flag에 true를 할당하는 부분이 while문의 뒤쪽에서 완료될 수 있기 때문이라고 이해를 했거든요. 그럼 양쪽 스레드 모두 상대방의 true를 확인하지 못하고 Critical Section에 접근하는 경우의 수가 생기더라고요.

정보 출처 : https://www.quora.com/Why-is-Petersons-solution-not-guaranteed-to-work-on-modern-computer-architecture-as-mentioned-in-Operating-System-Concepts-by-Silberschatz

 

반대로 이론적으로 상대 스레드의 접근성을 확인하는 라인(while 문)보다 flag에 true를 할당하는 부분이 위에 있으면 Mutual exclusion이 해결됨을 확인했습니다. 예를 들면 A스레드가 while문으로 B의 접근을 확인한 직후에, B스레드가 자신의 flag B를 True를 바꾸고 Critical Section에 접근한다고 해도, B는 무조건적으로 A가 True임을 확인할 수 있기 때문입니다. (A의 flag가 true가 되는 부분이 A의 while문 위에 있기 때문에)

그래서 강의 후반에 flag와 turn 부분을 원자성이 보장되도록 바꾸셨는데 결과가 0으로 나오는게 이해가 가지 않더라고요. 저는 Critical Section의 특정 부분(예제에서는 count 변수)을 원자성이 보장되는 변수로 바꿀줄 알았거든요. A 스레드에서 count를 1에서 2로 올리는 와중에 context switching이 일어나서 B 스레드에서 1에서 0로 바꿔버리면, 다시 A 스레드에게 주도권이 왔을 때 count는 2가 될 테니까요. 

그래서 flag와 turn 변수의 원자성이 어째서 Mutual exclusion을 보장되게 하는지 구체적인 이유를 알고싶습니다.

답변 1

답변을 작성해보세요.

0

피터슨 솔루션은 flag 변수의 원자성을 이용해서 

두 개의 프로세스가 동기화를 할 수 있는 알고리즘입니다.

따라서, flag 변수가 상호 배제를 달성한다는 전제하에서

turn 변수로 두 프로세스가 서로 교차되어 실행되도록 하는 알고리즘입니다.

따라서, 멀티코어 환경 등에서 flag 변수가 상호 배제를 달성할 수 없으면

당연히 피터슨 솔루션도 동기화 문제를 해결할 수 없게 됩니다.

그러므로, 상호 배제와 관련해서는 flag 변수로만 이해를 하고,

turn을 통해서 P(), V() 동작이 어떻게 동기화를 달성하는 지를 이해하시면 될 것 같습니다.