Sunday, January 30, 2011

chapter 11 (프로세스간 통신(Inner Process Communication))

-프로세스간 통신의 기본 개념-
프로세스간 통신의 기본 이해 
예를 들어 프로세스 A가 프로세스 B의 특정 변수를 통해서 프로세스 B의 상태 내지는 값을 알려고 할때 이것이 프로세스 간의 통신다. 그런데 fork 함수를 통해서 프로세스를 생성하게 되면 부모 프로세스의 내용을 새로운 메모리 공간에 복사 하기 때문에 두 프로세스 간에는 공유하는 메모리 공간이 없기 때문에 두 프로세스 간에 통신이 이루어 지기 위해서는 별도의 방법이 필요하다.
파이프(PIPE) 기반의 프로세스간 통신
이렇듯 두 프로세스가 통신하기 위해서는 파이프 라는 것을 생성해야 한다. 이는 운영체제의 자원, 즉 메모리 공간으로 fork에 의해 복사 되는 것이 아니다(다만 그 파이프를 의미하는 파일 디스크립터가 복사 된다). 이 파이프 생성 함수로 int pipe(int filedes[2]); 가 있으며 int형 배열 filedes에 [0]인자를 파이프의 출구에 해당하는 파일 디스크립터가 [1]에는 입구에 해당하는 파일 디스크립터가 저장된다. 이 파이프를 이용해서 두 프로세스간에 통신이 가능하다.
파이프 기반의 프로세스간 양방향 통신
*책의 예제를 반드시 살펴라. pipe 사용시 주의 해야 할 점이 코딩되어 있다. 
파이프 하나를 놓고 두 프로세스에서 통신할때 두 프로세스 모두 read write 함수를 호출해서 pipe에다가 메시지를 주고 받을때, 코딩에 따라 자기가 보낸 메시지를 자기가 받는 경우가 생긴다. (책의 예제를 보게 되면 알게 되는 점이 부모 프로세스가 끝나면 자식 프로세스의 실행 코드의 유무에 상관없이 명령 프롬프트로 돌아오게 된다. 또 하나 A라는 프로세스에서 read를 호출하기 전에 B라는 프로세스에서 write가 호출되어야 파이프에 B에서의 메시지가 써져서 A 프로세스에서 읽혀지게 되는데 write 함수가 호출되기전에 read함수가 호출되면 어떻게 되나 생각이되는데 이는 read가 함수가 pipe의 내용을 읽을때까지 대기하게 된다.) 그럼 자기가 보낸 메시지를 자기가 받지 않고 반드시 상대방이 받게 하는 방법은 두개의 파이프를 사용하는 것이다.

-프로세스간 통신의 적용-
메시지를 저장하는 형태의 에코 서버
무엇인가 더 큰걸 만들어보고 싶다면

No comments:

Post a Comment