[질문] IPC 통신중 프로세스 대기 시키는 방법에 대해 질문입니다..
글쓴이: zippiest / 작성시간: 월, 2007/11/26 - 4:23오전
IPC 통신중 FIFO 로 정보를 주고 받는 프로그래밍을 하고 있습니다...
FIFO 에서 두개의 파이프를 통해 통신합니다.. 예를들어 A와 B 프로세스가 있으면
(이때, 총 10개의 데이터를 보낸다고 가정합니다..)
1. A 가 첫번째 파이프를 통해 첫번째의 데이터 1개를 보냅니다.
2. B 가 데이터를 받고 그 데이터를 받고 데이터가 옳은것인지 아닌지를 여부정보를 A에게 두번째 파이프를 통해 보냅니다
3. A는 두번째 파이프를 통해 옳은지 여부정보를 받고 옳다면 다시 첫번째 파이프로 2번째데이터를 보냅니다..
위와같은 방식의 프로그래밍을 하려하는데 B 프로세스를 백그라운드로 띄우고 A를 실행하면,
10개의 데이터가 모두 한꺼번에 보내지게 됩니다.. 즉 A 프로세스가 다 수행되고 나서 B 프로세스가 수행됩니다..
이것을 위에가정한것 처럼 두 프로세스를 번갈아가면서 수행할 수 있는 방법은 없나요???
Forums:
동기화를 이루는
동기화를 이루는 많은 메커니즘이 있지만, 질문자님같은 경우에는 단순하게, Stop and Wait전략으로 풀면 될듯합니다.
A가 D1(데이터 1개)을 B에게 보내고, A는 D1에 대한 응답이 B로 부터 오기 까지 대기(더이상 전송하지 않고)하게 하면 됩니다.
이때, B는 데이터를 1개(D1) 수신하고, 이에 대한 판단후, D1이 옳은 것인지? 틀린 것인지? 둘 다에 대해, 그 여부를 A에게 전송하게 합니다.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
네 답변
네 답변 감사합니다... 그런데 A에대한 응답이 B로부터 오기까지 대기하게 하면서 A에서 바로응답이오면
다시 대기를 푸는 방법을 써야한다는건 아는데..그걸 어떻게 프로그램으로 구현할지를..잘 모르겠습니다..
어떤 한프로세스가 수행되고 있는상태에서..어떻게 대기시켜놓고..다른 프로세스를 실행시키는지...
만약 부모자식간의 프로세스라면 모르는데..서로다른 프로세스간의 어떻게 그렇게 할수 있는지..모르겠습니다..
이 경우에 구지
이 경우에 구지 세마포같은 메카니즘이 필요하지 않으며, 단순하게 시스템호출(커널을 경유)로 그 동기를 맞출수 있겠습니다.
A프로세스의 pseudo code를 기술하자면,
for ( 메시지의 개수) {
write(FIFO); // B에게 쓰는 부분
read(FIFO); // A에게 응답을 받는 부분 -> 이 부분에서 응답이 올때까지 read를 합니다.
// 응답메시지의 길이가 n이라면 nread(), readn()등 루프스타일로 입력받는 루틴을 만들
}
* B프로세스는 반대로 동작하겠지요. read->write형태로 말입니다.
* readn() 워낙에 자주 사용되는 코드이다 보니, 표준처럼되어버린 함수입니다. 검색하면 쉽게 찾으리라고 봅니다.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
파이프 같은 경우에
파이프 같은 경우에 굳이 비동기로 파이프를 열지 않으면 기본적으로 동기 전송 아닌가요?
읽기든 쓰기든, 상대방 쪽에서 반응이 없을 경우 블록되어서 대기 상태로 들어 가지 않나요?
mach님께서 말씀하신대로 읽기 쓰기를 번갈아서 하면, 읽는 프로세서가 항상 블록되어서 별다른 동기화 메커니즘 필요 없으듯 합니다.
댓글 달기