flag, turn 변수의 원자성이 Peterson's problem의 Mutual exclusion을 충족시키는 이유를 모르겠습니다.
215
작성한 질문수 54
좋은 강의 잘 보고 있습니다. 감사드립니다.
이번 강의의 중요한 부분인듯 한데 제가 이해를 잘 못하는 부분이 있어서 이렇게 질문드립니다.
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() 동작이 어떻게 동기화를 달성하는 지를 이해하시면 될 것 같습니다.
퀴즈 7번의 답에 대한 질문입니다.
0
554
1
이해하고 있는것이 맞는건지 궁금합니다 ㅠㅠ
0
821
1
타우시간
0
553
1
퀴즈1 1번 질문합니다 !
1
611
1
Page는 Text Data이외에 다른 메모리도 포함하나요?
1
373
0
IPC shared memory 코드
0
520
1
[간단한 질문 ]banker's algorithm 을 linux 에서 실제로 프로세스 관리할때 쓰이나요?
0
402
0
user mode i/o 관련 질문
0
283
1
shared memory 관련해서 질문 드립니다.
0
521
1
교수님 fork()함수에 대해 질문이 있습니다.
0
896
2
process 와 thread
0
375
1
교수님 Docker 로 실습해도 괜찮을까요?
1
867
1
Mac OS에서 Docker 이용하여 Ubuntu 20.04 환경설정 방법 공유
22
3330
2
moniter, condition variable, synchronized에 대해서 궁금한점이 있습니다..
0
675
1
왜 무료인지 이해를 못 하겠네요..
3
433
1
7.1 Classic Problems of Synchronization 질문이 있습니다
0
307
1
공룡책 8판과 10판중
0
611
1
6.3 peterson's solution 질문이 있습니다
0
222
1
08-01 연습문제 8번 질문있습니다!
0
280
0
06. 프로세스간 통신의 실제: Chapter 3. Processes (Part 4) 에 그림 3.16 3.17 실습 오류
0
263
1
안녕하세요 교수님 실습 해봤는데 LINE J가 실행이 됩니다
1
356
1
2강 실습을 위한 개발환경 구축(Windows 10 + WSL 2 + Visual Studio Code)에서 출력오류
0
344
1
아래 질문 관련하여 다시 문의드립니다
0
199
1
Thread & Concurrency (Part 2) 질문드립니다
0
186
1





