프로세스는 다른 메모리에 접근을 할 수없다.
프로세스는 서로 별개의 메모리 구조를 가진다.
그래서 각자 프로세스에서 변경된 값은 다른 프로세스에 적용되지 않는다..
그래서 프로세스간에 별도로 마련된 통신 방법으로 데이터를 전달한다.
시그널
과파이프
를 이용하여 프로세스끼리 통신을 할 수 있다
보통 프로세스간 통신은 같은 컴퓨터 내에서 일어난다
프로세스 A -> 파이프 -> 프로세스 B
프로세스간 통신을 위해 파이프를 생성해야한다.
파이프는 운영체제
에 속하는 자원이다. not a 프로세스 자원
IPC에서 파이프를 사용한다
unnaned
파이프
unnamed 파이프는 데이터의 한방향 흐름만 제공한다
int pipe(int fildes[2]);
부모프로세스가 함수를 호출하면 파이프가 생성됨
-> 입구, 출구 파일디스크립터를 동시에 획득하게 됨
프로세스간 통신을 위 fork()로 프로세스를 더 생성 후 파이프로 통신
그렇지만 문제가 있다...
각 프로세스가 하나의( 출력 입력 )만 사용하면 원활히 소통이 된다
하지만 프로세스 두개가 하나의 파이프로 양방향 통신을 하려고 하면???
파이프가 하나라서 데이터가 꼬임!!!
파이프에 데이터가 전달되면 먼저 가져가는 프로세스에 데이터가 전달된다.
그래서 하나의 파이프로 두개의 프로세스에서 양방향 통신을 시도하면 데이터가 꼬인다.
해결? 파이프를 2개 생성한다.
파이프1, 파이프2
프로세스 A(파이프1[1]) -> 파이프1 -> 프로세스 B(파이프1[0])
프로세스 B(파이프2[1]) -> 파이프2 -> 프로세스 A(파이프2[0])