임계구역에 대한 이론적인 부분의 질문입니다.
글쓴이: suh1978 / 작성시간: 목, 2006/02/02 - 9:01오후
그 흔한(?) 공룡책을 보던중에 잘 이해가 안되는 부분이 있어서 질문올립니다.
번역서 6번째판의 7.2.1.1에서 보면 알고리즘1이라는 내용이 나오는데요.
임계영역에서의 알고리즘에 대한 설명을 해주고 있습니다. 그중에 아래와 같은 의사코드가 있습니다.
do { while (turn != i) ; critical section turn = j; remainder section } while (1);
책에서는 다음과 같이 설명합니다.
쓰레드들이 0이나 1로 초기화되는 공동의 정수 변수인 turn을 공유하도록 하는 것이다. 만일 turn== i라면 쓰레드 Pi가 임계 구역에서 실행하도록 허용된다.
여기에서 i, j는 무엇을 나타내는부분인지를 모르겠습니다.
처음에는 단순히 예를 들어 설명한 Pi, Pj의 식별자라고 생각했는데,
그렇다면 i, j값은 변경되는 것이 아니기 때문에 두개의 쓰레드중에 i에 해당하는 쓰레드만 수행되는게 아닌가 해서요.
#. 요즘들어 확실한 개념잡기에 전념하려고 합니다.
이게 처음에는 좀 느리지만, 원론적인 개념을 잡으면 나중에 가서 좀 고생을 들할것이다라는 결론이 들어서요.
Forums:
Re: 임계구역에 대한 이론적인 부분의 질문입니다.
turn은 스케줄러가 현재 실행코저 하는 pid, i는 전체 프로세스 리스트, j는 turn 실행후, 다시 한번 우선순위 결정하여 새로 결정된 가장 순위 높은 process object의 pid 정도로 생각하면 되지 않을까 합니다. j는 매번 우선순위 가장 높은 process를 새로 뽑는 것이 될것같고, i는 전체 프로세스 리스트 훑으며 맞는 process 찾는 과정일 듯. 소설을 좀더 쓰자면, 전체 프로세스 리스트에는 j가 속한 우선순위 리스트에는 없는 실행에 필요한 정보가 있기 때문에(쉽게 상상하면 process object 리스트) 이런 식으로 할 듯.
Re: 임계구역에 대한 이론적인 부분의 질문입니다.
말씀하신대로 프로세스의 식별자입니다.
Pi 프로세스의 경우에는 위와같이 소스가 구현되어있고,
Pj 프로세스의 경우에는 i와 j가 서로 바뀌어서 코드가 작성되어있어야합니다.
그러면 Pi는 j 에게 차례를 넘기고,
Pj는 i에게 차례를 넘기는 식으로 코드가 되는거죠.
--
Passion is like genius; a miracle.
답변주신 두분께 감사드립니다.
제가 잘 이해가 안되서 도움을 요청해서 그런지 두분의 말씀이 서로 다르게만 읽혀집니다.
혹시 다시한번 답변을 부탁드려도 되겠는지요~ :roll:
#. 다른 프로그램머들은 데드라인이 걸리면 안되도 되게 하는 "신기"가
발휘되는데 왜 저는 각 책한권을 보기위한 데드라인을 정해놔도 그걸
지키기가 어려울까요. 스스로 정한 데드라인과 타인이 정해준 데드라인과는
역시 큰차이가 있는것었을까요 :?
열정은 남자의 미래다! - suki1978 style, free style
i는 자신의 pid이고, (꼭 pid가 아니더라도, 어쨌거나 자기를 가리
i는 자신의 pid이고, (꼭 pid가 아니더라도, 어쨌거나 자기를 가리킬 수 있는 식별자) j는 상대방의 pid 입니다.
예를들어 Process 0 의 경우는 i=0, j=1이고, Process 1의 경우는 i=1,j=0인 게지요. turn 은 두 프로세스가 공유하는 변수이고요. (프로세스 대신 쓰레드로 생각해도 마찬가지)
처음에 turn 값이 0이라고 하고,
P0이 먼저 진입을 시도하면 while 문이 거짓이 되니까 바로 임계영역에 진입합니다.
P0이 임계영역을 수행하고 있는 도중에 P1이 진입을 시도할 경우, turn 값이 1이 아니니, 즉 while문의 조건이 참이니 계속 무한루프를 돌게 됩니다.
P0이 임계영역 수행을 마치고 turn값을 j, 즉 1로 바꿔놓고 나갑니다.
P1은 이 이후 while문 검사에서 거짓이 되어 임계영역에 진입하여 작업을 수행합니다.
이 때 P0이 다시 임계영역을 진입하고자 하면, 역시 while문에서 무한 루프를 돕니다. 이후 계속 같은 식으로 두 프로세스가 번갈아가며 "한 순간에는 둘 중 하나만 임계 영역을 수행하고 있는" 상태를 보장합니다.
(근데 책을 계속 읽어보면 나오겠지만, P0이 임계영역을 마치고 다시 임계영역을 들어가고 싶은데, P1이 그 사이에 임계영역에 들어갔다 나오지 않고 어디 다른 곳에서 놀고 있는 상태라면, P0은 뻔히 비어있는 임계영역에 들어가지 못하는 사태가 발생하는 것이 단점이죠)
좋은 하루 되세요!
댓글 달기