Download presentation
Presentation is loading. Please wait.
Published byHilja Halttunen Modified 6년 전
1
인공지능실험실 석사 2학기 이희재 lhuijae@ai.hannam.ac.kr
TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
2
목차 프로세스간 통신 가위 바위 보 게임 구현하기
3
프로세스간 통신 독립된 메모리 영역 파이프 라인 생성 기법 이용 pipe 함수 이용
fd[0]에는 데이터를 입력할 수 있는 파일 디스크립터 fd[1]에는 데이터를 출력할 수 있는 파일 디스크립터 생성된 파이프는 프로세스에 종속적이지 않다. #include <unistd.h> int pipe(int fd[2]); 성공 시 0, 실패 시 -1을 리턴
4
파이프를 통해서 부모 프로세스와 자식 프로세스는 데이터를 주고 받는다.
프로세스간 통신 파이프를 이용한 프로세스간 통신 Fd[0] 파이프 출구 Parent process P I P E Fd[1] 파이프 입구 Child process 파이프를 통해서 부모 프로세스와 자식 프로세스는 데이터를 주고 받는다.
5
프로세스간 통신 pipe1.c #include<stdio.h> #include<unitd.h>
#include<stdlbi.h> #define BUFSIZE 30 Int main(int argc, char **argv) { int fd[2]; char buffer[BUFSIZE]; pid_t pid; int state; state = pipe(fd); // 파이프 생성 if(state == -1) { puts(“pipe() error”); exit(1); } pid = fork(); // 자식 프로세스 생성 if(pid == -1) { puts(“fork() error”); exit(1); } else if(pid == 0) { // 자식 프로세스 write(fd[1], “Good”\n”, 6); else { // 부모 프로세스 read(fd[0], buffer, BUFSIZE); puts(buffer); return 0;
6
프로세스간 통신 실행 결과
7
프로세스간 통신 파이프에 대한 고찰(1) 자식프로세스에게 파이프 복사? P I E 프로세스 영역 커널 영역
1. Pipe 함수 호출로 파이프 생성 용청 P I E 2. 요청에 의해 파이프 생성 3. 요청한 프로세스에 파일 디스크립터 전달 프로세스에 독립적인 파이프 생성
8
프로세스간 통신 파이프에 대한 고찰(2) 통신 방향 설정 P I P E Parent Process Child Process
fd[0] fd[1] fd[0] fd[1] P I P E 출구 입구 프로세스간 파이프 공유
9
프로세스간 통신 파이프에 대한 고찰(2) pipe2.c ...........
else if(pid == 0) { // 자식 프로세스 write(fd[1], “Good!”, 6); sleep(2); read(fd[0], buffer, BUFSIZE); printf(“자식프로세스출력 : %s\n”, buffer); } else { // 부모 프로세스 printf(“부모프로세스출력 : %s\n”, buffer); write(fd[1], “Really Good”, 12); } ■ 부모와 자식간에 문자열을 전송 ■ sleep(2) 함수로 2초간 대기 ■ 하나의 파이프를 서로 공유 실행결과
10
프로세스간 통신 파이프에 대한 고찰(2) pipe2.c ...........
else if(pid == 0) { // 자식 프로세스 write(fd[1], “Good!”, 6); //sleep(2); read(fd[0], buffer, BUFSIZE); printf(“자식프로세스출력 : %s\n”, buffer); } else { // 부모 프로세스 printf(“부모프로세스출력 : %s\n”, buffer); write(fd[1], “Really Good”, 12); } ■ sleep(2) 함수 주석처리 ■ 하나의 파이프를 부모와 자식 모두 공유 ■ 부모 프로세스는 블로킹 실행결과
11
프로세스간 통신 파이프에 대한 고찰(3) 양 방향 데이터 송신 파이프 2개 생성하여 입출력 분리 P I P E Parent
Process Parent Process 프로세스간 양 방향 통신 모델
12
프로세스간 통신 파이프에 대한 고찰(3) pipe3.c ...........
else if(pid == 0) { // 자식 프로세스 write(fd1[1], “Good!”, 6); read(fd2[0], buffer, BUFSIZE); printf(“자식프로세스출력 : %s\n”, buffer); } else { // 부모 프로세스 read(fd1[0], buffer, BUFSIZE); printf(“부모프로세스출력 : %s\n”, buffer); write(fd2[1], “Really Good”, 12); } ■ pipe(fd1); pipe(fd2); ■ 파이프를 2개 만든다. ■ 프로세스는 입출력시 서로 다른 파이프 이용 실행결과
13
가위 바위 보 게임 구현하기 흐름도 ■ 두개의 파이프를 생성하고 클라이언트 연결 대기 ■ 연결 요청 수락, 자식 프로세스 생성
1.연결요청 ■ 두개의 파이프를 생성하고 클라이언트 연결 대기 ■ 연결 요청 수락, 자식 프로세스 생성 ■ 부모 프로세스는 콘솔에서 입력받고, 자식 프로세스는 클라이언트로부터 입력 받는다. ■ 파이프를 통해 자식 프로세스가 가지고 있는 클라이언트의 선택을 입력받는다. ■ 두 값을 비교 ■ 결과를 파이프를 통해 자식에게 전송, 자식은 클라이언트에게 결과 값 전송 Parent process Clinet 2.fork P I P E 3.연결완료 데이터송수신 Child process 가위 바위 보 게임 흐름도
14
가위 바위 보 게임 구현하기 실행 결과 SERVER Client
15
참고문헌 “UNIX Network Programming”, W.Richard Stevens
“TCP/IP 소켓 프로그래밍”, 윤성우 저
16
Q & A
Similar presentations