네트워크프로그래밍11 프로세스간 통신

zh025700·2022년 5월 11일
0

네트워크 프로그래밍


11. 프로세스간 통신

기본 개념

프로세스간 통신이 왜 필요하지??

프로세스는 다른 메모리에 접근을 할 수없다.

프로세스는 서로 별개의 메모리 구조를 가진다.
그래서 각자 프로세스에서 변경된 값은 다른 프로세스에 적용되지 않는다..
그래서 프로세스간에 별도로 마련된 통신 방법으로 데이터를 전달한다.

시그널파이프를 이용하여 프로세스끼리 통신을 할 수 있다

보통 프로세스간 통신은 같은 컴퓨터 내에서 일어난다

파이프 기반의 프로세스간 통신

프로세스 A -> 파이프 -> 프로세스 B

  • 프로세스간 통신을 위해 파이프를 생성해야한다.

    • 프로세스들 사이에서 데이터를 전송한다
  • 파이프는 운영체제에 속하는 자원이다. not a 프로세스 자원

    • fork로 인한 복사가 되지 않는다. 그래서 이를 통해 통신이 가능하다.

  • IPC에서 파이프를 사용한다

    • Sender는 파이프에 쓰고 receiver는 그것을 읽는다
    • stream channel을 지원한다
    • 보낸 데이터는 보낸 순서가 있다

unnaned 파이프

  • unnamed 파이프는 데이터의 한방향 흐름만 제공한다

    • 제한된 양의 데이터를 FIFO 방식으로 저장할 수 있는 특별한 파일로 생각할 수 있음. 큐와 유사.
    • pipe()로 생성
    • 관련있는 프로세스들 끼리 사용가능
      • 부모 자식 프로세스와 같은
    • unnamed pipe는 프로세스가 사용하는 동안만 존재한다

  • 파이프 생성 함수
int pipe(int fildes[2]);
  • 성공 시 0, 실패 -1 반환
  • fd[1]입구 -> fd[0]출구 , 1에서 0으로 데이터 전송
부모프로세스가 함수를 호출하면 파이프가 생성됨
-> 입구, 출구 파일디스크립터를 동시에 획득하게 됨

프로세스간 통신을 위 fork()로 프로세스를 더 생성 후 파이프로 통신

그렇지만 문제가 있다...
각 프로세스가 하나의( 출력 입력 )만 사용하면 원활히 소통이 된다
하지만 프로세스 두개가 하나의 파이프로 양방향 통신을 하려고 하면???
파이프가 하나라서 데이터가 꼬임!!!

파이프 기반 양방향 통신

파이프에 데이터가 전달되면 먼저 가져가는 프로세스에 데이터가 전달된다.

그래서 하나의 파이프로 두개의 프로세스에서 양방향 통신을 시도하면 데이터가 꼬인다.

해결? 파이프를 2개 생성한다.

파이프1, 파이프2
프로세스 A(파이프1[1]) -> 파이프1 -> 프로세스 B(파이프1[0])
프로세스 B(파이프2[1]) -> 파이프2 -> 프로세스 A(파이프2[0])
profile
정리

0개의 댓글