1. 프로세스간 통신이 의미하는 바는 무엇인가? 이를 개념적으로, 그리고 메모리의 관점에서 각각 설명해보자
>개념적으로 프로세스간 통신은 두 프로세스 사이에서 데이터를 주고 받는 것을 의미한다.
메모리의 관점에서 보면 이는 두 프로세스가 메모리를 공유하는 것으로 이해할 수 있다. 공유하는 메모리의 영역이 존재함으로써 프로세스 상호간에 데이터를 전달할 수 있기 때문이다.
2. 프로세스간 통신에는 IPC라는 별도의 메커니즘이 요구된다. 그리고 이는 운영체제에 의해서 지원되는 별도의 기능이다. 그렇다면 프로세스간 통신에 있어서 이렇듯 운영체제의 도움이 필요한 이유는 무엇인가?
>IPC를 위해서는 공유되는 메모리가 필요한데, 프로세스간에는 메모리를 공유하지 않기 때문에 운영체제의 도움이 필요하다. 즉, 두 프로세스가 동시에 접근 가능한 메모리 영역을 운영체제가 제공해야 한다.
3. 대표적인 IPC 기법으로 '파이프(pipe)'라는 것이 있다. 파이프의 IPC 기법과 관련해서 다음 질문에 답해보자
>
a. 파이프는 프로세스간에 데이터를 송수신하는 경로를 의미한다. 그렇다면 이 경로는 어떻게 해서 생성되며, 누구에 의해 만들어지는가?
->파이프는 pipe 함수의 호출에 의해서 만들어지는데, 이는 운영체제에 의해 생성된다.
b. 프로세스간 통신을 위해서는 통신의 주체가 되는 두 프로세스 모두 파이프에 접근이 가능해야 한다. 그렇다면 하나의 파이프에 두 프로세스는 어떻게 해서 모두 접근이 가능한가?
->pipe 함수호출에 의해 파이프가 생성이 되면, 파이프에 데이터를 입출력 하기 위한 파일 디스크립터 두개가 반환된다. 바로 이 파일 디스크립터를 fork 함수 호출 시 자식 프로세스에게 복사해줘서 부모 프로세스와 자식 프로세스 모두 파이프에 접근할 수 있게 된다.
c. 파이프는 두 프로세스간에 양방향 통신이 가능하게 한다. 그렇다면 양방향 통신을 진행하는데 있어서 특히 주의해야 할 사항은 무엇인가?
->파이프는 프로세스 사이에서의 데이터 흐름을 관리하지 않는다. 따라서 파이프에 데이터가 흘러 들어가면 어느 프로세스건 그 데이터를 읽어들일 수 있다. 결론을 말하자면, 프로세스 사이에서의 데이터 흐름이 어긋나지 않도록 주의해야 한다.(적절한 sleep 함수 호출)
4. IPC 기법을 확인하는 차원에서, 두 프로세스 사이에서 총 3회에 걸쳐서 문자열을 한번씩 주고받는 예제를 작성해보자. 물론 두 프로세스는 부모, 자식의 관계로 형성이 되며, 주고 받을 문자열의 종류는 프로그램상에서 여러분이 임의로 결정하기 바란다.
>
[리눅스 버전]
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#define BUF_SIZE 30
int main(int argc, char *argv[])
{
int fds1[2], fds2[2];
char str1[] = "Stardew Valley";
char str2[] = "What about it?";
char str3[] = "Stardew Valley is a great game";
char * str_arr[] = { str1, str2, str3 };
char buf[BUF_SIZE];
pid_t pid;
pipe(fds1); //파이프
pipe(fds2);
pid = fork();
if (pid == 0) //자식 프로세스
{
for (int i = 0; i<3; i++)
{
write(fds1[1], str_arr[i], strlen(str_arr[i]) + 1);
read(fds2[0], buf, BUF_SIZE);
printf("Child proc output: %s \n", buf);
}
}
else //부모 프로세스
{
for (int i = 0; i<3; i++)
{
read(fds1[0], buf, BUF_SIZE);
printf("Parent proc output: %s \n", buf);
write(fds2[1], str_arr[i], strlen(str_arr[i]) + 1);
}
}
return 0;
}
[참고] TCP/IP 소켓 프로그래밍 윤성우 저
'C > TCPIP 소켓 프로그래밍(윤성우 저)' 카테고리의 다른 글
TCP/IP 소켓 프로그래밍 13장 내용 확인문제 (0) | 2017.06.24 |
---|---|
TCP/IP 소켓 프로그래밍 12장 내용 확인문제 (2) | 2017.06.21 |
TCP/IP 소켓 프로그래밍 10장 내용 확인문제 (0) | 2017.06.15 |
TCP/IP 소켓 프로그래밍 1~5장 함수 복습 (0) | 2017.06.10 |
TCP/IP 소켓 프로그래밍 9장 내용 확인문제 (0) | 2017.06.10 |